1.项目简介:利用Proteus仿真在LCD1602上显示字母。
2.设计思路:首先要读懂LCD1602的时序图和每一个端口高低电平时的含义。
然后,通过操作的端口的高低电平来达到操作数据的目的。主要思路是,根据端口的组合来,将数据赋值到数据引脚,注意延时。
电路图如下:
3.代码:
#include <reg52.h>
#define unchar unsigned char
#define uint unsigned int
unchar code table[] = "hello ereryone";
unchar code table1[] = "welcome to here!";
//define pins
sbit lcden = P2^2;
sbit lcdrs = P2^0;
sbit lcdrw = P2^1;
unchar num;
void delay(uint z)
{
uint x,y;
for(x = z;x > 0;x--)
{
for(y = 110;y > 0;y--);
}
}
void write_com(unchar com)
{
lcdrs = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void write_data(unchar date)
{
lcdrs = 1;
P0 = date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void init()
{
lcden = 0;
write_com(0x38);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
}
void main()
{
lcdrw = 0;
init();
write_com(0x80);
for(num = 0;num < 15;num++)
{
write_data(table[num]);
delay(5);
}
write_com(0x80 + 0x40);
for(num = 0;num < 16;num++)
{
write_data(table1[num]);
delay(20);
}
while(1);
}
4.运行结果:
5.总结: 通过使能端口的状态(高低电平),进行数据和命令的操作。需要注意的是,在计算机中8个bit为一个字节,所以lcd的数据引进有8个,通过给这8个引进赋予二进制数(0/1),组合起来就是字母对应ascii码,即可显示出字母。因为LCD1602只有8个数据引脚,所有它一次只能写入一个字母。如果要写汉字,需要转换ascii码。