单片机+LCD1602液晶显示字符串

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1602液晶显示字符串(附带程序)(注意说明:使用的实验板是郭天祥老师的52单片机板)

基本操作电路

状态字说明RAM地址映射图

初始化相关指令的意思读时序图

写时序图

要想通过1602液晶来显示你想要显示字符串,其实是很简单的,程序虽然有点长,但是都是按照步骤来的。

1602的五大步骤

第一个步骤:

检查LCD忙状态

lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。第二个步骤:

写指令数据到LCD

RS=L,RW=L,E=高脉冲,D0-D7=指令码。

第三个步骤:

写显示数据到LCD

RS=H,RW=L,E=高脉冲,D0-D7=数据。

第四个步骤:

设定显示位置

第五个步骤:

LCD初始化设定

只要这五步你弄懂了,什么样的字符串都可以按照你的方式显示。至于这其中的步骤的具体的方式,我们就要参照1602的资料和时序图!不过你大可不必,这份文档就足够了!

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6;

sbit wela=P2^7;

sbit LCD_RS = P3^5;

sbit LCD_RW = P3^6;

sbit LCD_EN = P3^4;

uchar code dis1[] = {" WLCOME TO "}; uchar code dis2[] = {" JIANG GAN HUA "}; uchar code dis3[] = {" NAN CHANG "}; uchar code dis4[] = {" HANG KONG DX"}; void delay(int ms)

{

int i;

while(ms--)

{

for(i = 0; i< 110; i++)

{

_nop_();

}

}

}

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result = (bit)(P0&0x80);

LCD_EN = 0;

return result;

}

void lcd_wcmd(uchar cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

_nop_();

_nop_();

_nop_();

LCD_EN = 1;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 0;

}

void lcd_wdat(uchar dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 1;

_nop_();

_nop_();

_nop_();

_nop_();

LCD_EN = 0;

}

void lcd_pos(uchar pos)

{

lcd_wcmd(pos|0x80); //数据指针=80+地址变量

}

void lcd_init()

{

dula=0;

wela=0;

lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x38);

delay(5);

lcd_wcmd(0x0c); //显示开,关光标

lcd_wcmd(0x06); //移动光标

delay(5);

lcd_wcmd(0x01); //清除LCD的显示内容

delay(5);

}

main()

{

uchar i;

delay(10);

lcd_init(); // 初始化LCD

while(1)

{

lcd_wcmd(0x06); //向右移动光标

lcd_pos(0); //设置显示位置为第一行的第1个字符

i = 0;

while(dis1[i] != '\0')

{ //显示字符

lcd_wdat(dis1[i]);

i++;

delay(50); //控制两字之间显示速度

}

lcd_pos(0x40); //设置显示位置为第二行第1个字符

i = 0;

while(dis2[i] != '\0')

{

lcd_wdat(dis2[i]); //显示字符"

i++;

delay(50); //控制两字之间显示速度

}

//闪动二次

lcd_wcmd(0x01); //清除LCD的显示内容

delay(200); //控制转换时间

lcd_wcmd(0x04); //向左移动光标

lcd_pos(15); //设置显示位置为第一行的第16个字符

i = 0;

delay(50);

while(dis3[i] != '\0')

相关文档
最新文档