0 文章介绍

9.1.2 LCD1602液晶应用实例P171
在这里插入图片描述

1 效果图

在这里插入图片描述

2 仿真图

在这里插入图片描述

2.1 放置元器件

放置LM016L

在这里插入图片描述

放置POT-HG

在这里插入图片描述

3 代码

P173 写好注释

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar code table1[] = "I LOVE MCU! ";    // 字符串数组
uchar code table2[] = "BEST 2021 ^_^";   // 字符串数组

uchar num;

sbit lcrs = P1^0;   // 液晶控制引脚,RS
sbit lcden = P1^1;  // 液晶控制引脚,EN
sbit wela = P1^6; // 仿真用不到,注释掉

// 延时函数
void delay(uint z)
{
    uint x, y;
    for (x = z; x > 0; x--)
        for (y = 110; y > 0; y--);
}

// 写命令函数
void write_com(uchar com)       // 写命令(command)函数,向 LCD1602 发送指令
{
    lcden = 0;                  // E 置低,准备触发上升沿
    lcrs = 0;                   // RS 置低,表示写入的是命令
    P0 = com;                   // 将命令字节放入数据总线(P0 连接 LCD 的 D0-D7)
    delay(5);                   // 延时,确保数据稳定
    lcden = 1;                  // E 置高,产生上升沿,LCD 读取命令
    delay(5);                   // 延时,等待命令被锁存
    lcden = 0;                  // E 置低,结束写操作
}


// 写数据函数
void write_date(uchar date)
{
    lcden = 0;
    lcrs = 1;
    P0 = date;
    delay(5);
    lcden = 1;
    delay(5);
    lcden = 0;
}

// 液晶初始化
void lcdinit()
{
    wela = 0; // 仿真用不到,可注释掉
    write_com(0x38); // 8位数据总线, 2行显示, 5x7点阵
    write_com(0x0c); // 开显示,不显示光标
    write_com(0x06); // 写入新数据后地址指针加1
    write_com(0x01); // 清屏
}

// 显示函数
void LCD1602_Display()
{
    write_com(0x80); // 第一行第0列
    for (num = 0; table1[num] != '\0'; num++)
    {
        write_date(table1[num]);
        delay(5);
    }

    write_com(0x80 + 14); // 第一行第14列(移动光标以显示星期)
    // 三种显示'1'的方法任选一种:
    // write_date('0' + 1);
    // write_date(48 + 1);
    write_date(0x30 + 5); // 显示当前的星期

    write_com(0x80 + 0x40); // 第二行第0列
    for (num = 0; table2[num] != '\0'; num++)
    {
        write_date(table2[num]);
        delay(5);
    }
}

// 主函数
void main()
{
    lcdinit();         // 初始化液晶
    LCD1602_Display(); // 显示内容
    while (1);         // 程序停在这里
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