用 Proteus学习51单片机之1602液晶
1602液晶,即一行有16个字符,共2行的液晶显示屏,只能显示ASCII码,不能显示汉字。一般1602有16条线,其中8根线是数据操作线,其他8根线是控制线,定义如下:
端口名称 | 说明 |
VSS | 电源地 |
VDD | 电源正极 |
VO | 液晶对比度调节端 |
RS | 数据/命令选择端(H为数据,L为命令) |
R/W | 读写控制(H/L) |
E | 使能 |
D0-D7 | 数据库端 |
BLA | 背光电源正极 |
BLK | 背光电源负极 |
1602在Proteus中对应的元件是LM016L,但是它并没有上表中列的那么多线,主要是没有BLA和BLK,其他差不多。
1602分两行,每行显示16个字,但是其内部是有80B的RAM缓冲区的,其起始地址是0x80,其中第一行的地址是相对起始地偏移0x00~0x0F,第二行的地址是相对起始地址偏移0x40~0x67,在往里面写数据的时候,比如要在第一行第二个位置显示字符A,则先要把指针设置到0x80+0x01的位置,然后往里面写A的代码。
1602的指令分为两种,一种是设置液晶的状态,比如是否显示光标,清屏,光标移动等,另一种为数据命令,即在屏幕上显示什么数据,两者都是通过D0-D7来设置的,只不过当RS设置为高电平时,设置的是数据,低电平的时候设置的是命令。具体的命令,可以查Datasheet。
试着在1602上写一些数据,写时序图如下。以前对时序图非常的看不懂,最近看多了,似乎有点感觉了,说白了就是,先把RS位置高或低电平(根据你是要写数据还是写命令),然后把R/W位置低电平,然后置使能端E为高电平,然后写入数据就可以了。可以看到,设置电平后,需要一定的延时,由于单片机一次指令一般需要1微秒左右,而延时一般是纳秒级别,所以有些不用延时(我是为了安全,都延时了一下)
电路图及效果如下:
详细请见源代码(重装了系统,把keil c51更换到9.0版本了,可能大家会打不开了……)。LCD调节对比的似乎不顶用,不知道是不是我弄错了。