在开发产品时,很多时候,我们需要将系统的信息进行可视化展示,方面我们对系统进行测试。这里我们介绍如何通过常用的LCD1602液晶来显示一些单片机的信息。
所谓的1602是指显示的时候,有2行内容每行有16个字符。其实这类字符型产品都可以这样解读比如:lcd12864就是有128行64列。目前市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理大多相同。因此基于HD44780写的液晶控制程序可以很方便适用于市面上大多数字符型液晶产品。
1602引脚信号说明
字符型LCD1602通常分为14条引脚和16引脚两种,16引脚多出来的是背光电源线VCC(15引脚)和地线(16引脚),其控制原理与14引脚LCD完全一样,引脚定义如下表:
控制器接口介绍1、基本操作时许
- 1.1读状态:输入:RS=L,RW=H,E=H
----输出:D0~D7=状态字
- 1.2写指令:输入:RS=L,RW=L,D0~D7=指令码
----输出:无
- 1.3读数据:输入:RS=H,RW=H,E=H
----输出:D0~D7=数据
- 1.4写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲
----输出:无
STA7 D7 | STA6 D6 | STA5 D5 | STA4 D4 | STA3 D3 | STA2 D2 | STA1 D1 | STA0 D0 |
STA0-6 | 当前数据地址指针的数值 | |
STA7 | 读写操作使能 | 1:禁止 0:允许 |
对控制器每次进行读写操作前,都必须进行读写检测,确保STA7为0
3、指令说明初始化设置
显示模式设置
显示开/关光标设置
数据控制
控制器内部没有一个数据地址指针,可以通过他们来访问内部的全部80字节RAM。
其他设置
指令码 | 功能 |
01H | 显示清屏:1.数据指针清零 2.所有显示清零 |
02H | 显示回车:1.数据指针清零 |
初始化过程:
延时写指令38H延时写指令38H延时写指令38H(每次写指令、读/写数据操作之前均需检测信号)写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置下图为实际LCD1602与单片机的电路原理图:
除了单片机最小系统的元器件外,还需要液晶显示器1602以及相应的电阻,其实物图如图2所示:
图中,排针用于使用杜邦线连接LCD1602和单片机,可调变阻器用于调节LCD1602的明暗程度。
最后,给出简单的LCD1602显示的C语言程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden=P2^7;
sbit lcdrs=P2^5;
uchar code table1[]=" Hello World! ";
uchar code table2[]=" tengweitw.com ";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)// LCD1602写命令
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar dat)// LCD1602写数据
{
lcdrs=1;
P0=dat;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38); //设置1602显示
write_com(0x0e);//开显示、显示光标、光标不显示
write_com(0x06); //移动光标
write_com(0x01); //清除LCD的显示内容
write_com(0x80);//设置显示的起始地址
}
void main()
{
uchar num;
init();
write_com(0x80);
for(num=0;num<16;num++)//显示第一行
{
write_date(table1[num]);
delay(10);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)//显示第二行
{
write_date(table2[num]);
delay(10);
}
while(1);//程序停在
}