极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28406|回复: 7

【求助】Arduino 8*8点阵模块 桃心呼吸灯效果 代码分析

[复制链接]
发表于 2014-8-8 14:50:42 | 显示全部楼层 |阅读模式

http://www.alsrobot.cn/goods-107.html

请问大神,我购买了一个8*8点阵屏,根据自带的说明书,已经测试通过了显示“桃心”的效果。

但我看不懂说明书里的代码,不知道控制原理。

经过测试、修改后,发现说明书中的代码有一些没有用处,就给删了。

总结出来一份精简版,并且可以正常显示桃心效果。

  1. const int DINPin = 2; //数据引脚 连接到数字2 口
  2. const int CLKPin = 4; //时钟引脚 连接到数字4 口
  3. const int LTHPin = 7; //锁存引脚 连接到数字7 口
  4. byte LieScan[4] = { //列扫描,点阵只点亮一行
  5. 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
  6. };
  7. byte HanZi_1[] = {
  8. 0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
  9. };
  10. void setup() {
  11. pinMode(DINPin,OUTPUT); //设置数据引脚为输出
  12. pinMode(CLKPin,OUTPUT); //设置锁存引脚为输出
  13. pinMode(LTHPin,OUTPUT); //设置时钟引脚为输出
  14. }
  15. void loop() {
  16. {
  17. for(char x = 0;x <4;x++) {
  18. shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]); //先选择列
  19. shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_1[x]); //再送行数据
  20. digitalWrite(LTHPin, LOW); //刷新显示
  21. digitalWrite(LTHPin, HIGH);
  22. }
  23. }
  24. }
复制代码


问题1:我想把桃心做成呼吸灯的效果,可以渐强减弱,请问代码怎么写?我没有编程基础。。
问题2:哪位大神能讲一下,控制点阵屏的代码规则,假如我想换图案呢?应该怎么写,目前找不到规律。
非常感谢!


【这个是说明书中,原始的代码,供参考】
  1. const int DINPin = 2; //数据引脚 连接到数字2 口
  2. const int CLKPin = 4; //时钟引脚 连接到数字4 口
  3. const int LTHPin = 7; //锁存引脚 连接到数字7 口
  4. byte LieScan[16] = { //列扫描,点阵只点亮一行
  5. 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
  6. };
  7. byte HanZi_1[] = {
  8. 0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
  9. };
  10. byte HanZi_2[] = {
  11. 0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
  12. };
  13. byte HanZi_3[] = {
  14. 0x1c,0x3e,0x7e,0xfc,0xfc,0x7e,0x3e,0x1c //心形图案
  15. };
  16. void setup() {
  17. pinMode(DINPin,OUTPUT); //设置数据引脚为输出
  18. pinMode(CLKPin,OUTPUT); //设置锁存引脚为输出
  19. pinMode(LTHPin,OUTPUT); //设置时钟引脚为输出
  20. }
  21. void loop() {
  22. for(unsigned char times_1 = 0;times_1 <250;times_1++) { //持续刷新250 次
  23. for(char x = 0;x <9;x++) {
  24. shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]); //先选择列
  25. shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_1[x]); //再送行数据
  26. digitalWrite(LTHPin, LOW); //刷新显示
  27. digitalWrite(LTHPin, HIGH);
  28. }
  29. }
  30. for(unsigned char times_2 = 0;times_2 <250;times_2++) { //持续刷新250 次
  31. for(char x = 0;x <8;x++) {
  32. shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]); //先选择列
  33. shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_2[x]); //再送行数据
  34. digitalWrite(LTHPin, LOW); //刷新显示
  35. digitalWrite(LTHPin, HIGH);
  36. }
  37. }
  38. for(unsigned char times_3 = 0;times_3 <250;times_3++) { //持续刷新250 次
  39. for(char x = 0;x <8;x++) {
  40. shiftOut(DINPin, CLKPin, MSBFIRST, LieScan[x]); //先选择列
  41. shiftOut(DINPin, CLKPin, MSBFIRST, HanZi_3[x]); //再送行数据
  42. digitalWrite(LTHPin, LOW); //刷新显示
  43. digitalWrite(LTHPin, HIGH);
  44. }
  45. }
  46. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-8-8 16:54:03 | 显示全部楼层
