微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51 单片机综合学习系统之 1602字符型液晶显示篇

51 单片机综合学习系统之 1602字符型液晶显示篇

时间:11-28 来源:互联网 点击:

时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);

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top