52pi.net有个老邓,老邓做了个LCD屏幕,
这个屏幕是给BPI也就是香蕉派制作的,
通过一个叫mcp23017的i2c芯片,
扩展出了16个双向I/O,
一个模块集成了三种功能,
1、一块1602屏幕,蓝屏
2、一个RGB-LED,亮瞎眼,盲打中
3、五个独立按键
这是一个综合的例子
#include
#include
#include
#include
#include
#include
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.Joytag Time ");
lcdPrintf(display," 2.Uncle's RGB ");
}
else
{
lcdPrintf(display," 1.Joytag Time ");
lcdPrintf(display,">>2.Uncle's 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," **Uncle's 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 52pi.net");
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);
while(1)
show();
}
一共两个选项,没做翻页,
1、卓泰的时间
2、二叔的LED
上下键选择,右键选定,左键可以进入欢迎页面
点击右边单独的键,退回到Menu
千万不要直视,会死人的!
运行办法:
gcc bpi1602.c -lwiringPi /opt/gpio-lib/WiringBPi_Beta_V2.0/devLib/lcd.o -o bpi1602 ./bpi1602
二叔科技原创,关注二叔科技 http://2.liub.org
二叔科技.创客空间 167153362
我要赚赏金
