时5mS
写指令38H(不检测忙信号)
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:显示模式设置
写指令08H:显示关闭
写指令01H:显示清屏
写指令06H:显示光标移动设置
写指令0CH:显示开及光标设置
10.8.3 1602LCD的软硬件设计实例
在1602LCD第一行显示网站名:www.hificat.com在第二行显示联系电 话:0571-85956028。实验前应先将显示切换开关切换到LCD工作状态。
图10-59 1602LCD实验演示图
10.8.3.1 硬件原理图
1602液晶显示模块可以和单片机AT89C51直接接口,电路如图10-60所示。
图10-60 硬件原理图
10.8.3.2 程序流程图
图10-61 软件流程图
10.8.3.3 软件代码
#include
#include
sbit rs= P2^0;
sbit rw = P2^1;
sbit ep = P2^2;
unsigned char code dis1[] = {"www.hificat.com"};
unsigned char code dis2[] = {"0571-85956028"};
void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
bit lcd_bz()
{
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(unsigned char cmd)
{
while(lcd_bz());//判断LCD是否忙碌
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80);
}
void lcd_wdat(unsigned char dat)
{
while(lcd_bz());//判断LCD是否忙碌
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_init()
{
lcd_wcmd(0x38);
delay(1);
lcd_wcmd(0x0c);
delay(1);
lcd_wcmd(0x06);
delay(1);
lcd_wcmd(0x01);
delay(1);
}
void main(void)
{
unsigned char i;
lcd_init();// 初始化LCD
delay(10);
lcd_pos(0x01);//设置显示位置
i = 0;
while(dis1[i] != /0)
{
lcd_wdat(dis1[i]);//显示字符
i++;
}
lcd_pos(0x42);// 设置显示位置
i = 0;
while(dis2[i] != /0)
{
lcd_wdat(dis2[i]);// 显示字符
i++;
}
while(1);
}
|