之前为了能测试芯圣HC18M003的IIC设备,准备使用IIC的LCD1602来测试。IIC的IIC接口控制使用PCF8574T。为此这里先介绍IIC的LCD1602的相关知识。PCF8574T芯片可以通过IIC协议进行IO口扩展。
一、PCF8574T与LCD1602的接线图
由图可以看出,接线如下(只统计数据口、控制口):
PCF8574T | LCD1602 |
P0 | RS |
P1 | RW |
P2 | CS |
P7 | DB7 |
P6 | DB6 |
P5 | DB5 |
P4 | DB4 |
二、IIC操作时序
1、写模式(IO 用作输出)
I2C 主机写入地址后,接着写入八位数据,这八位数据表示 PCF8574 八个 IO 的输出电平,例如写入的数据第 6 位为 1,则 PCF8574 的 P5 口输出高电平。
I2C 主机写一字节数据流程:start > write_write_address > master_receive_ack > write_data > master_receive_ack > stop
2、读模式(IO 用作输入)
I2C 主机写入地址后,接着读取八位数据,这八位数据表示 PCF8574 八个 IO 的输入电平,例如读取的数据第 6 位为 1,则 PCF8574 的 P5 口输入为高电平。
I2C 主机读一字节数据流程:start > write_read_address > master_receive_ack > receive_data > master_send_nack > stop
三、LCD1602的操作
1、时序特性
写时序
读时序
2、引脚功能
注:忙标志 为"1"时,表明正在进行内部操作,此时不能输入指令或数据,要等内部操作结束,即忙标志为"0"时。
3、操作指令
4、显示位与DD RAM 地址的对应关系
HD44780内置DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,地址和屏幕的对应关系如下:
也就是说想要在LCD1602屏幕上的第一行第一个位置显示一个“A”,就要向DDRAM的00H地址写“A”字的代码就OK了,但具体的写入是要按照LCD模块的指令格式来进行的。
但是我们发现每一行有40个地址,而我们们每行只能显示16个字符,其实际多的位置可以实现字符的移动,我们在看大佬作品的时候可能会见到有的字符是从左面移过来,他的实现形式就用到了着些多的地址。将数据先写到未显示的地址然后使用指令进行左移就可以了。
那么1602显示的地址又是什么呐?下图就是DDRAM地址与显示位置的对应关系。
二、总结
理解了LCD1602的特点,和PCF8574T的连接以及PCF8574T的特点,那么对它们两个构成的模块的编程应该就不难了。整个处理过程就是通过IIC协议,把数据由串行模式转换为并行模式,呈现给LCD1602的引脚上,间接向LCD1602发送指令或数据,从而实现字符的显示。这里要注意的是,通过IIC传递给PCF8574T的数据,最后会反映在PCF8574T的输出引脚上(具体是那些引脚,请查看最前面的电路图),这些数据中是包括LCD1602的CS、RS、RW信号的。而对LCD1602操作中用到的指令和数据,是通过PCF8574T的引脚P7~P4实现的,这就意味着对LCD1602的操作是以4位数据方式,而不是传统的8位数据来进行的。也就是说LCD1602的引脚中D0~D3是没有被使用的,这一点一定要注意。