You are on page 1of 9

/ LCD

JHD162A

16 x 2
5 x 8
1/16D

TN STN( )
EL LED
EL/100VAC 400HZ
LED/4.2VDC

(V
DD=5.0V

10%,VSS=0V,Ta=25

VDD-VSS
VIH
VIL
VOH
VOL
IDD

-IOH=02mA
IOL=1.2mA
VDD=5.0V

4.5
2.2
-0.3
2.4
-

5.0
1.5

5.5
VDD
0.6
0.4
3.0

V
V
V
V
V
mA

/
/


1
2
VSS

VCC

10

11

12

13

14

15

16

VEE

RS

R/W

DB0

DB1

DB2

DB3

DB4

DB5

DB6

DB7

LED+

LED-

/ LCD

AC Characteristics

/ LCD

Read Mode Timing Diagram

Write Mode Timing Diagram

/ LCD

CGROM

/ LCD

(
()
)
#include <reg51.h>
#include <intrins.h>
sbit dc=0xa0;
/*P2.0 LCD RS 21*/
sbit rw=0xa1;
/*P2.1 LCD R/W 22*/
sbit cs=0xa4;
/*P2.4 LCD E 25*/
sfr lcdbus=0x80;
/*p0LCD D0=P0.0*/
unsigned int sys10mscounter;
unsigned char syslimitcounter;
char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*
char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*
char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*
char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*
void soft_nop(){}
void soft_10ms()/***********12MHZ 10MS ************/
{
register int i;
for(i=0;i<711;i++);
}
void soft_20ms()/***********12MHZ 20MS ************/
{
soft_10ms();
soft_10ms();
}
void hard_10ms(unsigned int delaytime) /* 10MS */
{
sys10mscounter=delaytime;
while(sys10mscounter);
}
unsigned char data lcdcounter;
bit lcdusing1,lcdusing2;
bit lcd_checkbusy()/* LCD */
{
register lcdstate;
dc=0;
/*dc=1 ,=0 .*/
rw=1;
/*rw=1 ,=0 .*/
cs=1;
/*cs=1 .*/
soft_nop();
lcdstate=lcdbus;
cs=0;
return((bit)(lcdstate&0x80));
}
void lcd_wrcmd(unsigned char lcdcmd) /* LCD */
{
lcdusing1=1;
while(lcd_checkbusy());
lcdbus=lcdcmd;
dc=0;
/*dc=1 ,=0 .*/
rw=0;
/*rw=1 ,=0 .*/
cs=1;
/*cs=1 .*/
soft_nop();
5

1*/
2*/
1*/
2*/

/ LCD

cs=0;
lcdbus=0xff;
lcdusing1=0;
}
void lcd_moveto(char position) /*.0-79*/
{
register cmd=0x80;
lcdcounter=position;
if (position > 59)
position += 0x18;
else
{ if (position > 39)position -= 0x14;
else
{
if (position > 19)position += 0x2c;
}
}
cmd=cmd|position;
lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata) /**/
{
char i;
lcdusing2=1;
while(lcd_checkbusy());
if(lcdcounter==20){
lcd_moveto(20);
while(lcd_checkbusy());
}
if(lcdcounter==40){
lcd_moveto(40);
while(lcd_checkbusy());
}
if(lcdcounter==60){
lcd_moveto(60);
while(lcd_checkbusy());
}
if(lcdcounter==80){
lcd_moveto(0);
while(lcd_checkbusy());
lcdcounter=0;
}
/**/
lcdcounter++;
lcdbus=lcddata;
dc=1;
/*dc=1 ,=0 .*/
rw=0;
/*rw=1 ,=0 .*/
cs=1;
/*cs=1 .*/
soft_nop();
cs=0;
6

/ LCD

lcdbus=0xff;
lcdusing2=0;
}
void lcd_string(char *strpoint) /* LCD */
{
register i=0;
while(strpoint[i]!=0){
lcd_wrdata(strpoint[i]);
i++;
}
}
void lcd_init()/**/
{
lcd_wrcmd(0x38);
/* 8 ,2 ,5*7*/
lcd_wrcmd(0x0c);
/*,,*/
lcd_wrcmd(0x06);
/*,*/
lcd_wrcmd(0x01);
/**/
lcdcounter=0;
}
void lcd_cls()/**/
{
lcd_wrcmd(0x01);
lcdcounter=0;
}
void timer0(void) interrupt 1
/*T0 */
{
TH0=0xd8;
/*12M,10ms*/
TL0=0xf6;
TR0=1;
if(sys10mscounter!=0)sys10mscounter--;
/* 10ms*/
if(syslimitcounter!=0)syslimitcounter--; /* 10ms*/
}
main()
{
unsigned char j;
IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; /* T*/
lcd_init();soft_20ms();
TMOD=0x51;
TH0=0xd8;
/*12M,10ms*/
TL0=0xf6;
TR0=1;ET0=1;EA=1;
while(1)
{
/* U Q ABCD... */
lcd_init(); /**/
for(j=0;j<80;j++){lcd_wrdata(0xff);}
hard_10ms(50);
lcd_init(); /* */
lcd_wrcmd(0x40);
for(j=0;j<8;j++)lcd_wrdata(path1[j]);
7

/ LCD

for(j=0;j<100;j++)lcd_wrdata(0);
hard_10ms(50);
lcd_init(); /**/
lcd_wrcmd(0x40);
for(j=0;j<8;j++)lcd_wrdata(path2[j]);
for(j=0;j<100;j++)lcd_wrdata(0);
hard_10ms(50);
lcd_init(); /**/
lcd_wrcmd(0x40);
for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
for(j=0;j<100;j++)lcd_wrdata(0);
hard_10ms(50);
lcd_init(); /**/
lcd_wrcmd(0x40);
for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
for(j=0;j<100;j++)lcd_wrdata(0);
hard_10ms(50);
lcd_init();
lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUU");
hard_10ms(50);
lcd_init();
lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
QQQQQ");
hard_10ms(50);
lcd_init();
lcd_string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789+-!
#$%&?");
hard_10ms(50);
}
}

* C51

CPU

/ LCD

fosc=250kHz
1.64ms

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

DDRAM 0
DDRAM .

1.64ms

I/D

40s

D
C B.

40s

S/C

R/L

DDRAM

40s

DL

DL
L F

40s

CGRAM

DDRAM

CGRAM/DD
RAM
CGRAM/DD
RAM

CGRAM

40s

ADD

DDRAM

40s

BF

AC

0s

BF

CGRAM DDRAM

ACG

I/D=1 I/D=0
S=1
S/C=1 S/C=0
R/L=1 R/L=0
DL=1 8 DL=0 4
N=1 2 N=0 1
F=1 5 x 10 F=0 5 x 7
BF=1 BF=0
High 4BIT
LOW 4BIT

MSB
0000

LSB
xxxx0000

RAM
(1)

xxxx0001

(2)

xxxx0010

(3)

xxxx0011

(4)

xxxx0100

(5)

xxxx0101

(6)

xxxx0110

(7)

xxxx0111

(8)

xxxx1000

(1)

xxxx1001

(2)

xxxx1010

(3)

xxxx1011

(4)

xxxx1100

(5)

xxxx1101

(6)

xxxx1110

(7)

xxxx1111

(8)

0010

0011

0100

0101

0110

0111

#
$
%
&

(
)
*
+
,
.
/

0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?

@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

P
Q
R
S
T
U
V
W
X
Y
Z
[

]
^
_

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o

p
q
r
s
t
u
v
w
x
y
z
{
|
}

1000

1001

1010

AC 0

40s

CGRAM DDRAM

40s

DDRAM RAM
CGRAM RAM
ACG CGRAM
ADD DDRAM

AC
DDRAM CGRAM

fcp
fosc=270KHZ
40 s x

1011

1100

1101

250/270=37

1110

1111

p
q

g
_

j
`

_
n

You might also like