【求助】Arduino 8*8点阵模块 桃心呼吸灯效果 代码分析
http://www.alsrobot.cn/goods-107.html
请问大神,我购买了一个8*8点阵屏,根据自带的说明书,已经测试通过了显示“桃心”的效果。
但我看不懂说明书里的代码,不知道控制原理。
经过测试、修改后,发现说明书中的代码有一些没有用处,就给删了。
总结出来一份精简版,并且可以正常显示桃心效果。
const int DINPin = 2; //数据引脚 连接到数字2 口
const int CLKPin = 4; //时钟引脚 连接到数字4 口
const int LTHPin = 7; //锁存引脚 连接到数字7 口
byte LieScan = { //列扫描,点阵只点亮一行
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
};
byte HanZi_1[] = {
0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
};
void setup() {
pinMode(DINPin,OUTPUT); //设置数据引脚为输出
pinMode(CLKPin,OUTPUT); //设置锁存引脚为输出
pinMode(LTHPin,OUTPUT); //设置时钟引脚为输出
}
void loop() {
{
for(char x = 0;x <4;x++) {
shiftOut(DINPin, CLKPin, MSBFIRST, LieScan); //先选择列
shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_1); //再送行数据
digitalWrite(LTHPin, LOW); //刷新显示
digitalWrite(LTHPin, HIGH);
}
}
}
问题1:我想把桃心做成呼吸灯的效果,可以渐强减弱,请问代码怎么写?我没有编程基础。。
问题2:哪位大神能讲一下,控制点阵屏的代码规则,假如我想换图案呢?应该怎么写,目前找不到规律。
非常感谢!
【这个是说明书中,原始的代码,供参考】
const int DINPin = 2; //数据引脚 连接到数字2 口
const int CLKPin = 4; //时钟引脚 连接到数字4 口
const int LTHPin = 7; //锁存引脚 连接到数字7 口
byte LieScan = { //列扫描,点阵只点亮一行
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
};
byte HanZi_1[] = {
0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
};
byte HanZi_2[] = {
0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
};
byte HanZi_3[] = {
0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
};
void setup() {
pinMode(DINPin,OUTPUT); //设置数据引脚为输出
pinMode(CLKPin,OUTPUT); //设置锁存引脚为输出
pinMode(LTHPin,OUTPUT); //设置时钟引脚为输出
}
void loop() {
for(unsigned char times_1 = 0;times_1 <250;times_1++) { //持续刷新250 次
for(char x = 0;x <9;x++) {
shiftOut(DINPin, CLKPin, MSBFIRST, LieScan); //先选择列
shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_1); //再送行数据
digitalWrite(LTHPin, LOW); //刷新显示
digitalWrite(LTHPin, HIGH);
}
}
for(unsigned char times_2 = 0;times_2 <250;times_2++) { //持续刷新250 次
for(char x = 0;x <8;x++) {
shiftOut(DINPin, CLKPin, MSBFIRST, LieScan); //先选择列
shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_2); //再送行数据
digitalWrite(LTHPin, LOW); //刷新显示
digitalWrite(LTHPin, HIGH);
}
}
for(unsigned char times_3 = 0;times_3 <250;times_3++) { //持续刷新250 次
for(char x = 0;x <8;x++) {
shiftOut(DINPin, CLKPin, MSBFIRST, LieScan); //先选择列
shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_3); //再送行数据
digitalWrite(LTHPin, LOW); //刷新显示
digitalWrite(LTHPin, HIGH);
}
}
}
点阵应该是不能改变亮度的强弱的。至于要让点阵显示不同的图形,其实就是让不同的点点亮就行。我用过的是一个共阴极的8*8点阵,只要给一个高电平就可以点亮。这个程序应该是用74HC595来控制的,这有一个普通版的程序可以帮助好好理解,不过table1和table2的数据要改一下
#define H1 2
#define H2 7
#define H3 A5
#define H4 5
#define H5 13
#define H6 A4
#define H7 12
#define H8 A2
#define L1 6
#define L2 11
#define L3 10
#define L4 3
#define L5 A3
#define L6 4
#define L7 8
#define L8 9
unsigned char table1 = //大“心型”的数据
{
0,0,0,0,0,0,0,0,
0,1,1,0,0,1,1,0,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
};
unsigned char table2 = //小“心型”的数据
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,1,0,0,1,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0,
};
void setup()
{
pinMode(H1,OUTPUT);
pinMode(H2,OUTPUT);
pinMode(H3,OUTPUT);
pinMode(H4,OUTPUT);
pinMode(H5,OUTPUT);
pinMode(H6,OUTPUT);
pinMode(H7,OUTPUT);
pinMode(H8,OUTPUT);
pinMode(L1,OUTPUT);
pinMode(L2,OUTPUT);
pinMode(L3,OUTPUT);
pinMode(L4,OUTPUT);
pinMode(L5,OUTPUT);
pinMode(L6,OUTPUT);
pinMode(L7,OUTPUT);
pinMode(L8,OUTPUT);
}
void loop()
{
for(int i = 0 ; i < 100 ; i++) //循环显示100次
{
Display(table1); //显示大”心形“
}
for(int i = 0 ; i < 50 ; i++) //循环显示50次
{
Display(table2); //显示小“心形”
}
}
void Display(unsigned char dat) //显示函数
{
digitalWrite(L1,LOW); //选通第一列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1); //延时一小段时间,等待LED被点亮
Clear(); //清空显示去除余晖
digitalWrite(L2,LOW); //选通第二列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
digitalWrite(L3,LOW); //选通第三列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
digitalWrite(L4,LOW); //选通第四列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
digitalWrite(L5,LOW); //选通第五列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
digitalWrite(L6,LOW); //选通第六列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
digitalWrite(L7,LOW); //选通第七列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
digitalWrite(L8,LOW); //选通第八列
digitalWrite(H1,dat);
digitalWrite(H2,dat);
digitalWrite(H3,dat);
digitalWrite(H4,dat);
digitalWrite(H5,dat);
digitalWrite(H6,dat);
digitalWrite(H7,dat);
digitalWrite(H8,dat);
delay(1);
Clear();
}
void Clear() //清空显示
{
digitalWrite(H1,LOW);
digitalWrite(H2,LOW);
digitalWrite(H3,LOW);
digitalWrite(H4,LOW);
digitalWrite(H5,LOW);
digitalWrite(H6,LOW);
digitalWrite(H7,LOW);
digitalWrite(H8,LOW);
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
digitalWrite(L5,HIGH);
digitalWrite(L6,HIGH);
digitalWrite(L7,HIGH);
digitalWrite(L8,HIGH);
}
首先你要知道,你买的这个模块是逻辑器件驱动的,是不能输出PWM的。你看一下数据手册就知道了 等等,我想到了一个点子。
如果刷新频率足够快的话,说不定可以实现!! 软件-蹄飞 发表于 2014-8-9 00:32 static/image/common/back.gif
等等,我想到了一个点子。
如果刷新频率足够快的话,说不定可以实现!!
谢谢!因为我没有电子电路基础,也不懂编程。只是想做一个小东西 送给女朋友。
我在淘宝看见了一个 呼吸调光器
http://item.taobao.com/item.htm?spm=a1z09.2.9.10.Z1QXZz&id=17791006322&_u=9e2f8hb947&tracelog=sns_share_urlshare
我想试试 接上电压两个针脚 能不能达到呼吸效果。
下周到货 可以测试 这东西不便宜呢 洋流 发表于 2014-8-8 16:54 static/image/common/back.gif
点阵应该是不能改变亮度的强弱的。至于要让点阵显示不同的图形,其实就是让不同的点点亮就行。我用过的是一 ...
代码测试成功!非常感谢!
我有个问题 您帮忙看下!
【求助】关于扩流 驱动直流电机 疑问
http://www.geek-workshop.com/thread-10718-1-1.html
软件-蹄飞 发表于 2014-8-9 00:30 static/image/common/back.gif
首先你要知道,你买的这个模块是逻辑器件驱动的,是不能输出PWM的。你看一下数据手册就知道了
您抽时间 帮我看下这个问题 困扰我很久了谢谢谢谢谢!
【求助】关于扩流 驱动直流电机 疑问
http://www.geek-workshop.com/thread-10718-1-1.html
页:
[1]