这几天学了LCD1602模块及其显示原理,下面是我对LCD1602显示的理解。 1.1 LCD1602模块 1602字符型液晶,常用16*2的点阵显示(主要是5*7点阵/每字符),初始化好后,写命令设置显示坐标,写数据到8位数据总线上并显示LCD上。 1.1.1 LCD1602模块引脚图 如下图,为LCD1602模块的引脚图(51单片机开发板),通过旋钮电位器(顺时针可以加亮,反之亦然)。 图1.1.1 LCD1602引脚图 GND、VCC分别是电源地、电源正极。 VO:对比度调整端,若仅仅接地,对比度会很高,常常接上一个几K的电位器或可变电阻来调节对比度以实现理想的显示效果。 RS:寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 RW:读写信号线,高电平时进行读操作,低电平时进行写操作。(一般对于单纯的LCD显示只用到写操作)。 E :使能信号。 DB0-DB7:8个数据I/O口。 BG_VCC、BG_GND分别是背光电源正极、负极。
1.1.2 LCD1602.h 下面是LCD1602工作时序,如图
图1.1.2 LCD1602工作时序图
1.初始化之前需要编写‘写命令操作’。 对于WriteCom(),由前面知道,写操作需要RW为低电平即‘0’,并且通过使RS为低电平即‘0’来选择命令寄存器,才能写入命令到DATAPINS。另外,每次命令输入DATAPINS就位后,令使能信号产生一个下降沿,将DATAPINS的命令写进LCD1602
- void LcdWriteCom(uchar com) //写入命令
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 0; //选择发送命令
- LCD1602_RW = 0; //选择写入
- LCD1602_DATAPINS = com; //放入命令
- Lcd1602_Delayms(1); //等待数据稳定
- LCD1602_E = 1; //写入时序,一个下降沿,将命令传达到LCD
- Lcd1602_Delayms(5); //保持时间
- LCD1602_E = 0;
- }
复制代码
2.‘写数据操作’也类似,不同之处是RS为高电平即‘1’选择数据寄存器,将数据写入DATAPINS,其他都一样。 - void LcdWriteData(uchar dat) //写入数据
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //选择输入数据
- LCD1602_RW = 0; //选择写入
- LCD1602_DATAPINS = dat; //写入数据
- Lcd1602_Delayms(1);
- LCD1602_E = 1; //写入时序,一个下降沿
- Lcd1602_Delayms(5); //保持时间
- LCD1602_E = 0;
- }
复制代码
3.写命令操作编完后就可以进行LCD1602的初始化了。
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x38); //功能设定 0011 1000 (8位数据线、显示2行、每个字符为5*7点阵)
- //
- LcdWriteCom(0x0c); //显示开关控制 0000 1100(或+光标不闪烁0x0d:0000 1101)(开显示、不开光标、光标闪烁或不闪烁)
- LcdWriteCom(0x06); //进入模式设置 0000 0110(写入数据后光标右移一位及显示屏不动)
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //设置数据指针起点 //DB7为高电平
- }
复制代码
4.调用LCD1602显示 - void LCD1602_display()
- {
- unsigned int i,j;
- unsigned char Compu[9]="computer";
- unsigned char Dog[5]="dog";
- LcdInit();
- LcdWriteCom(0x80+15);//第一行显示C
- LcdWriteData(‘C’);
- LcdWriteCom(0x80);
- /*其他方式显示:for循环语句显示字符串*/
- for(i=0;i<8;i++) //第一行显示‘computer’
- {
- LcdWriteData(Compu[i]);
- }
- LcdWriteCom(0x80+0x40);
- for(j=0;j<3;j++)// //第二行显示‘dog’
- {
- LcdWriteData(Dog[j]);
- }
- }
复制代码
好了,今天的分享就先到这,虽然只是小case,但是做个总结还是蛮有意义的!
|