单片机/MCU论坛
直播中

sustmol

8年用户 15经验值
擅长:可编程逻辑 模拟技术 嵌入式技术 控制/MCU RF/无线
私信 关注
[文章]

51单片机实现花样点阵,效果跟光立方差多少?

本帖最后由 sustmol 于 2016-11-29 17:46 编辑

点阵花样显示

采用HC6800-EM3 V3.0开发板,使用STC89C52RC单片机,四片74HC595串行移位寄存器驱动16*16led点阵,软件通过指针查表实现点阵的花样显示。轻松简单实现一些效果,但跟光立方比起来差远了!

1.点阵效果如下图:


led点阵.gif



2.程序清单如下:
(1)控制点阵花样显示函数
  1. #include
  2. #include "array.h"

  3. //--宏定义函数变量--//
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. #define ulong unsigned long

  7. //--定义SPI要使用的 IO--//
  8. ***it MOSIO = P3^4;
  9. ***it R_CLK = P3^5;
  10. ***it S_CLK = P3^6;

  11. //--全局函数声明--//
  12. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);

  13. void main(void)
  14. {   
  15. int k, i, ms;

  16. //--定义一个指针数据指向画面--//
  17. uchar *p[] = {
  18. tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8,tab9, tab10,
  19. tab11, tab12, tab13, tab14,tab15,tab16, tab17, tab18,tab19, tab20,
  20. tab21, tab22, tab23, tab24,tab25,tab26, tab27, tab28,tab29, tab30,
  21. tab31, tab32, tab33, tab34,tab35,tab36, tab37, tab38,tab39, tab40,
  22. tab41, tab42, tab43, tab44,tab45,tab46, tab47, tab48,tab49, tab50,
  23. tab51, tab52, tab53, tab54,tab55,tab56, tab57, tab58,tab59, tab60,
  24. tab61, tab62, tab63, tab64,tab65,tab66, tab67, tab68,tab69, tab70,
  25. tab71, tab72, tab73, tab74,tab75,tab76, tab77, tab78,tab79, tab80,
  26. tab81};

  27.                  //显示GO,停留时间较长
  28.                  i=0;
  29.                  for(ms = 80; ms > 0; ms--)//停留时间较长
  30.                         {
  31.                                 for(k = 0; k < 16; k++)//显示G0图案
  32.                                 {                                                        
  33. //--因为字模软件取的数组是高电平有效,所以列要取反--//
  34. HC595SendData(~(*(p[i] + 2*k + 1)),~(*(p[i] + 2*k )),tab0[2*k],tab0[2*k + 1]);
  35.                                 }
  36.                         }
  37.                  
  38.         while(1)
  39.         {
  40.                 for(i = 1; i < 80; i++)//总共80个画面
  41.                 {
  42.                         for(ms = 10; ms > 0; ms--)//停留时间较短
  43.                         {
  44.                                 for(k = 0; k < 16; k++)//显示一个画面
  45.                                 {                                                        
  46.                                        
  47. HC595SendData(~(*(p[i] + 2*k + 1)),~(*(p[i] + 2*k )),tab0[2*k],tab0[2*k + 1]);
  48.                                 }

  49. HC595SendData(0xff,0xff,0,0);//清屏                 
  50.                         }
  51.                 }                                                                                
  52.         }
  53. }

  54. /*******************************
  55. 函 数 名 : HC595SendData
  56. 函数功能: 通过595发送四个字节的数据
  57. 输入:
  58. BT3:第四个595输出数值
  59. BT2: 第三个595输出数值
  60. BT1:第二个595输出数值
  61. BT0:第一个595输出数值
  62. 输出 : 无
  63. *******************************/
  64. void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)
  65. {
  66.          uchar i;
  67.         //--发送第一个字节--//
  68.         for(i=0;i<8;i++)
  69.         {
  70.                 MOSIO = BT3 >> 7 ;//从高位到低位
  71.                 BT3 <<= 1;
  72.                 S_CLK = 0;
  73.                 S_CLK = 1;               
  74.         }

  75.         //--发送第一个字节--//
  76.         for(i=0;i<8;i++)
  77.         {
  78.                 MOSIO = BT2 >>7;//从高位到低位
  79.                 BT2 <<= 1;
  80.                 S_CLK = 0;
  81.                 S_CLK = 1;       
  82.         }

  83.         //--发送第一个字节--//
  84.         for(i=0;i<8;i++)
  85.         {
  86.                 MOSIO = BT1 >> 7;//从高位到低位
  87.                 BT1 <<= 1;
  88.                 S_CLK = 0;
  89.                 S_CLK = 1;       
  90.         }

  91.         //--发送第一个字节--//
  92.         for(i=0;i<8;i++)
  93.         {
  94.                 MOSIO = BT0 >> 7;//从高位到低位
  95.                 BT0 <<= 1;
  96.                 S_CLK = 0;
  97.                 S_CLK = 1;
  98.         }
  99.    
  100.         //--输出--//
  101.         R_CLK = 0; //置低电平
  102.         R_CLK = 1; //片选
  103.         R_CLK = 0; //置低电平
  104. }
