驱动led流水灯,用arduino制作呼吸灯逐步掌握arduino编程方式是一个重要过程,在进阶时会逐渐学习SPI,I2C等工作方式,led点阵就是学习,理解I2C的很好的工具,非常直观地将代码呈现出来
手头上有块8*8点阵,通过多路复用技术,仅需要4路输入即可控制64个led小灯泡的点亮和熄灭,是不是很神奇!
多路复用技术是一种在同一时间只开一行显示的技术。选择包含你想点亮的led的行和列,给该行商店,行中个的led将点亮。之后关闭该行,打开下一行。对所有的列执行同样的操作,第二行中的led将被点亮,重复以上的操作,分别打开每一行直至最后一行;
如果运行的足够快,大约100Hz,或者每秒100次,由于人眼的视觉暂留现象,对同时看到一个心形的图案,其实他们是逐行被点亮的~
明白这个原理,就可以很容易的读懂landzo c1机器人套件中的程序了;
int CLK = 7;
int CS = 8;
int DIN = 13;
void Write_Max7219_byte(unsigned char DATA)
{
unsigned char i;
digitalWrite(CS,LOW);
for(i=8;i>=1;i--)
{
digitalWrite(CLK,LOW);
if(DATA&0X80)
digitalWrite(DIN,HIGH);
else
digitalWrite(DIN,LOW);
DATA<<=1;
digitalWrite(CLK,HIGH);
}
}
void Write_Max7219(unsigned char address,unsigned char dat)
{
digitalWrite(CS,LOW);
Write_Max7219_byte(address); //写入地址,即点阵屏的列号
Write_Max7219_byte(dat); //写入数据,即显示点阵屏的点
digitalWrite(CS,HIGH);
}
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00); //译码方式:BCD码
Write_Max7219(0x0a, 0x03); //亮度
Write_Max7219(0x0b, 0x07); //扫描界限
Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1
Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
Write_Max7219(1 , 0);
Write_Max7219(2 , 0);
Write_Max7219(3 , 0);
Write_Max7219(4 , 0);
Write_Max7219(5 , 0);
Write_Max7219(6 , 0);
Write_Max7219(7 , 0);
Write_Max7219(8 , 0);
}
void setup()
{
pinMode(CLK,OUTPUT);
pinMode(CS,OUTPUT);
pinMode(DIN,OUTPUT);
Init_MAX7219();
}
void loop()
{
Write_Max7219(6 , 4); //这里便是控制的行和列显示
Write_Max7219(4 , 8);
Write_Max7219(4 , 4);
Write_Max7219(5 , 2);
Write_Max7219(6 , 1);
Write_Max7219(7 , 2);
Write_Max7219(8 , 4);
Write_Max7219(8 , 8);
Write_Max7219(7 , 8);
Write_Max7219(5 , 8);
}
将以上的点对应到8*8点阵上,看到的便是一个心形的图案了。
|