Matrix - I2C LCD1602/zh

From FriendlyELEC WiKi
Revision as of 03:13, 1 September 2015 by Wuweidong (Talk | contribs)

Jump to: navigation, search

English

1 介绍

I2C LCD1602
I2C LCD1602

带有I2C控制器的LCD1602液晶显示屏。LCD1602是可以显示16x2个字符的液晶显示屏,本身是并行接口,主控需要较多的IO资源才可以与之通讯。为了节约IO资源和控制简单,我们专门设计了一个控制器,主控通过I2C总线跟控制器通讯,控制器再把主控发来信息转换成并行信号发送给LCD1602。搭配控制器,主控可以通过I2C总线发送显示信号,关闭或打开背光。

2 特性

  • I2C通讯,显示和背光可控
  • 2.54mm排针接口,接线方便,通用性强
  • IIC模块PCB尺寸(mm):16x42
  • LCD1602 PCB尺寸(mm):36x80

IIC模块PCB

LCD1602 PCB

3 工作原理

3.1 PCF8574工作原理

  • PCF8574模块为i2c并行口扩展电路,即对输入的i2c字节数据实现8位并行io输出(P0-P7),因此开发板可以可以通过i2c总线实现远程io扩展。
  • PCF8574需要与i2c总线进行通信,由i2c总线特性可以知道i2c总线传输数据到该模块时必须有该模块的器件地址。本模块使用的PCF8574芯片型号为PCF8574T,其地址为如下图所示:

PCF8574

  • 由模块的原理图可以看出A2-A0全部置1,则7位器件地址为0x27(0100111),RW默认为0,此时模块为写模式。
  • 这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。
  • 当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。

3.2 LCD1602工作原理

  • 由模块的原理图可以看出PCF8574模块的输出引脚P0-P7与LCD模块的引脚连接如下图:

1602

  • RS为指令/数据控制位,RW为读/写控制位,E为使能位(边沿触发),BL为背光灯控制位,D4-D7为数据位。
  • 由于LCD用到四个数据位,因此只能使用4线来驱动。通过指令表我们可以对LCD进行写指令设置LCD的工作转态,但这里的指令/数据(DB7-DB0)是八位的,而LCD却是4线驱动,因此每次写指令/数据时是先写高四位(DB7-DB4),再写低四位(DB3-DB0)。
  • 注意:LCD内置了192个常用字模,存放在CGROM,所以我们在显示字符A时可以直接写入“A”,此外LCD还有8个允许用户自定义的字符产生的RAM,称为CGRAM,这里由于没有涉及到所以不介绍,有兴趣的用户可以去了解一下。

4 使用方法

4.1 连接

GND: 接地
VCC: 接5V
SDA: I2C SDA
SCL: I2C SCL
  • 连接到NanoPi

[[File:|frameless|400px|NanoPi+lcd]]

  • 连接到TINY4412 SDK 1506

tiny4412+lcd

4.2 Linux下的C示例

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include "libfahw.h"
 
void test(char* line1, char* line2)
{
    int devFD;
    if ((devFD = LCD1602Init()) == -1) {
        printf("Fail to init LCD1602\n");
        return;
    }
 
            if (LCD1602Clear(devFD) == -1) {
                    printf("Fail to Clear\n");
                    return;
            }
 
    if (LCD1602DispLines(devFD, line1, line2) == -1) {
        printf("Fail to Display String\n");
        return ;
    }
 
    LCD1602DeInit(devFD);
}
 
int main(int argc, char ** argv) {
    int i;
    for (i=0; i<10; i++) {
         test("FriendlyARM", "From 2003");
         sleep(3);
    }
    return 0;
}

4.3 编译并运行示例

git clone http://github.com/friendlyarm/fa-hardware.git
cd fa-hardware
cd demo
cd matrix-i2c_lcd1602
make

将编译生成的LCD1602通过ftp上传到开发板上运行即可测试。

5 相关资料