点阵应该是不能改变亮度的强弱的。至于要让点阵显示不同的图形,其实就是让不同的点点亮就行。我用过的是一个共阴极的8*8点阵,只要给一个高电平就可以点亮。这个程序应该是用74HC595来控制的,这有一个普通版的程序可以帮助好好理解,不过table1和table2的数据要改一下

  1. #define H1 2
  2. #define H2 7
  3. #define H3 A5
  4. #define H4 5
  5. #define H5 13
  6. #define H6 A4
  7. #define H7 12
  8. #define H8 A2

  9. #define L1 6
  10. #define L2 11
  11. #define L3 10
  12. #define L4 3
  13. #define L5 A3
  14. #define L6 4
  15. #define L7 8
  16. #define L8 9

  17. unsigned char table1[8][8] =                         //大“心型”的数据
  18. {
  19.   0,0,0,0,0,0,0,0,
  20.   0,1,1,0,0,1,1,0,
  21.   1,1,1,1,1,1,1,1,
  22.   1,1,1,1,1,1,1,1,
  23.   1,1,1,1,1,1,1,1,
  24.   0,1,1,1,1,1,1,0,
  25.   0,0,1,1,1,1,0,0,
  26.   0,0,0,1,1,0,0,0,
  27. };

  28. unsigned char table2[8][8] =                         //小“心型”的数据
  29. {
  30.   0,0,0,0,0,0,0,0,
  31.   0,0,0,0,0,0,0,0,
  32.   0,0,1,0,0,1,0,0,
  33.   0,1,1,1,1,1,1,0,
  34.   0,1,1,1,1,1,1,0,
  35.   0,0,1,1,1,1,0,0,
  36.   0,0,0,1,1,0,0,0,
  37.   0,0,0,0,0,0,0,0,
  38. };

  39. void setup()
  40. {
  41.   pinMode(H1,OUTPUT);
  42.   pinMode(H2,OUTPUT);
  43.   pinMode(H3,OUTPUT);
  44.   pinMode(H4,OUTPUT);
  45.   pinMode(H5,OUTPUT);
  46.   pinMode(H6,OUTPUT);
  47.   pinMode(H7,OUTPUT);
  48.   pinMode(H8,OUTPUT);
  49.   
  50.   pinMode(L1,OUTPUT);
  51.   pinMode(L2,OUTPUT);
  52.   pinMode(L3,OUTPUT);
  53.   pinMode(L4,OUTPUT);
  54.   pinMode(L5,OUTPUT);
  55.   pinMode(L6,OUTPUT);
  56.   pinMode(L7,OUTPUT);
  57.   pinMode(L8,OUTPUT);
  58. }

  59. void loop()
  60. {
  61.   for(int i = 0 ; i < 100 ; i++)                                //循环显示100次
  62.   {
  63.     Display(table1);                                                                                //显示大”心形“
  64.   }
  65.   for(int i = 0 ; i < 50 ; i++)                                        //循环显示50次
  66.   {               
  67.     Display(table2);                                                                                //显示小“心形”
  68.   }
  69. }

  70. void Display(unsigned char dat[8][8])                //显示函数
  71. {
  72.   digitalWrite(L1,LOW);                                                                        //选通第一列
  73.   digitalWrite(H1,dat[0][0]);
  74.   digitalWrite(H2,dat[1][0]);
  75.   digitalWrite(H3,dat[2][0]);
  76.   digitalWrite(H4,dat[3][0]);
  77.   digitalWrite(H5,dat[4][0]);
  78.   digitalWrite(H6,dat[5][0]);
  79.   digitalWrite(H7,dat[6][0]);
  80.   digitalWrite(H8,dat[7][0]);
  81.   delay(1);        //延时一小段时间,等待LED被点亮
  82.   Clear();        //清空显示去除余晖
  83.   
  84.   digitalWrite(L2,LOW);                                                                        //选通第二列
  85.   digitalWrite(H1,dat[0][1]);
  86.   digitalWrite(H2,dat[1][1]);
  87.   digitalWrite(H3,dat[2][1]);
  88.   digitalWrite(H4,dat[3][1]);
  89.   digitalWrite(H5,dat[4][1]);
  90.   digitalWrite(H6,dat[5][1]);
  91.   digitalWrite(H7,dat[6][1]);
  92.   digitalWrite(H8,dat[7][1]);
  93.   delay(1);
  94.   Clear();
  95.   
  96.   digitalWrite(L3,LOW);                                                                        //选通第三列
  97.   digitalWrite(H1,dat[0][2]);
  98.   digitalWrite(H2,dat[1][2]);
  99.   digitalWrite(H3,dat[2][2]);
  100.   digitalWrite(H4,dat[3][2]);
  101.   digitalWrite(H5,dat[4][2]);
  102.   digitalWrite(H6,dat[5][2]);
  103.   digitalWrite(H7,dat[6][2]);
  104.   digitalWrite(H8,dat[7][2]);
  105.   delay(1);
  106.   Clear();
  107.   
  108.   digitalWrite(L4,LOW);                                                                        //选通第四列
  109.   digitalWrite(H1,dat[0][3]);
  110.   digitalWrite(H2,dat[1][3]);
  111.   digitalWrite(H3,dat[2][3]);
  112.   digitalWrite(H4,dat[3][3]);
  113.   digitalWrite(H5,dat[4][3]);
  114.   digitalWrite(H6,dat[5][3]);
  115.   digitalWrite(H7,dat[6][3]);
  116.   digitalWrite(H8,dat[7][3]);
  117.   delay(1);
  118.   Clear();
  119.   
  120.   digitalWrite(L5,LOW);                                                                        //选通第五列
  121.   digitalWrite(H1,dat[0][4]);
  122.   digitalWrite(H2,dat[1][4]);
  123.   digitalWrite(H3,dat[2][4]);
  124.   digitalWrite(H4,dat[3][4]);
  125.   digitalWrite(H5,dat[4][4]);
  126.   digitalWrite(H6,dat[5][4]);
  127.   digitalWrite(H7,dat[6][4]);
  128.   digitalWrite(H8,dat[7][4]);
  129.   delay(1);
  130.   Clear();
  131.   
  132.   digitalWrite(L6,LOW);                                                                        //选通第六列
  133.   digitalWrite(H1,dat[0][5]);
  134.   digitalWrite(H2,dat[1][5]);
  135.   digitalWrite(H3,dat[2][5]);
  136.   digitalWrite(H4,dat[3][5]);
  137.   digitalWrite(H5,dat[4][5]);
  138.   digitalWrite(H6,dat[5][5]);
  139.   digitalWrite(H7,dat[6][5]);
  140.   digitalWrite(H8,dat[7][5]);
  141.   delay(1);
  142.   Clear();
  143.   
  144.   digitalWrite(L7,LOW);                                                                        //选通第七列
  145.   digitalWrite(H1,dat[0][6]);
  146.   digitalWrite(H2,dat[1][6]);
  147.   digitalWrite(H3,dat[2][6]);
  148.   digitalWrite(H4,dat[3][6]);
  149.   digitalWrite(H5,dat[4][6]);
  150.   digitalWrite(H6,dat[5][6]);
  151.   digitalWrite(H7,dat[6][6]);
  152.   digitalWrite(H8,dat[7][6]);
  153.   delay(1);
  154.   Clear();
  155.   
  156.   digitalWrite(L8,LOW);                                                                        //选通第八列
  157.   digitalWrite(H1,dat[0][7]);
  158.   digitalWrite(H2,dat[1][7]);
  159.   digitalWrite(H3,dat[2][7]);
  160.   digitalWrite(H4,dat[3][7]);
  161.   digitalWrite(H5,dat[4][7]);
  162.   digitalWrite(H6,dat[5][7]);
  163.   digitalWrite(H7,dat[6][7]);
  164.   digitalWrite(H8,dat[7][7]);
  165.   delay(1);  
  166.   Clear();
  167. }

  168. void Clear()                                                                                                        //清空显示
  169. {
  170.   digitalWrite(H1,LOW);
  171.   digitalWrite(H2,LOW);
  172.   digitalWrite(H3,LOW);
  173.   digitalWrite(H4,LOW);
  174.   digitalWrite(H5,LOW);
  175.   digitalWrite(H6,LOW);
  176.   digitalWrite(H7,LOW);
  177.   digitalWrite(H8,LOW);
  178.   
  179.   digitalWrite(L1,HIGH);
  180.   digitalWrite(L2,HIGH);
  181.   digitalWrite(L3,HIGH);
  182.   digitalWrite(L4,HIGH);
  183.   digitalWrite(L5,HIGH);
  184.   digitalWrite(L6,HIGH);
  185.   digitalWrite(L7,HIGH);
  186.   digitalWrite(L8,HIGH);
  187. }
