1、液晶引脚功能如下:
编号 |
符号 |
引脚说明 |
编号 |
符号 |
引脚说明 |
1 |
VSS |
电源地 |
9 |
D2 |
Data I/O |
2 |
VDD |
电源正极 |
10 |
D3 |
Data I/O |
3 |
VL |
液晶显示偏压信号 |
11 |
D4 |
Data I/O |
4 |
RS |
数据/命令选择端 |
12 |
D5 |
Data I/O |
5 |
R/W |
使能信号 |
13 |
D6 |
Data I/O |
6 |
E |
Data I/O |
14 |
D7 |
Data I/O |
7 |
D0 |
Data I/O |
15 |
BLA |
背光电源正极 |
8 |
D1 |
Data I/O |
16 |
BLK |
背光电源负极 |
2、基本操作时序:
读状态:RS=L,RW=H,E=H 输出:D0~D7=状态字
写指令:RS=L,RW= L,D0~D7=指令码,E=高脉冲 输出:无
读数据:RS= H,RW=H,E=H 输出:D0~D7=数据
写数据:RS= H,RW= L,D0~D7=数据,E=高脉冲 输出:无
3、显示模式设置:
指令码 |
功能 | |||||||
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
设置1602*2显示,5*7点阵,8位数据口 |
4、显示开/关机光标设置:
指令码 |
功能 | |||||||
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
D=1 开显示;D=0 关显示; C=1 显示光标;C=0 不显示光标; B=1 光标闪烁;B=0 光标不显示 |
0 |
0 |
0 |
0 |
0 |
1 |
N |
S |
N=1 当读或写一个字符后地址指针加一,且光标加一 N=0当读或写一个字符后地址指针减一,且光标减一 S=1 当写一个字符,整屏显示左移(N=1) |
任务二:
1、打开WAVE软件,新建一个文件,输入以下程序:
#include<reg52.h>
#define uchar unsigned char
sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^5;
delay(uchar time)
{while(time>0)
{time--;}
}
void enrw()
{rs=0;
rw=0;
e=0;
delay(250);
e=1;
}
write_data(uchar c)
{P1=c;
rs=1;
rw=0;
e=0;
delay(250);
e=1;
}
init_lcd(void)//初始化
{
P1=0x01;//清屏幕
enrw();
P1=0x38;//数据长度为8位,双行显示,5*7字符。
enrw();
P1=0x0c;//打开显示开关
enrw();
P1=0x06;//地址计数递增,显示屏不移动
enrw();
}
write_cmd(uchar m)//写命令,注意与写数据的区别
{ P1=m;
enrw();
}
position(uchar row,uchar colum)//写位置
{uchar p;
if(row==1)
p=0x82+colum-1;
else
p=0xC0+colum-1;
write_cmd(p);
}
display(uchar *s)//写字符串,简单的指针应用
{
for(;*s!='/0';s++)
write_data(*s);
}
void main()
{unsigned int m,n;
m=1;
n=2;
init_lcd();
position(m,1);
display("welcome to here! ");
position(n,1);
display("study happy!");
while(1){;}
}
2、保存并编译程序;
任务三:
1、串口寄存器
89s52的串行口是全双工的UART,可同时接收和发送数据,是使用特殊寄存器内的SBUF寄存器及SCON串行控制寄存器。(1)SCON串行控制寄存器
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
RI:接收中断标志位。在模式0下,当第8 位结束时,硬件会将其设置为1,在其他模式下载停止位的一半时由硬件设定,此位必须由软件清除;
TI:发送中断标志位。在模式0下,当第八位结束时,硬件会将其设置为1,在其他模式下载停止位的一半时由硬件设定,此位必须由软件清除;
RB8: 在模式2或3时,发送时的第九数据位放入此位,在模式1时,若SM2=0,则RB8为接收到的停止位,模式0时,RB8没用;
TB8:在模式2或3时,发送时的第九数据位由软件控制;
REN由软件设定或清除,以决定是否接收串行数据,1为接收,0为发送;
SM2:当串行口模式为2或3时,使能多处理器通信的功能,在模式0时,SM2必须为0;
SM1:串行口模式选择;
SM0:串行口模式选择;
(2)PCON电源控制寄存器
SMOD |
— |
— |
— |
GF1 |
GF0 |
PD |
IDL |
SMOD:双倍波特率。当串行工作于模式1、2或3时,如使用TIMER1做波特率发生器,且SMOD=1则波特率为双倍;
GF1、GF0:通用标志位;
PD:电源下降位,PD为1时进入掉电状态;
IDL:IDLE模式位,IDL为1时进入空闲工作方式;
(3)合法波特率:110、300、600、1200、2400、9600、14400、19200、28800、38400、56000、128000, 256000
任务四:
1、打开WAVE软件,新建一个文件,输入以下程序:#include<reg52.h>
#define uchar unsigned char
char date[3];
main()
{int a,i;
date[0]=0x00;
date[1]=0x10;
SCON=0x50; // 工作方式
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=PCON&0x7f;
TR1=1;
while(1)
{date[0]=0x00;
date[1]=0x10;
date[2]=0x20;
while(!RI)
{P0=date[0]+a%100%10;
for(i=0;i<100;i++);
P0=date[1]+a%100/10;
for(i=0;i<100;i++);
P0=date[2]+a/100;
for(i=0;i<100;i++);
}
a=SBUF; //把接收到的数据传给变量a
RI=0;
}
}