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=0x 0c ;//打开显示开关
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&0x 7f ;
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;
}
}