
RGB1602显示模块专为香蕉派设计。该模块采用1602液晶显示屏,通过I2C总线与Banana Pi进行通信。此外,模块上还有六个可编程按键和RGB LED。用户可以使用Python或C(Python Pi)来驱动模块,代码简单且较少。
1602液晶显示屏
板上RGB LED
6个可编程单键
与I2C通信
可通过程序控制背光灯熄灭
香蕉派连接端口,也可以用在树莓派上。
工作电压:5.0V
ASC II字符串可以是sidplay
4线驱动1602 LCD屏幕
使用MCP23017扩展IO
信息监测
学校教育
人机交互
只需将模块插入Banana Pi,如下图所示:
更多信息
MCP23017/MCP23S17(MCP23X17)设备系列为I2C总线或SPI应用程序提供16位通用并行I/O扩展。这两种设备的区别仅在于串行接口。
MCP23017 – I2C接口 MCP23S17 – SPI接口 MCP23X17由多个8位配置寄存器组成,用于输入、输出和极性选择。系统主机可以通过写入I/O配置位(IODIRA/B)来启用I/O作为输入或输出。每个输入或输出的数据都保存在相应的输入或输出寄存器中。输入端口寄存器的极性可以使用极性反转寄存器进行反转。系统主机可以读取所有寄存器。16位I/O端口在功能上由两个8位端口(PORTA和PORTB)组成。MCP23X17可以配置为通过IOCON在8位或16位模式下操作。银行。
有两个中断引脚INTA和INTB,它们可以与各自的端口相关联,或者可以逻辑地“或”运算在一起,这样,如果任何一个端口导致中断,两个引脚都会激活。中断输出可以配置为在两种条件下(互斥)激活:
当任何输入状态与其对应的输入端口寄存器状态不同时。这用于向系统主机指示输入状态已经改变。
当输入状态与预先配置的寄存器值(DEFVAL寄存器)不同时。中断捕获寄存器在中断时捕获端口值,从而保存导致中断的条件。开机复位(POR)将寄存器设置为其默认值,并初始化设备状态机。硬件地址引脚用于确定设备地址。
操作系统:Ubuntu 15.10(Kernel3.4)
版本:1.0 HDMI
步骤1:下载WiringPI
$ git clone https://github.com/BPI-SINOVOIP/BPI-WiringPi.git1 -b BPI_M3
$ cd BPI-WiringPi
$ chmod +x ./build
$ sudo ./build
步骤2:将示例代码复制到1602.c文件
$ sudo vi 1602.c
步骤3:编译1602.c
$ gcc -o 1602 1602.c -l wiringPi -lpthread -lwiringPiDev
步骤4:运行1602
$ sudo ./1602
YouTube video demo : https://www.youtube.com/watch?v=-fPiRsNWurM
#include <stdio.h>
#include <wiringPi.h>
#include <pthread.h>
#include <mcp23017.h>
#include <lcd.h>
#include <time.h>
int page=3;
int select=1;
int display;
int color=0;
pthread_t id;
void show()
{
time_t timep;
struct tm *ptm;
digitalWrite ( 113, LOW);
digitalWrite ( 114, LOW);
digitalWrite ( 115, LOW);
lcdPosition(display,0,0);
switch(page)
{
case 0:
if (select==1)
{
lcdPrintf(display,">>1.System Time ");
lcdPrintf(display," 2.LED RGB ");
}
else
{
lcdPrintf(display," 1.System Time ");
lcdPrintf(display,">>2.LED RGB ");
}
break;
case 1:
time(&timep);
ptm=localtime(&timep);
lcdPrintf(display," %04d/%02d/%02d ",1900+ptm->tm_year, 1+ptm->tm_mon, ptm->tm_mday);
lcdPrintf(display," %02d:%02d:%02d ",ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
break;
case 2:
lcdPrintf(display," **LED RGB**");
lcdPrintf(display," Color: %d ",color);
digitalWrite ( 113, color&0x01);
digitalWrite ( 114, color&0x02);
digitalWrite ( 115, color&0x04);
color=(color+1)%8;
delay(400);
break;
case 3:
lcdPrintf(display,"RGB&1602 Module ");
lcdPrintf(display,"for BPI-M3 ");
break;
}
delay(100);
}
void key(void)
{
int i;
while(1)
{
for(i=108;i<113;i++)
{
if (digitalRead(i)>0)
{
switch(i)
{
case 108:
page=0;
break;
case 109:
select=select%2+1;
break;
case 110:
page=3;
break;
case 111:
page=select;
break;
case 112:
select=select%2+1;
break;
}
delay(400);
}
}
delay(100);
}
}
int main()
{
wiringPiSetup();
mcp23017Setup (100, 0x20);
pthread_create(&id,NULL,(void *)key,NULL);
digitalWrite(107,1);
digitalWrite(101,0);
display=lcdInit(2,16,4,100,102,103,104,105,106,0,0,0,0);
lcdHome(display);
for(int i=0;i<16;i++)
pinMode(100+i,OUTPUT);
while(1)
show();
}