LCD1602

LCD1602是一款由HD44780驱动的液晶显示屏,可一次性显示 2 × 16 2\times16 2×16个字符,每个字符为5*7的点阵。
详细介绍看这里,非常完整
和其他的元器件一样,在使用时,需要先对其进行初始化,即根据时序图对其进行配置。配置完成后,直接向地址0x80(第一行)与第二行(0xC0)写入数据即可显示英文字符、数字、平假名,无需考虑字符点阵

电路图

LCD1602学习笔记_写数据

代码

#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文件导致的,里面存储的是开发环境与工程的相关配置,将其删除,重新编译即可解决。