Professional Documents
Culture Documents
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
/ 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