|
|
Line 1: |
Line 1: |
| [[Matrix - I2C LCD1602 Keypad/zh|查看中文]] | | [[Matrix - I2C LCD1602 Keypad/zh|查看中文]] |
− |
| |
− | ==介绍==
| |
− | [[File:Matrix-I2C_LCD1602_Keypad_01.png|thumb]]
| |
− | [[File:Matrix-I2C_LCD1602_Keypad_02.png|thumb]]
| |
− | * 模块Matrix-I2C_LCD1602由液晶显示屏模块LCD1602和GPIO扩展模块MCP23017两部分构成。<br>
| |
− | * LCD1602是可以显示16x2个字符的液晶显示屏,其本身是并行接口,需要较多的IO资源才可以与之通讯。<br>
| |
− | * MCP23017
| |
− |
| |
− | ==特性==
| |
− | * I2C通讯,显示和背光可控
| |
− | * 2.54mm排针接口,接线方便,通用性强
| |
− | * IIC模块PCB尺寸(mm):
| |
− | * LCD1602 PCB尺寸(mm):
| |
− | [[File:lpdpcb.png|frameless|400px|IIC模块PCB]]
| |
− | [[File:lcdpcb.png|frameless|400px|LCD1602 PCB]]
| |
− |
| |
− | * 引脚说明:
| |
− | {| class="wikitable"
| |
− | |-
| |
− | |名称 || 描述
| |
− | |-
| |
− | |SDA || I2C SDA
| |
− | |-
| |
− | |SCL || I2C SCL
| |
− | |-
| |
− | |5V || 电源5V
| |
− | |-
| |
− | |GND || 地
| |
− | |-
| |
− | |IRQ || 中断引脚
| |
− | |}
| |
− |
| |
− | ==工作原理==
| |
− | ===MCP23017工作原理===
| |
− |
| |
− | ===LCD1602工作原理===
| |
− | * 由模块的原理图可以看出PCF8574模块的输出引脚P0-P7与LCD模块的引脚连接如下图:
| |
− | [[File:1602.png|frameless|400px|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,这里由于没有涉及到所以不介绍,有兴趣的用户可以去了解一下。
| |
− |
| |
− | ==下载Matrix源码==
| |
− | Matrix配件相关的代码是完全开源的,统一由一个仓库进行管理:git://github.com/friendlyarm/matrix.git <br>
| |
− | 该仓库里不同的分支代表着Matrix配件所支持的不同开发板。<br>
| |
− | *matrix-nanopi分支包含了Matrix对NanoPi的支持;
| |
− | *matrix-tiny4412分支包含了Matrix对Tiny4412的支持;
| |
− | *matrix-raspberrypi分支包含了Matrix对RaspberryPi的支持;
| |
− |
| |
− | 在主机PC上安装git,以Ubuntu14.04为例
| |
− | <syntaxhighlight lang="bash">
| |
− | $ sudo apt-get install git
| |
− | </syntaxhighlight>
| |
− |
| |
− | 克隆Matrix配件代码仓库
| |
− | <syntaxhighlight lang="bash">
| |
− | $ git clone git://github.com/friendlyarm/matrix.git
| |
− | </syntaxhighlight>
| |
− | 克隆完成后会得到一个matrix目录,里面存放着所有Matrix配件的代码。
| |
− |
| |
− | ==与NanoPi连接使用==
| |
− | ===准备工作===
| |
− | 在NanoPi上运行Debian系统,然后在主机PC上安装并使用相应的编译器。
| |
− | 参考wiki:[[http://wiki.friendlyarm.com/wiki/index.php/NanoPi]]
| |
− |
| |
− | ===硬件连接===
| |
− | 参考下图连接模块Matrix-I2C_LCD1602和NanoPi <br>
| |
− | [[File:matrix-i2c_lcd1602_nanopi.jpg|frameless|600px|matrix-i2c_lcd1602_nanopi]]
| |
− |
| |
− | 连接说明:
| |
− | {| class="wikitable"
| |
− | |-
| |
− | |Matrix-I2C_LCD1602 || NanoPi
| |
− | |-
| |
− | |SDA || Pin3
| |
− | |-
| |
− | |SCL || Pin5
| |
− | |-
| |
− | |5V || Pin4
| |
− | |-
| |
− | |GND || Pin6
| |
− | |}
| |
− |
| |
− | ===编译测试程序===
| |
− | 进入Matrix代码仓库,切换到matrix-nanopi分支
| |
− | <syntaxhighlight lang="bash">
| |
− | $ cd matrix
| |
− | $ git checkout matrix-nanopi
| |
− | </syntaxhighlight>
| |
− |
| |
− | 编译Matrix配件代码
| |
− | <syntaxhighlight lang="bash">
| |
− | $ make CROSS_COMPILE=arm-linux- clean
| |
− | $ make CROSS_COMPILE=arm-linux-
| |
− | $ make CROSS_COMPILE=arm-linux- install
| |
− | </syntaxhighlight>
| |
− | 注意:请确保你的主机PC当前使用的交叉编译器为NanoPi-Debian配套的arm-linux-gcc.4.4.3。<br>
| |
− | 编译出来的库文件位于install/lib目录下,而测试程序则位于install/bin目录下,模块Matrix-I2C_LCD1602对应的测试程序为matrix-i2c_lcd1602。<br>
| |
− |
| |
− | ===运行测试程序===
| |
− | 拷贝库文件和测试程序到NanoPi的文件系统上
| |
− | <syntaxhighlight lang="bash">
| |
− | $ cp install/bin/* nanopi_rootfs/bin/
| |
− | $ cp install/lib/* nanopi_rootfs/lib/ -d
| |
− | </syntaxhighlight>
| |
− |
| |
− | 然后启动NanoPi,在Debian的shell终端中执行如下命令运行模块Matrix-I2C_LCD1602的测试程序 <br>
| |
− | 注意:此模块并不支持热插拔,启动系统前需要确保硬件正常连接。
| |
− | <syntaxhighlight lang="bash">
| |
− | $ matrix-i2c_lcd1602
| |
− | </syntaxhighlight>
| |
− |
| |
− | ===代码展示===
| |
− | <syntaxhighlight lang="c">
| |
− | int main(int argc, char ** argv)
| |
− | {
| |
− | int devFD;
| |
− | if ((devFD = LCD1602Init()) == -1) {
| |
− | printf("Fail to init LCD1602\n");
| |
− | return -1;
| |
− | }
| |
− |
| |
− | if (LCD1602Clear(devFD) == -1) {
| |
− | printf("Fail to Clear\n");
| |
− | return -1;
| |
− | }
| |
− | printf("clearing LCD1602\n");
| |
− | sleep(1);
| |
− |
| |
− | if (LCD1602DispLines(devFD, " B&G Char LCD", "--by FriendlyARM") == -1) {
| |
− | printf("Fail to Display String\n");
| |
− | return -1;
| |
− | }
| |
− | printf("displaying LCD1602\n");
| |
− | LCD1602DeInit(devFD);
| |
− | return 0;
| |
− | }
| |
− | </syntaxhighlight>
| |
− |
| |
− | ==与Tiny4412连接使用==
| |
− | ===准备工作===
| |
− | 参考Tiny4412光盘里的《友善之臂Ubuntu使用手册》,在Tiny4412上运行UbuntuCore系统,然后在主机PC上安装并使用相应的编译器。<br>
| |
− | 注意:只能使用Tiny4412SDK-1506的底板。
| |
− |
| |
− | ===硬件连接===
| |
− | 参考下图连接模块Matrix-I2C_LCD1602和Tiny4412 <br>
| |
− | [[File:matrix-i2c_lcd1602_tiny4412.jpg|frameless|600px|matrix-i2c_lcd1602_tiny4412]]
| |
− |
| |
− | 连接说明:
| |
− | {| class="wikitable"
| |
− | |-
| |
− | |Matrix-I2C_LCD1602 || Tiny4412
| |
− | |-
| |
− | |SDA || CON18 SDA
| |
− | |-
| |
− | |SCL || CON18 SCL
| |
− | |-
| |
− | |5V || CON18 5V
| |
− | |-
| |
− | |GND || CON18 GND
| |
− | |}
| |
− |
| |
− | ===编译测试程序===
| |
− | 进入Matrix代码仓库,切换到matrix-tiny4412分支
| |
− | <syntaxhighlight lang="bash">
| |
− | $ cd matrix
| |
− | $ git checkout matrix-tiny4412
| |
− | </syntaxhighlight>
| |
− |
| |
− | 编译matrix配件代码
| |
− | <syntaxhighlight lang="bash">
| |
− | $ make CROSS_COMPILE=arm-linux-gnueabihf- clean
| |
− | $ make CROSS_COMPILE=arm-linux-gnueabihf-
| |
− | $ make CROSS_COMPILE=arm-linux-gnueabihf- install
| |
− | </syntaxhighlight>
| |
− | 注意:请确保你的主机PC当前使用的交叉编译器为Tiny4412-UbuntuCore配套的arm-linux-gnueabihf-gcc-4.7.3。<br>
| |
− | 编译出来的库文件位于install/lib目录下,而测试程序则位于install/bin目录下,模块Matrix-I2C_LCD1602对应的测试程序为matrix-i2c_lcd1602。
| |
− |
| |
− | ===运行测试程序===
| |
− | 拷贝库文件和测试程序到Tiny4412的UbuntuCore的文件系统上
| |
− | <syntaxhighlight lang="bash">
| |
− | $ cp install/bin/* tiny4412_rootfs/bin/
| |
− | $ cp install/lib/* tiny4412_rootfs/lib/ -d
| |
− | </syntaxhighlight>
| |
− |
| |
− | 然后启动Tiny4412,在UbuntuCore的shell终端中执行如下命令运行模块Matrix-I2C_LCD1602的测试程序<br>
| |
− | 注意:此模块并不支持热插拔,启动系统前需要确保硬件正常连接。
| |
− | <syntaxhighlight lang="bash">
| |
− | $ matrix-i2c_lcd1602
| |
− | </syntaxhighlight>
| |
− |
| |
− | ===代码展示===
| |
− | <syntaxhighlight lang="c">
| |
− | int main(int argc, char ** argv)
| |
− | {
| |
− | int devFD;
| |
− | if ((devFD = LCD1602Init()) == -1) {
| |
− | printf("Fail to init LCD1602\n");
| |
− | return -1;
| |
− | }
| |
− |
| |
− | if (LCD1602Clear(devFD) == -1) {
| |
− | printf("Fail to Clear\n");
| |
− | return -1;
| |
− | }
| |
− | printf("clearing LCD1602\n");
| |
− | sleep(1);
| |
− |
| |
− | if (LCD1602DispLines(devFD, " B&G Char LCD", "--by FriendlyARM") == -1) {
| |
− | printf("Fail to Display String\n");
| |
− | return -1;
| |
− | }
| |
− | printf("displaying LCD1602\n");
| |
− | LCD1602DeInit(devFD);
| |
− | return 0;
| |
− | }
| |
− | </syntaxhighlight>
| |
− |
| |
− | ==与RaspberryPi连接使用==
| |
− |
| |
− | ==与Arduino连接使用==
| |
− | ===准备工作===
| |
− | 确保你的Arduino板能正常下载运行程序,参考:https://www.arduino.cc/en/Guide/HomePage <br>
| |
− | 这里我们使用的是Arduino uno板。
| |
− |
| |
− | ===硬件连接===
| |
− | 参考下图连接模块Matrix-I2C_LCD1602和Arduino Uno <br>
| |
− | [[File:matrix-i2c_lcd1602_arduino.jpg|frameless|600px|matrix-i2c_lcd1602_arduino]]
| |
− |
| |
− | ===编译运行测试程序===
| |
− | 由于arduino开发板并不运行Linux系统,所以matrix for arduino的代码由独立的仓库进行管理:git://github.com/friendlyarm/matrix-arduino.git <br>
| |
− | 克隆matrix-arduino代码仓库
| |
− | <syntaxhighlight lang="bash">
| |
− | $ git clone git://github.com/friendlyarm/matrix-arduino.git
| |
− | </syntaxhighlight>
| |
− | 克隆完成后会得到一个matrix-arduino目录,里面存放着所有Matrix 配件用于支持arduino的代码。
| |
− |
| |
− | 拷贝matrix-i2c_lcd1602目录到Arduino IDE的libraries目录下
| |
− | <syntaxhighlight lang="bash">
| |
− | $ cd matrix-arduino
| |
− | $ cp matrix-i2c_lcd1602 Arduino_IDE/libraies -r
| |
− | </syntaxhighlight>
| |
− |
| |
− | 启动Arduino IDE <br>
| |
− | 点击File->Examples->matrix-i2c_lcd1602->displaychar,打开测试程序。 <br>
| |
− | 点击upload,运行测试程序。 <br>
| |
− |
| |
− | ===代码展示===
| |
− | <syntaxhighlight lang="c">
| |
− | #include <Wire.h>
| |
− | #include <LiquidCrystal_I2C.h>
| |
− |
| |
− | // set the LCD address to 0x27 for a 16 chars and 2 line display
| |
− | LiquidCrystal_I2C lcd(0x27,16,2);
| |
− |
| |
− | void setup()
| |
− | {
| |
− | lcd.init();
| |
− | lcd.backlight();
| |
− | lcd.setCursor(2, 0);
| |
− | lcd.print("B&G Char LCD");
| |
− | lcd.setCursor(0, 1);
| |
− | lcd.println("--by FriendlyARM");
| |
− | }
| |
− |
| |
− | void loop()
| |
− | {
| |
− | }
| |
− | </syntaxhighlight>
| |
− |
| |
− | ==相关资料==
| |