(2)点阵图案显示数组
见附件
花样点阵.zip (33.28 KB)
(下载次数: 62, 2016-11-29 17:06 上传)

回帖(28)

houjue

2016-11-29 18:15:52
好是好,就是不知有没有 #include "array.h"文件呀?!
举报

尧建堂

2016-11-29 18:33:30
楼主弄个视频多好
举报

sustmol

2016-11-29 19:43:15
引用: houjue 发表于 2016-11-29 18:15
好是好,就是不知有没有 #include "array.h"文件呀?!

有的,在附件中
举报

sustmol

2016-11-29 19:43:59
引用: 太子的空间 发表于 2016-11-29 18:33
楼主弄个视频多好

有视频,视频太大了,就做成gif动图了
举报

尧建堂

2016-11-29 19:50:14
引用: sustmol 发表于 2016-11-29 19:43
有视频,视频太大了,就做成gif动图了

哦,知道了,不过做的真不错,
举报

sustmol

2016-11-29 20:01:46
引用: 太子的空间 发表于 2016-11-29 19:50
哦,知道了,不过做的真不错,

谢谢,第一次发帖,好多细节还不熟悉
举报

李明

2016-11-29 20:12:20
这个主要是做效果和算法,练习练习都是很不错的,还可以练练上位机通讯哦。。楼主这么好,我肯定要谢谢您的分享。
举报

houjue

2016-11-29 20:25:12
引用: sustmol 发表于 2016-11-29 19:43
有的,在附件中

好的,知道了。谢谢!
举报

王栋春

2016-11-29 20:25:25
搞的不错呀   这个和立体的光立方有些差距呀楼主可以看看这个帖子http://www.ndiy.cn/thread-31824-1-1.html
举报

闫东超

2016-11-29 21:31:24
还可以做贪吃蛇
举报

王友让

2016-11-30 11:35:28
这个好,值得好好学习,学习分享。
举报

sustmol

2016-11-30 13:06:59
引用: 上官梦舞 发表于 2016-11-29 20:12
这个主要是做效果和算法,练习练习都是很不错的,还可以练练上位机通讯哦。。楼主这么好,我肯定要谢谢您的分享。

谢谢
举报

sustmol

2016-11-30 13:08:03
引用: 王栋春 发表于 2016-11-29 20:25
搞的不错呀   这个和立体的光立方有些差距呀楼主可以看看这个帖子http://www.ndiy.cn/thread-31824-1-1.html

嗯嗯,毕竟这个只是点阵,你分享的那个很好,学习了。
举报

sustmol

2016-11-30 13:09:01
引用: YDC 发表于 2016-11-29 21:31
还可以做贪吃蛇

嗯呢,可以尝试下
举报

sustmol

2016-11-30 13:09:35
引用: 805570 发表于 2016-11-30 11:35
这个好,值得好好学习,学习分享。

相互学习
举报

王友让

2016-11-30 13:45:44

。。。。。
举报

王栋春

2016-11-30 19:52:07
引用: sustmol 发表于 2016-11-30 13:08
嗯嗯,毕竟这个只是点阵,你分享的那个很好,学习了。

其实我也不会的  只是感觉楼主可以借鉴一下别人的经验
举报

h1654155956.5608

2016-11-30 23:05:56
花了不少精力。
举报

sustmol

2016-12-1 15:37:51
引用: 王栋春 发表于 2016-11-30 19:52
其实我也不会的  只是感觉楼主可以借鉴一下别人的经验

嗯嗯,有学习
举报

更多回帖

发帖
×
20
完善资料,
赚取积分