复制代码

回复 支持 反对

使用道具 举报

发表于 2014-8-9 00:30:48 | 显示全部楼层
首先你要知道,你买的这个模块是逻辑器件驱动的,是不能输出PWM的。你看一下数据手册就知道了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2014-8-9 00:32:44 | 显示全部楼层
等等,我想到了一个点子。
如果刷新频率足够快的话,说不定可以实现!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-9 12:32:37 | 显示全部楼层
软件-蹄飞 发表于 2014-8-9 00:32
等等,我想到了一个点子。
如果刷新频率足够快的话,说不定可以实现!!

谢谢!因为我没有电子电路基础,也不懂编程。只是想做一个小东西 送给女朋友。
我在淘宝看见了一个 呼吸调光器
http://item.taobao.com/item.htm?spm=a1z09.2.9.10.Z1QXZz&id=17791006322&_u=9e2f8hb947&tracelog=sns_share_urlshare
我想试试 接上电压两个针脚 能不能达到呼吸效果。
下周到货 可以测试
回复 支持 反对

使用道具 举报

发表于 2014-8-10 11:00:55 | 显示全部楼层
这东西不便宜呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-16 10:55:38 | 显示全部楼层
洋流 发表于 2014-8-8 16:54
点阵应该是不能改变亮度的强弱的。至于要让点阵显示不同的图形,其实就是让不同的点点亮就行。我用过的是一 ...

代码测试成功!非常感谢!

我有个问题 您帮忙看下!

【求助】关于扩流 驱动直流电机 疑问
http://www.geek-workshop.com/thread-10718-1-1.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-16 10:56:01 | 显示全部楼层
软件-蹄飞 发表于 2014-8-9 00:30
首先你要知道,你买的这个模块是逻辑器件驱动的,是不能输出PWM的。你看一下数据手册就知道了

您抽时间 帮我看下这个问题 困扰我很久了  谢谢谢谢谢!

【求助】关于扩流 驱动直流电机 疑问
http://www.geek-workshop.com/thread-10718-1-1.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 09:22 , Processed in 0.038959 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表