蓝桥杯实训平台驱动LCD1602显示屏
·
1.LCD1602显示原理
显示图案如下

像素就是一个个小方块,就是一个又一个像素点。
全部点亮的像素点如下所示,16列,2行,这就是1602名字的来历

只要知道显示原理其他的就不用在意。最后通过背光板发光照在像素点上就显示想要的字符了。
2.LCD1602的引脚以及功能
| 引脚序号 | 引脚符号 | |
| 1 | VSS | 电源地, |
| 2 | VDD | 电源正极,是LCD1602驱动系统的电源 |
| 3 | VO | 液晶显示对比度调整,一般在这个脚通过电阻再接地。 |
| 4 | RS | 寄存器选择;当RS=1的时候,通讯的是数据;当RS=0的时候,通讯的是命令。 |
| 5 | RW | 读,写选择,当R/W = 1的时候表示读LCD里面的数据,R/W = 0的时候表示往LCD里面写数据。 |
| 6 | E | 使能信号,当E=1的时候读取信息,当E由1变为0的时候,液晶模块开始执行命令;要配合控制时序来用。 |
| 7-14 | D0-D7 | D0--D7是双向的数据线,对LCD模块进行读写。 |
| 15 | BLA | 背光源正极,可以直接接VDD |
| 16 | BLK | 背光源负极,可以直接接VSS |
3.LCD1602的显示地址映射
LCD1602通常有两行,每行可以显示16个字符。
第一行的地址范围是0x00到0x0F。
第二行的地址范围是0x40到0x4F。
4.LCD1602命令列表

5.单片机控制LCD1602电路
在蓝桥杯单片机实训平台中,有专门预留给1602液晶显示的位置,所以不用考虑电路连接的问题,但是需要知道这个板子上面的引脚是怎么连接的,官网有电路图,板子左上角上也有标注。

6.LCD1602液晶显示
#include <STC15F2K60S2.H>
//定义端口
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P1^2;
#define DATA P0 // 数据口
//延时函数
void DelayMs(unsigned int ms) {
// 实现毫秒延时
while(ms--);
while(ms--);
while(ms--);
}
//写命令
void Command(unsigned char cmd) {
RS = 0; // 选择命令寄存器
RW = 0; // 选择写操作
DATA = cmd; // 发送命令
E = 1; // 使能高
DelayMs(1); // 延时
E = 0; // 使能低
DelayMs(5); // 等待命令执行
}
//初始化函数
void Init(void) {
DelayMs(20); // 等待电源稳定
Command(0x38); // 8位模式,2行,5x7点阵
Command(0x0C); // 显示开,光标关
Command(0x06); // 写入新数据时光标右移
Command(0x01); // 清屏
DelayMs(200);
DelayMs(2);
}
//写数据
void WriteChar( char data1) {
RS = 1; // 选择数据寄存器
RW = 0; // 选择写操作
DATA = data1; // 发送数据
E = 1; // 使能高
DelayMs(1); // 延时
E = 0; // 使能低
DelayMs(2); // 等待数据写入
}
void main()
{
Init();
DelayMs(200);
WriteChar('H');
DelayMs(200);
WriteChar('e');
DelayMs(200);
WriteChar('l');
DelayMs(200);
WriteChar('l');
DelayMs(200);
WriteChar('o');
while(1);
}
7.显示结果

8.问题以及解决办法
代码调试了很久,但是显示器一直不亮,最后有考虑是板子电路连接的问题,后来找了一个万用表测试了一下电路连接的问题,最后发现背光源的电源与地之间没有电压,然后换了一块板子,达到预期。有的时候不一定是代码的问题,电路连接也有可能有问题。
更多推荐
所有评论(0)