1.LCD1602显示原理

显示图案如下

像素就是一个个小方块,就是一个又一个像素点。

全部点亮的像素点如下所示,16列,2行,这就是1602名字的来历

只要知道显示原理其他的就不用在意。最后通过背光板发光照在像素点上就显示想要的字符了。

2.LCD1602的引脚以及功能

引脚序号引脚符号
1VSS电源地,
2VDD电源正极,是LCD1602驱动系统的电源
3VO液晶显示对比度调整,一般在这个脚通过电阻再接地。
4RS寄存器选择;当RS=1的时候,通讯的是数据;当RS=0的时候,通讯的是命令。
5RW读,写选择,当R/W = 1的时候表示读LCD里面的数据,R/W = 0的时候表示往LCD里面写数据。
6E使能信号,当E=1的时候读取信息,当E由1变为0的时候,液晶模块开始执行命令;要配合控制时序来用。
7-14D0-D7D0--D7是双向的数据线,对LCD模块进行读写。
15BLA背光源正极,可以直接接VDD
16BLK背光源负极,可以直接接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.问题以及解决办法

        代码调试了很久,但是显示器一直不亮,最后有考虑是板子电路连接的问题,后来找了一个万用表测试了一下电路连接的问题,最后发现背光源的电源与地之间没有电压,然后换了一块板子,达到预期。有的时候不一定是代码的问题,电路连接也有可能有问题。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