【杂谈】LCD1602液晶显示模块
这几天弄单片机的课设,正好需要用到1602这个模块,简单整理一下,方便以后回忆。
前言
关于1602的读时序和写时序在网上可以轻易找到介绍,这里不做过多讲解,这里只讲解基础显示内容。
LCD地址编排
1602一行有16列,总共有两行,它的地址编排如下。
第一列 | 第二列 | 第三列 | 第四列 | ... | 第十六列 |
---|---|---|---|---|---|
0x80 | 0x81 | 0x82 | 0x83 | ... | 0x8f |
0xc0 | 0xc1 | 0xc2 | 0xc3 | ... | 0xcf |
显示时要先指定地址,将要显示的地址发送至指令寄存器单元,再将要显示的数据发送至数据寄存器单元。
代码实现
基础底层代码
点击查看代码
//检查忙函数
void fbusy(){
P1 = 0xff;
RS = 0;
RW = 1;
EN = 1;
EN = 0;
while((P1 & 0x80))
{
EN = 0;
EN = 1;
}
}
//写命令函数
void wc51r(unsigned char j){
fbusy();
EN = 0;
RS = 0;
RW = 0;
EN = 1;
P1 = j;
EN = 0;
}
//写数据函数
void wc51ddr(unsigned char j){
fbusy(); //读状态;
EN = 0;
RS = 1;
RW = 0;
EN = 1;
P1 = j;
EN = 0;
}
1602初始化
void LCD_Init(void){
wc51r(0x01); //清屏
wc51r(0x38); //使用8位数据,显示两行,使用5*7的字型
wc51r(0x0c); //显示器开,光标关,字符不闪烁
wc51r(0x06); //字符不动,光标自动右移一格
}
显示内容
unsigned char Disdata[6]={"Hello "};//五个字母加一个空格
WriteData(0x80,Disdata,5);//向第一行第一列写入字符串Disdata,写入字符串长度为5
像这种显示数据的模块,比如1602、数码管,不必实时刷新,多少ms定时刷新一次就行,毕竟人眼分辨率并没有那么快,数据可以实时采集。
2022 / 11 / 30 23:24
GJY in Harbin