Difference between revisions of "Matrix - I2C LCD1602/zh"
(→编译测试程序) |
(→连接NanoPC-T2) |
||
(60 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
[[File:LCD160201.png|thumb|I2C LCD1602]] | [[File:LCD160201.png|thumb|I2C LCD1602]] | ||
[[File:LCD160202.png|thumb|I2C LCD1602]] | [[File:LCD160202.png|thumb|I2C LCD1602]] | ||
− | 模块Matrix- | + | * 模块Matrix-I2C_LCD1602用于LCD显示,它由液晶显示屏模块LCD1602和GPIO扩展模块PCF8574两部分构成。<br> |
− | LCD1602是可以显示16x2个字符的液晶显示屏,其本身是并行接口,需要较多的IO资源才可以与之通讯。<br> | + | * LCD1602是可以显示16x2个字符的液晶显示屏,其本身是并行接口,需要较多的IO资源才可以与之通讯。<br> |
− | PCF8574可扩展出8个通用GPIO引脚,它可通过I2C与主控通讯,将主控发过来的数据信息转换成并行信号再转发给LCD1602,从而在实现LCD1602的显示和背光调节功能,达到节约IO资源和简化控制的目的。 | + | * PCF8574可扩展出8个通用GPIO引脚,它可通过I2C与主控通讯,将主控发过来的数据信息转换成并行信号再转发给LCD1602,从而在实现LCD1602的显示和背光调节功能,达到节约IO资源和简化控制的目的。 |
==特性== | ==特性== | ||
Line 16: | Line 16: | ||
[[File:lcdpcb.png|frameless|400px|LCD1602 PCB]] | [[File:lcdpcb.png|frameless|400px|LCD1602 PCB]] | ||
− | 引脚说明: | + | * 引脚说明: |
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | |名称 || 描述 | |
− | + | |- | |
+ | |SDA || I2C SDA | ||
+ | |- | ||
+ | |SCL || I2C SCL | ||
+ | |- | ||
+ | |5V || 电源5V | ||
+ | |- | ||
+ | |GND || 地 | ||
+ | |} | ||
==工作原理== | ==工作原理== | ||
===PCF8574工作原理=== | ===PCF8574工作原理=== | ||
− | *PCF8574模块为i2c并行口扩展电路,即对输入的i2c字节数据实现8位并行io输出(P0- | + | * PCF8574模块为i2c并行口扩展电路,即对输入的i2c字节数据实现8位并行io输出(P0-P7),因此开发板可以可以通过i2c总线实现io扩展。 |
− | *PCF8574需要与i2c总线进行通信,由i2c总线特性可以知道i2c总线传输数据到该模块时必须有该模块的器件地址。本模块使用的PCF8574芯片型号为PCF8574T,其地址为如下图所示: | + | * PCF8574需要与i2c总线进行通信,由i2c总线特性可以知道i2c总线传输数据到该模块时必须有该模块的器件地址。本模块使用的PCF8574芯片型号为PCF8574T,其地址为如下图所示: |
[[File:pcf8574.png|frameless|400px|PCF8574]] | [[File:pcf8574.png|frameless|400px|PCF8574]] | ||
− | *由模块的原理图可以看出A2-A0全部置1,则7位器件地址为0x27(0100111),RW默认为0,此时模块为写模式。 | + | * 由模块的原理图可以看出A2-A0全部置1,则7位器件地址为0x27(0100111),RW默认为0,此时模块为写模式。 |
− | *这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。 | + | * 这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。 |
− | *当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。 | + | * 当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。 |
===LCD1602工作原理=== | ===LCD1602工作原理=== | ||
− | *由模块的原理图可以看出PCF8574模块的输出引脚P0-P7与LCD模块的引脚连接如下图: | + | * 由模块的原理图可以看出PCF8574模块的输出引脚P0-P7与LCD模块的引脚连接如下图: |
[[File:1602.png|frameless|400px|1602]] | [[File:1602.png|frameless|400px|1602]] | ||
− | *RS为指令/数据控制位,RW为读/写控制位,E为使能位(边沿触发),BL为背光灯控制位,D4-D7为数据位。 | + | * RS为指令/数据控制位,RW为读/写控制位,E为使能位(边沿触发),BL为背光灯控制位,D4-D7为数据位。 |
− | *由于LCD用到四个数据位,因此只能使用4线来驱动。通过指令表我们可以对LCD进行写指令设置LCD的工作转态,但这里的指令/数据(DB7-DB0)是八位的,而LCD却是4线驱动,因此每次写指令/数据时是先写高四位(DB7-DB4),再写低四位(DB3-DB0)。 | + | * 由于LCD用到四个数据位,因此只能使用4线来驱动。通过指令表我们可以对LCD进行写指令设置LCD的工作转态,但这里的指令/数据(DB7-DB0)是八位的,而LCD却是4线驱动,因此每次写指令/数据时是先写高四位(DB7-DB4),再写低四位(DB3-DB0)。 |
− | *注意:LCD内置了192个常用字模,存放在CGROM,所以我们在显示字符A时可以直接写入“A”,此外LCD还有8个允许用户自定义的字符产生的RAM,称为CGRAM,这里由于没有涉及到所以不介绍,有兴趣的用户可以去了解一下。 | + | * 注意:LCD内置了192个常用字模,存放在CGROM,所以我们在显示字符A时可以直接写入“A”,此外LCD还有8个允许用户自定义的字符产生的RAM,称为CGRAM,这里由于没有涉及到所以不介绍,有兴趣的用户可以去了解一下。 |
− | == | + | ==硬件连接== |
− | + | ===连接NanoPi NEO/NanoPi NEO Air=== | |
− | + | NanoPi M1和NanoPi NEO以及NanoPi NEO Air的前24Pin引脚定义是一模一样的,所以它们操作Matrix配件的步骤是一样的,并且使用同一份代码。<br> | |
− | + | ||
− | + | ||
− | + | ||
− | + | 参考下图连接模块:<br> | |
− | < | + | [[File:Matrix-I2C_LCD1602_nanopi_NEO.jpg|frameless|600px|Matrix-I2C_LCD1602_nanopi_NEO]] |
− | + | ||
− | + | ||
− | + | 连接说明: | |
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | |Matrix-I2C_LCD1602 || NanoPi NEO | |
− | + | |- | |
+ | |SDA || Pin3 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
− | == | + | ===连接NanoPi M1=== |
− | + | 参考下图连接模块:<br> | |
− | + | [[File:Matrix-I2C_LCD1602_nanopi_m1.jpg|frameless|600px|Matrix-I2C_LCD1602_nanopi_m1]] | |
− | + | ||
− | = | + | 连接说明: |
− | + | {| class="wikitable" | |
− | + | |- | |
+ | |Matrix-I2C_LCD1602 || NanoPi M1 | ||
+ | |- | ||
+ | |SDA || Pin3 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
− | === | + | ===连接NanoPi 2=== |
− | + | 参考下图连接模块:<br> | |
− | < | + | [[File:Matrix-I2C_LCD1602_nanopi_2.jpg|frameless|600px|Matrix-I2C_LCD1602_nanopi_2]] |
− | + | ||
− | + | ||
− | + | ||
− | + | 连接说明: | |
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | |Matrix-I2C_LCD1602 || NanoPi 2 | |
− | + | |- | |
− | + | |SDA || Pin3 | |
− | + | |- | |
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
− | === | + | ===连接NanoPi M2 / NanoPi 2 Fire=== |
− | + | NanoPi M2和NanoPi 2 Fire的40 Pin引脚定义是一模一样的,所以它们操作Matrix配件的步骤是一样的,这里仅以NanoPi M2为例。<br> | |
− | < | + | 参考下图连接模块:<br> |
− | + | [[File:Matrix-I2C_LCD1602_nanopi_m2.jpg|frameless|600px|Matrix-I2C_LCD1602_nanopi_m2]] | |
− | + | ||
− | + | ||
− | + | 连接说明: | |
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | |Matrix-I2C_LCD1602 || NanoPi M2 | |
+ | |- | ||
+ | |SDA || Pin3 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin4 | ||
+ | |- | ||
+ | |GND || Pin6 | ||
+ | |} | ||
− | === | + | ===连接NanoPi M3=== |
− | < | + | 参考下图连接模块:<br> |
− | + | [[File:Matrix-I2C_LCD1602_nanopi_m3.jpg|frameless|600px|Matrix-I2C_LCD1602_nanopi_m3]] | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 连接说明: | |
− | + | {| class="wikitable" | |
− | + | |- | |
− | + | |Matrix-I2C_LCD1602 || NanoPi M3 | |
− | + | |- | |
− | + | |SDA || Pin3 | |
− | + | |- | |
− | + | |SCL || Pin5 | |
− | + | |- | |
− | + | |5V || Pin4 | |
− | + | |- | |
− | + | |GND || Pin6 | |
− | + | |} | |
− | + | ||
− | } | + | |
− | + | ||
− | == | + | ===连接NanoPC-T2/NanoPC-T3=== |
− | + | 由于NanoPC-T2跟NanoPC-T3的引脚是一样的,所以连接方式是一样的,这里仅以T2为例,参考下图连接模块:<br> | |
− | + | [[File:Matrix-I2C_LCD1602_NanoPC-T2.jpg|frameless|600px|Matrix-I2C_LCD1602_NanoPC-T2]] | |
− | + | ||
− | = | + | 连接说明: |
− | + | {| class="wikitable" | |
− | + | |- | |
+ | |Matrix-I2C_LCD1602 || NanoPC-T2 | ||
+ | |- | ||
+ | |SDA || Pin6 | ||
+ | |- | ||
+ | |SCL || Pin5 | ||
+ | |- | ||
+ | |5V || Pin29 | ||
+ | |- | ||
+ | |GND || Pin30 | ||
+ | |} | ||
− | == | + | ==编译运行测试程序== |
− | + | 启动开发板并运行Debian系统,进入系统后克隆Matrix代码仓库: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | $ | + | $ apt-get update && apt-get install git |
− | $ git | + | $ git clone https://github.com/friendlyarm/matrix.git |
</syntaxhighlight> | </syntaxhighlight> | ||
+ | 克隆完成后会得到一个名为matrix的目录。 | ||
− | + | 编译并安装Matrix: | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | $ | + | $ cd matrix |
− | $ make | + | $ make && make install |
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | + | 运行测试程序: | |
− | + | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | $ | + | $ matrix-lcd1602 |
− | + | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | 注意:此模块并不支持热插拔,启动系统前需要确保硬件连接正确。<br> | ||
+ | 运行效果如下:<br> | ||
+ | [[File:matrix-lcd1602_result.png|frameless|600px|matrix-lcd1602_result]] <br> | ||
+ | LCD上会显示下列2行字符:<br> | ||
+ | " B&G Char LCD" <br> | ||
+ | "--by FriendlyARM" <br> | ||
+ | 如果LCD上没有显示,则需要旋转模块上的可调电阻以调节字体颜色的深浅。 | ||
− | + | ==代码说明== | |
− | + | 所有的开发板都共用一套Matrix代码,本模块的测试示例代码为matrix-i2c_lcd1602,内容如下: | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
int main(int argc, char ** argv) | int main(int argc, char ** argv) | ||
{ | { | ||
− | int devFD; | + | int devFD, board; |
− | if ((devFD = LCD1602Init()) == -1) { | + | int i2cDev = 0; |
+ | |||
+ | if ((board = boardInit()) < 0) { | ||
+ | printf("Fail to init board\n"); | ||
+ | return -1; | ||
+ | } | ||
+ | |||
+ | if (argc == 2) | ||
+ | i2cDev = atoi(argv[1]); | ||
+ | if ((devFD = LCD1602Init(i2cDev)) == -1) { | ||
printf("Fail to init LCD1602\n"); | printf("Fail to init LCD1602\n"); | ||
return -1; | return -1; | ||
} | } | ||
− | |||
if (LCD1602Clear(devFD) == -1) { | if (LCD1602Clear(devFD) == -1) { | ||
printf("Fail to Clear\n"); | printf("Fail to Clear\n"); | ||
− | |||
} | } | ||
printf("clearing LCD1602\n"); | printf("clearing LCD1602\n"); | ||
sleep(1); | sleep(1); | ||
− | |||
if (LCD1602DispLines(devFD, " B&G Char LCD", "--by FriendlyARM") == -1) { | if (LCD1602DispLines(devFD, " B&G Char LCD", "--by FriendlyARM") == -1) { | ||
printf("Fail to Display String\n"); | printf("Fail to Display String\n"); | ||
− | |||
} | } | ||
printf("displaying LCD1602\n"); | printf("displaying LCD1602\n"); | ||
Line 181: | Line 216: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | API说明参考维基:[[Matrix API reference manual/zh|Matrix API reference manual]] <br> | |
− | + | ||
==与Arduino连接使用== | ==与Arduino连接使用== | ||
Line 190: | Line 224: | ||
===硬件连接=== | ===硬件连接=== | ||
− | 参考下图连接模块Matrix-I2C_LCD1602和Arduino Uno | + | 参考下图连接模块Matrix-I2C_LCD1602和Arduino Uno <br> |
− | + | [[File:matrix-i2c_lcd1602_arduino.jpg|frameless|600px|matrix-i2c_lcd1602_arduino]] | |
===编译运行测试程序=== | ===编译运行测试程序=== | ||
Line 199: | Line 233: | ||
$ git clone git://github.com/friendlyarm/matrix-arduino.git | $ git clone git://github.com/friendlyarm/matrix-arduino.git | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | 克隆完成后会得到一个matrix- | + | 克隆完成后会得到一个matrix-arduino目录,里面存放着所有Matrix 配件用于支持arduino的代码。 |
拷贝matrix-i2c_lcd1602目录到Arduino IDE的libraries目录下 | 拷贝matrix-i2c_lcd1602目录到Arduino IDE的libraries目录下 | ||
Line 208: | Line 242: | ||
启动Arduino IDE <br> | 启动Arduino IDE <br> | ||
− | 点击File->Examples-> | + | 点击File->Examples->matrix-i2c_lcd1602->displaychar,打开测试程序。 <br> |
点击upload,运行测试程序。 <br> | 点击upload,运行测试程序。 <br> | ||
Line 233: | Line 267: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ==相关资料== | ||
+ | [http://www.wvshare.com/datasheet/LCD_en_PDF/LCD1602.pdf LCD1602.pdf] <br> | ||
+ | [http://www.ti.com/lit/ds/symlink/pcf8574.pdf pcf8574.pdf] |
Latest revision as of 08:44, 10 November 2016
Contents
1 介绍
- 模块Matrix-I2C_LCD1602用于LCD显示,它由液晶显示屏模块LCD1602和GPIO扩展模块PCF8574两部分构成。
- LCD1602是可以显示16x2个字符的液晶显示屏,其本身是并行接口,需要较多的IO资源才可以与之通讯。
- PCF8574可扩展出8个通用GPIO引脚,它可通过I2C与主控通讯,将主控发过来的数据信息转换成并行信号再转发给LCD1602,从而在实现LCD1602的显示和背光调节功能,达到节约IO资源和简化控制的目的。
2 特性
- I2C通讯,显示和背光可控
- 2.54mm排针接口,接线方便,通用性强
- IIC模块PCB尺寸(mm):16x42
- LCD1602 PCB尺寸(mm):36x80
- 引脚说明:
名称 | 描述 |
SDA | I2C SDA |
SCL | I2C SCL |
5V | 电源5V |
GND | 地 |
3 工作原理
3.1 PCF8574工作原理
- PCF8574模块为i2c并行口扩展电路,即对输入的i2c字节数据实现8位并行io输出(P0-P7),因此开发板可以可以通过i2c总线实现io扩展。
- PCF8574需要与i2c总线进行通信,由i2c总线特性可以知道i2c总线传输数据到该模块时必须有该模块的器件地址。本模块使用的PCF8574芯片型号为PCF8574T,其地址为如下图所示:
- 由模块的原理图可以看出A2-A0全部置1,则7位器件地址为0x27(0100111),RW默认为0,此时模块为写模式。
- 这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。
- 当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。
3.2 LCD1602工作原理
- 由模块的原理图可以看出PCF8574模块的输出引脚P0-P7与LCD模块的引脚连接如下图:
- 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 连接NanoPi NEO/NanoPi NEO Air
NanoPi M1和NanoPi NEO以及NanoPi NEO Air的前24Pin引脚定义是一模一样的,所以它们操作Matrix配件的步骤是一样的,并且使用同一份代码。
参考下图连接模块:
Matrix-I2C_LCD1602_nanopi_NEO
连接说明:
Matrix-I2C_LCD1602 | NanoPi NEO |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.2 连接NanoPi M1
连接说明:
Matrix-I2C_LCD1602 | NanoPi M1 |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.3 连接NanoPi 2
连接说明:
Matrix-I2C_LCD1602 | NanoPi 2 |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.4 连接NanoPi M2 / NanoPi 2 Fire
NanoPi M2和NanoPi 2 Fire的40 Pin引脚定义是一模一样的,所以它们操作Matrix配件的步骤是一样的,这里仅以NanoPi M2为例。
参考下图连接模块:
连接说明:
Matrix-I2C_LCD1602 | NanoPi M2 |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.5 连接NanoPi M3
参考下图连接模块:
Matrix-I2C_LCD1602_nanopi_m3
连接说明:
Matrix-I2C_LCD1602 | NanoPi M3 |
SDA | Pin3 |
SCL | Pin5 |
5V | Pin4 |
GND | Pin6 |
4.6 连接NanoPC-T2/NanoPC-T3
由于NanoPC-T2跟NanoPC-T3的引脚是一样的,所以连接方式是一样的,这里仅以T2为例,参考下图连接模块:
Matrix-I2C_LCD1602_NanoPC-T2
连接说明:
Matrix-I2C_LCD1602 | NanoPC-T2 |
SDA | Pin6 |
SCL | Pin5 |
5V | Pin29 |
GND | Pin30 |
5 编译运行测试程序
启动开发板并运行Debian系统,进入系统后克隆Matrix代码仓库:
$ apt-get update && apt-get install git $ git clone https://github.com/friendlyarm/matrix.git
克隆完成后会得到一个名为matrix的目录。
编译并安装Matrix:
$ cd matrix $ make && make install
运行测试程序:
$ matrix-lcd1602
注意:此模块并不支持热插拔,启动系统前需要确保硬件连接正确。
运行效果如下:
LCD上会显示下列2行字符:
" B&G Char LCD"
"--by FriendlyARM"
如果LCD上没有显示,则需要旋转模块上的可调电阻以调节字体颜色的深浅。
6 代码说明
所有的开发板都共用一套Matrix代码,本模块的测试示例代码为matrix-i2c_lcd1602,内容如下:
int main(int argc, char ** argv) { int devFD, board; int i2cDev = 0; if ((board = boardInit()) < 0) { printf("Fail to init board\n"); return -1; } if (argc == 2) i2cDev = atoi(argv[1]); if ((devFD = LCD1602Init(i2cDev)) == -1) { printf("Fail to init LCD1602\n"); return -1; } if (LCD1602Clear(devFD) == -1) { printf("Fail to Clear\n"); } printf("clearing LCD1602\n"); sleep(1); if (LCD1602DispLines(devFD, " B&G Char LCD", "--by FriendlyARM") == -1) { printf("Fail to Display String\n"); } printf("displaying LCD1602\n"); LCD1602DeInit(devFD); return 0; }
API说明参考维基:Matrix API reference manual
7 与Arduino连接使用
7.1 准备工作
确保你的Arduino板能正常下载运行程序,参考:https://www.arduino.cc/en/Guide/HomePage
这里我们使用的是Arduino uno板。
7.2 硬件连接
参考下图连接模块Matrix-I2C_LCD1602和Arduino Uno
7.3 编译运行测试程序
由于arduino开发板并不运行Linux系统,所以matrix for arduino的代码由独立的仓库进行管理:git://github.com/friendlyarm/matrix-arduino.git
克隆matrix-arduino代码仓库
$ git clone git://github.com/friendlyarm/matrix-arduino.git
克隆完成后会得到一个matrix-arduino目录,里面存放着所有Matrix 配件用于支持arduino的代码。
拷贝matrix-i2c_lcd1602目录到Arduino IDE的libraries目录下
$ cd matrix-arduino $ cp matrix-i2c_lcd1602 Arduino_IDE/libraies -r
启动Arduino IDE
点击File->Examples->matrix-i2c_lcd1602->displaychar,打开测试程序。
点击upload,运行测试程序。
7.4 代码展示
#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() { }