嵌入式C编程实践 LCD1602屏幕液晶显示模块

LCD1602屏幕液晶显示模块

  1. 屏幕大小为16个字符×2行,可以显示32个字符。
  2. 使用HD44780芯片控制器,兼容LCD44780指令集。
  3. 常用的显示方式有5x8点矩阵。
  4. 自己写字库的方式可以显示中文

LCD1602端口

端口连接引脚方向作用
P0DB0-DB7输出数据总线
P1^0RS输出选择数据/命令信号
P1^1CS是否选择模块
P1^2EN输出使能信号
  • P0口为8位并口数据总线,连接到LCD的数据引脚DB0-DB7,用于发送数据和命令。
  • P1^0口连接RS脚,用来选择写入LCD的isData或命令。
  • P1^1口连接CS脚,用来选择模块命令,0为启动模块,1为不启动。
  • P1^2口连接EN脚,充当LCD的使能信号。

工作模式

工作模式描述对应初始化命令
4位接口模式只使用DB4-DB7,每次传送4位数据0x20 设置4位接口
0x28 设置2行显示、5x7点阵字符
8位接口模式使用DB0-DB7,每次传送8位数据0x38 设置8位接口
0x0C 显示开、光标关
单行显示模式只使用第一行显示0x30 设置8位接口、1行显示
0x0C 显示开、光标关
双行显示模式使用两行显示0x38 设置8位接口、2行显示
0x0C 显示开、光标关
字符显示模式可以显示ASCII字符和汉字
图形显示模式可以显示简单图形和图像
滚动显示模式文字循环滚动显示0x18 文字向左滚动
0x1C 文字向右滚动
闪烁显示模式文字闪烁显示0x0D 显示开,光标开,闪烁
0x0F 显示开,光标开,全部闪烁

代码

// 引入头文件<REGX52.H>和<intrins.h>,分别为REGX52系列芯片的定义和内建函数提供支持
#include <REGX52.H>  
#include <intrins.h>

// 定义无符号字符类型(uchar)和无符号整型(uint)  
#define uchar unsigned char
#define uint unsigned int

// 定义LCD1602接口的控制管脚  
sbit RS = P1^0; // 数据/命令选通脚
sbit CS = P1^1;  
sbit EN = P1^2; // 使能信号

// 毫秒级延时函数
void delayms(uint ms){
  uint i;
  while(ms--)
    for(i = 0;i < 123;i++); // 模拟延时 
}

// LCD1602写入函数
void LCD_1602_WR(bit MS, uchar Data){
  RS = MS == 0 ? 0 : 1; // 根据MS选择数据或命令
  P0 = Data; // 写入数据
  EN = 1; // 使能
  delayms(1);  // 延时
  EN = 0; // 失能  
}

// LCD1602初始化函数/工作模式
void LCD_init(){
  LCD_1602_WR(0,0x38); // 设置8位数据接口,2行显示,5x7点阵
  LCD_1602_WR(0,0x0c); // 显示开,光标关
  LCD_1602_WR(0,0x06); // 文字不动,地址自动+1
  LCD_1602_WR(0,0x01); // 显示清屏
}

// 在LCD指定位置开始显示数据
void LCD_1602_XS(bit MS, uchar x, uchar *Data){
  
  LCD_1602_WR(0, MS==0?0x80|x:0xC0|x); // 设置起始地址

  while(*Data) // 遍历整个字符串
    LCD_1602_WR(1, *Data++); // 逐个字符显示  
}

void main(){
  LCD_init(); // 初始化LCD 

  LCD_1602_XS(0, 2, "123"); // 第一行第3个字节开始显示123
  LCD_1602_XS(1, 0, "123"); // 第二行第1个字节开始显示123

  while(1){ // 主循环 
		}
}
  1. 在main函数开始,首先调用LCD_init()函数对LCD进行初始化配置。
  2. LCD_init函数通过调用LCD_1602_WR函数,依次发送0x38、0x0C、0x06、0x01四个命令,来设置LCD的工作模式。
  3. 初始化完成后,调用LCD_1602_XS函数在LCD指定位置显示数据。
  4. LCD_1602_XS函数首先计算显示位置的地址,再通过LCD_1602_WR函数发送设置地址的命令。
  5. 然后进入while循环,逐个发送显示数据的字节,调用LCD_1602_WR函数发出字节数据。
  6. LCD_1602_WR函数设置RS管脚,选择发送的数据或命令,将数据放到P0口,使能EN信号,延时后失能,完成一次数据写入。
  7. 通过循环显示完所有数据后,main函数进入死循环while(1)。
  8. 此时LCD屏幕将显示第一行显示123,第二行显示123,并保持显示。
    总结一下就是:
    初始化配置-设置起始地址-发送显示数据-进入主循环保持显示
    通过组合调用多个函数完成LCD的初始化配置、数据写入、显示控制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值