Difference between revisions of "Matrix - I2C LCD1602/zh"
From FriendlyELEC WiKi
(→PCF8574工作原理) |
|||
Line 17: | Line 17: | ||
==工作原理== | ==工作原理== | ||
===PCF8574工作原理=== | ===PCF8574工作原理=== | ||
− | PCF8574模块为i2c并行口扩展电路,即对输入的i2c字节数据实现8位并行io输出(P0-P7),因此开发板可以可以通过i2c总线实现远程io扩展。 | + | *PCF8574模块为i2c并行口扩展电路,即对输入的i2c字节数据实现8位并行io输出(P0-P7),因此开发板可以可以通过i2c总线实现远程io扩展。 |
− | + | *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,此时模块为写模式。 |
通过语句: | 通过语句: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
Line 26: | Line 26: | ||
devFD = pcf8574_open(devName); | devFD = pcf8574_open(devName); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | 这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。 | + | *这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。 |
− | 当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。 | + | *当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。 |
− | + | ||
==使用方法== | ==使用方法== |
Revision as of 02:48, 17 August 2015
1 介绍
带有I2C控制器的LCD1602液晶显示屏。LCD1602是可以显示16x2个字符的液晶显示屏,本身是并行接口,主控需要较多的IO资源才可以与之通讯。为了节约IO资源和控制简单,我们专门设计了一个控制器,主控通过I2C总线跟控制器通讯,控制器再把主控发来信息转换成并行信号发送给LCD1602。搭配控制器,主控可以通过I2C总线发送显示信号,关闭或打开背光。
2 特性
- I2C通讯,显示和背光可控
- 2.54mm排针接口,接线方便,通用性强
- IIC模块PCB尺寸(mm):16x42
- LCD1602 PCB尺寸(mm):36x80
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,此时模块为写模式。
通过语句:
unsigned char *devName = "/dev/i2c-0"; devFD = pcf8574_open(devName);
- 这时打开i2c-0设备并设置好器件地址了,便可以成功对模块进行写操作了。
- 当要对模块进行读操作需要把模块设置为读模式(RW改置1),由于这里没有用到,不详细介绍,具体可以参看PCF8574的datasheet。
4 使用方法
4.1 连接
- 连接到NanoPi
- GND: 接地
- VCC: 接5V
- SDA: I2C SDA
- SCL: I2C SCL
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上传到开发板上运行即可测试。