树莓派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接口上。如下图所示;

树莓派WiringPi控制LED Bar的MY9221芯片

编程控制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灯模块很好的工作。

Syndicate content