|
树莓派WiringPi控制LED Bar的MY9221芯片
前言
## 前言 我们经常喜欢使用树莓派的GPIO来控制LED灯的开关但是树莓派的的GPIO接口是有限的,那么我们如何扩展树莓派控制的LED灯个数了,这里我们牛人技术为大家来介绍下Linker Led Bar这个模块上的LED灯的操作。其实这个Linker LED Bar有点像我们之前接触过的数码管,但是这个Linker LED Bar有所不同的是这个模块采用了MY9221的显示芯片。这样通过这个芯片就可以把多个Linker LED Bar模块串联起来一起使用。其实MY9221这个芯片和SPI去驱动LED芯片是十分相似的,这个模块可以启动12个LED灯,并且这些等同样受GPIO控制。下面我们就来具体操作吧!
材料准备
树莓派一个
Linker ADC Base 一块
Linker LED bar一块
Linker cable一块
杜邦线若干
Linker LED Bar与树莓派连接
首先在没有开电的情况下,我们将Linker LED Bar的linker Cable连接到基础板的JP7接口上。如下图所示;
编程控制Linker LED Bar
这里通过编辑C语言来实现控制。
#include
#include
#include
#define DATA_Pin 4 //DATA IN
#define CLK_Pin 5 //CLK IN
#define CmdMode 0x0000 // Work on 8-bit mode
#define ON 0x00ff // 8-bit 1 data
#define SHUT 0x0000 // 8-bit 0 data
static int s_clk_flag = 0;
void send16bitData(unsigned int data)
{
int i;
for(i=0;i<16;i++)
{
if(data & 0x8000)
{
digitalWrite(DATA_Pin, HIGH);
}
else
{
digitalWrite(DATA_Pin, LOW);
}
if(s_clk_flag)
{
digitalWrite(CLK_Pin, LOW);
s_clk_flag = 0;
}
else
{
digitalWrite(CLK_Pin, HIGH);
s_clk_flag = 1;
}
delayMicroseconds(10);
data <<= 1;
}
}
//对MY9921模块的数据进行修改
void latchData(void)
{
int latch_flag = 0;
int i;
digitalWrite(DATA_Pin, LOW);
delayMicroseconds(500);
for(i=0;i<8;i++)
{
if(latch_flag)
{
digitalWrite(DATA_Pin, LOW);
latch_flag = 0;
}
else
{
digitalWrite(DATA_Pin, HIGH);
latch_flag = 1;
}
}
delayMicroseconds(500);
}
void sendLED(unsigned int LEDstate)
{
unsigned char i;
for(i=0;i<12;i++)
{
if(LEDstate&0x0001)
send16bitData(ON);
else
send16bitData(SHUT);
LEDstate=LEDstate>>1;
}
}
int setup()
{
printf("LED bar test code!\n");
printf("Using DATA = GPIO4, CLK = GPIO5.\n");
if(wiringPiSetup()==-1)
{
printf("setup wiringPi failed ! \n");
return 1;
}
pinMode(DATA_Pin,OUTPUT); //Data pin
pinMode(CLK_Pin,OUTPUT); //CLK pin
digitalWrite(DATA_Pin, LOW);
digitalWrite(CLK_Pin, LOW);
s_clk_flag = 0;
}
int main()
{
setup();
while(1)
{
unsigned int i = 0x0000;
unsigned int loop = 0x0;
while(i<=0x03ff)
{
send16bitData(CmdMode); //set LED Bar mode
sendLED(i); //send LED Bar data
latchData(); //make it come into effectv
i=i*2+1;
delay(100);
}
}
}
编译运行
首先通过GCC把这个C语言文件编译
$ gcc led_bar_test.c -o led_bar -lwiringPi
然后通过chmod 777 赋予权限
运行代码 sudo ./led_bar就可以看到跑马灯的效果了。
总结
这里我们采用C语言以及wiringPi来进行控制LED灯模块,因为采用的是C语言所以在编程方面还是要非常的严谨。通过上面的代码可以看出编译出来的二进制文件能很好快捷的控制LED灯模块很好的工作。