LCD1602
LCD1602是一款由HD44780驱动的液晶显示屏,可一次性显示
2
×
16
2\times16
2×16个字符,每个字符为5*7的点阵。
详细介绍看这里,非常完整
和其他的元器件一样,在使用时,需要先对其进行初始化,即根据时序图对其进行配置。配置完成后,直接向地址0x80(第一行)与第二行(0xC0)写入数据即可显示英文字符、数字、平假名,无需考虑字符点阵
电路图
代码
#include<reg52.h>
int init(); //声明初始化函数
int write_com(unsigned char);//声明写命令函数
int write_date(unsigned char);//声明写数据函数
int delay(unsigned char);//声明延迟函数
unsigned char x;
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
unsigned char code table[]="HELLO!";
unsigned char code table1[]="I love anime! ";
int main(void)//主函数
{
init();
write_com(0x80);
for(x=0;x<6;x++)
{
write_date(table[x]);
delay(150);
}
write_com(0x80+0x40);
for(x=0;x<17;x++)
{
write_date(table1[x]);
delay(150);
}
while(1);
return 0;
}
int init()//初始化函数体
{
EN = 0;
write_com(0X38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0X0C);//设置开显示,不显示光标
write_com(0X06);//写一个字符时,整屏右移
write_com(0X01);//显示清零
return 0;
}
int write_com(unsigned char com)//写命令的函数体
{
RS = 0;
RW = 0;
P0 = com;
delay(5);
EN = 1;
delay(5);
EN = 0;
return 0;
}
int write_date(unsigned char date)//写数据的函数体
{
RS = 1;
RW = 0;
P0 = date;
delay(5);
EN = 1;
delay(5);
EN = 0;
return 0;
}
int delay(unsigned char xms)
{
unsigned char x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
return 0;
}
其他
时序图中交叉线的意思
参考链接
LCD1602的写操作时序图中,RS引脚有一个交叉线,这个表示无论RS为高或低都可进行写操作,RS为低表示写控制字,为高表示写数据。
用keil4打开项目直接卡死的问题
给我的keil5工程我用keil4打开就卡死。。。。究其原因是跟工程同目录下的,同名.uvopt文件导致的,里面存储的是开发环境与工程的相关配置,将其删除,重新编译即可解决。