找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10817|回复: 17
打印 上一主题 下一主题
收起左侧

结构简单的单片机控制8×16点阵时钟制作

  [复制链接]
跳转到指定楼层
楼主
ID:76686 发表于 2015-4-11 19:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     这款结构简单的单片机控制8×16点阵时钟是在网上看到的,由于结构简单,制作容易,感觉对初学者比较有用,所以就收集到我的空间,原作者用洞洞板制作了这块点阵时钟,用的是两块88点阵制作做,可以显示时间及一些简单的祝福语,实物中是用三极管做的驱动,P2,P0,P1直接驱动显示,相关资料及C程序、电路图比较齐全,需要的请自己下载附件。

    附件: 结构简单的单片机控制8×16点阵时钟.zip (667.48 KB, 下载次数: 129)


源码:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar fen,shi,miao,miao1,fen1,fen2,shi1,shi2,count,tt;

  5. uchar code  mm[]={0x14,0x00,};//秒点数组

  6. uchar code  TAB[]=
  7. {
  8. 0x7F,0x41,0x7F,0x00,//0
  9. 0x42,0x7F,0x40,0x00,//1
  10. 0x79,0x49,0x4F,0x00,//2
  11. 0x49,0x49,0x7F,0x00,//3
  12. 0x0F,0x08,0x7F,0x00,//4
  13. 0x4F,0x49,0x79,0x00,//5
  14. 0x7F,0x49,0x79,0x00,//6
  15. 0x01,0x01,0x7F,0x00,//7
  16. 0x7F,0x49,0x7F,0x00,//8
  17. 0x4F,0x49,0x7F,0x00,//9
  18. };//数字组

  19. uchar code lie[]=
  20. {
  21. 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
  22. 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
  23. 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
  24. }; //列扫描

  25. uchar code  TAB2[]={
  26. /*--  空白区 --*/
  27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

  28. /*--  文字:  李  --*/
  29. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  30. 0x00,0x80,0x00,0x80,0x3F,0xFE,0x01,0xC0,0x02,0xA0,0x0C,0x90,0x70,0x8C,0x27,0xFB,
  31. 0x01,0x00,0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,

  32. /*--  文字:  斯  --*/
  33. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  34. 0x30,0x44,0x0E,0x44,0x02,0xFF,0x02,0x44,0x02,0x7C,0x7E,0x44,0x12,0x44,0x12,0x7C,
  35. 0x12,0x44,0x12,0x44,0x12,0xFF,0x12,0x00,0x11,0x24,0x11,0x46,0x10,0xC1,0x10,0x00,

  36. /*--  文字:  羽  --*/
  37. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  38. 0x00,0x00,0x3F,0x7E,0x20,0x40,0x20,0x40,0x22,0x44,0x24,0x48,0x24,0x48,0x20,0x60,
  39. 0x28,0x50,0x24,0x48,0x23,0x46,0x20,0x40,0x20,0x40,0x20,0x40,0x28,0x50,0x10,0x20,

  40. /*--  文字:  小  --*/
  41. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  42. 0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x90,0x04,0xB0,0x08,0x98,0x18,0x88,
  43. 0x30,0x84,0x60,0x82,0x20,0x81,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xA0,0x00,0x40,

  44. /*--  文字:  宝  --*/
  45. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  46. 0x00,0x40,0x00,0x80,0x7F,0xFE,0x20,0x02,0x10,0x01,0x1F,0xFC,0x00,0x80,0x00,0x80,
  47. 0x00,0x80,0x1F,0xF8,0x02,0x80,0x04,0x80,0x0C,0x80,0x04,0x80,0x7F,0xFE,0x00,0x00,

  48. /*--  文字:  贝  --*/
  49. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  50. 0x00,0x00,0x0F,0xF8,0x08,0x08,0x08,0x08,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,
  51. 0x08,0x88,0x08,0x88,0x08,0x88,0x01,0x40,0x06,0x20,0x18,0x18,0x10,0x06,0x00,0x00,

  52. /*--  文字:  我  --*/
  53. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  54. 0x02,0x60,0x0A,0x1C,0x12,0x10,0x12,0x10,0x02,0x10,0x7F,0xFF,0x02,0x10,0x12,0x10,
  55. 0x14,0x70,0x0C,0x1C,0x04,0x13,0x0A,0x10,0x49,0x90,0x50,0x10,0x60,0x14,0x40,0x08,

  56. /*--  文字:  爱  --*/
  57. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  58. 0x1F,0x00,0x09,0xFC,0x08,0x48,0x04,0x90,0x7F,0xFC,0x40,0x44,0x00,0x42,0x3F,0xFC,
  59. 0x00,0x20,0x0F,0xE0,0x04,0x30,0x02,0xD0,0x03,0x08,0x0C,0xC6,0x70,0x31,0x20,0x0C,

  60. /*--  文字:  你  --*/
  61. /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  62. 0x00,0x90,0x01,0x90,0x20,0x88,0x7F,0xC8,0x20,0x44,0x12,0x2C,0x02,0x16,0x0A,0x45,
  63. 0x12,0xC4,0x12,0x44,0x22,0x24,0x62,0x24,0x22,0x14,0x02,0x84,0x01,0x04,0x00,0x00,



  64. /*--  空白区 --*/
  65. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  66. };

  67. uchar code  lie2[]={
  68. 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
  69. };

  70. /******************
  71.     延时程序
  72. *****************/
  73. void delay(uint k)
  74. {
  75.         uint i,j;
  76.         for(i=k;i>0;i--)
  77.                 for(j=110;j>0;j--);
  78. }

  79. /******************
  80.     显示程序
  81. *****************/
  82. void disp8_1(uchar m)  
  83. {
  84.         uint e;
  85.         for(e=0;e<4;e++)
  86.         {
  87.                 P0=lie[e];
  88.                 P1=lie[e+8];
  89.                 P2=TAB[m*4+e];
  90.                 delay(1);
  91.                 P2=0x00;  //消影
  92.         }
  93. }

  94. void disp8_2(uchar n)
  95. {
  96.         uint f;
  97.         for(f=0;f<4;f++)
  98.         {
  99.                 P0=lie[f+4];
  100.                 P1=lie[f+8+4];
  101.                 P2=TAB[n*4+f];
  102.                 delay(1);
  103.                 P2=0x00;  //消影  
  104.         }
  105.        
  106. }


  107. void disp8_3(uchar o)
  108. {
  109.         uint g;
  110.         for(g=0;g<4;g++)
  111.         {
  112.                 P0=lie[g+9];
  113.                 P1=lie[g+8+9];
  114.                 P2=TAB[o*4+g];
  115.                 delay(1);
  116.                 P2=0x00;  //消影  
  117.         }
  118. }

  119. void disp8_4(uchar p)
  120. {
  121.         uint h;
  122.         for(h=0;h<4;h++)
  123.         {
  124.                 P0=lie[h+13];
  125.                 P1=lie[h+8+13];
  126.                 P2=TAB[p*4+h];
  127.                 delay(1);
  128.                 P2=0x00;  //消影  
  129.         }
  130.        
  131. }

  132. void disp8_5(uchar q)
  133. {
  134.         uint h;
  135.         for(h=0;h<2;h++)
  136.         {
  137.                 P0=lie[h+7];
  138.                 P1=lie[h+7+8];
  139.                 P2=mm[q]; //秒点
  140.                 delay(1);
  141.                 P2=0x00;  //消影  
  142.         }
  143.        
  144. }

  145. void disp_wz()
  146. {
  147.         uint a,b,c;
  148.     P2=0x01;
  149.         for(a=0;a<152;a++) //扫描全幅
  150.         {
  151.                 for(b=0;b<8;b++)  //移动速度
  152.                 {
  153.                         for(c=0;c<8;c++)  //扫描1帧
  154.                                 {
  155.                                         P2=lie2[c];
  156.                                         P1=~TAB2[2*c+2*a];
  157.                                         P0=~TAB2[2*c+1+2*a];
  158.                                         delay(1);
  159.                                         P1=0xff;  //消影
  160.                                         P0=0xff;  //消影
  161.                                 }
  162.                 }
  163.         }
  164.         tt=0;//开始显示时钟        
  165. }

  166. /******************
  167.     初始化程序
  168. *****************/
  169. inti()
  170. {
  171.         tt=0;

  172.         shi=1;
  173.         fen=3;
  174.         miao=0;
  175.         miao1=0;
  176.        
  177.         shi1=shi/10;//分离时
  178.         shi2=shi%10;
  179.         fen1=fen/10;//分离分  
  180.         fen2=fen%10;
  181.        
  182.         P1=0xff;
  183.         TMOD=0x01;
  184.         TH0=(65536-45872)/256;
  185.         TL0=(65536-45872)%256;
  186.         EA=1;
  187.         ET0=1;
  188.         TR0=1;
  189. }

  190. /******************
  191.      主程序
  192. *****************/
  193. void main()
  194. {
  195.         inti();
  196.         while(1)
  197.         {
  198.                 if(tt<=20)
  199.                         {
  200.                                 disp8_1(shi2);//显示小时
  201.                                 disp8_2(shi1);//显示小时
  202.                                 disp8_3(fen2);//显示分钟  
  203.                                 disp8_4(fen1);//显示分钟
  204.                                 disp8_5(miao);//秒点显示
  205.                         }
  206.                 else
  207.                         {
  208.                                 disp_wz();
  209.                         }
  210.         }
  211. }

  212. /******************
  213.      中断程序
  214. *****************/
  215. void timer0() interrupt 1
  216. {       
  217.         shi1=shi%10;//分离时
  218.         shi2=shi/10;
  219.         fen1=fen%10;//分离分
  220.         fen2=fen/10;

  221.         TH0=(65536-45872)/256;
  222.         TL0=(65536-45872)%256;
  223.         count++;       
  224.         if(count==10)
  225.         {
  226.                 count=0;
  227.                 tt++;
  228.                 miao++;
  229.                 miao1++;
  230.                 if(miao==2){miao=0;}
  231.                 if(miao1==120)
  232.                 {
  233.                         miao1=0;
  234.                         fen++;
  235.                         if(fen==60)
  236.                         {
  237.                         fen=0;
  238.                         shi++;
  239.                         if(shi==24){shi=0;}
  240.                         }
  241.                                
  242.                 }
  243.         }
  244. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:68477 发表于 2015-4-12 14:30 | 只看该作者
这个真心需要的
回复

使用道具 举报

板凳
ID:79034 发表于 2015-5-17 19:42 | 只看该作者
适合我这样的新手,为什么顶帖的这么少呢?
入门就要学这样的。。。。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:79034 发表于 2015-5-17 19:54 | 只看该作者
想请教一下:
P2才是LED的阳极,上拉电阻在P0。
回复

使用道具 举报

5#
ID:80278 发表于 2015-5-17 20:00 | 只看该作者
学习了 单片机还是挺好玩的
回复

使用道具 举报

6#
ID:74992 发表于 2015-5-19 19:38 | 只看该作者
支持楼主,下了学习下!
回复

使用道具 举报

7#
ID:95809 发表于 2015-12-29 22:16 | 只看该作者
请问楼主,怎么调节时间?没看见按钮啊。
回复

使用道具 举报

8#
ID:86505 发表于 2016-1-15 16:06 | 只看该作者
我准备直接不用点阵,用led直接共阴连接排好然后做时钟,看看效果怎么样
回复

使用道具 举报

9#
ID:146571 发表于 2016-11-7 11:16 | 只看该作者

没有按键调时间啊。。
回复

使用道具 举报

10#
ID:146571 发表于 2016-11-7 11:17 | 只看该作者
为什么没有调时间的功能?
回复

使用道具 举报

11#
ID:146409 发表于 2016-11-9 08:16 | 只看该作者
谢谢分享
回复

使用道具 举报

12#
ID:147195 发表于 2016-11-11 09:21 | 只看该作者
问楼主一个初级问题,这个代码复制了以后怎么使用,怎么生成hex文件?只会用hex文件刷入STC单片机,AT51系列到现在还不会刷程序真心不懂,望楼主和其他朋友能解答
回复

使用道具 举报

13#
ID:145534 发表于 2016-11-17 18:39 | 只看该作者
支持,很适合初学者学习,多实践
回复

使用道具 举报

14#
ID:183551 发表于 2017-3-26 16:14 | 只看该作者

支持,很适合初学者学习,多实践
回复

使用道具 举报

15#
ID:208443 发表于 2017-7-24 16:28 | 只看该作者
学习了 打算做一个
回复

使用道具 举报

16#
ID:243884 发表于 2017-11-29 10:47 来自手机 | 只看该作者
好,谢谢楼主经验分享
回复

使用道具 举报

17#
ID:243884 发表于 2017-11-30 22:59 来自手机 | 只看该作者
学习学习
回复

使用道具 举报

18#
ID:554793 发表于 2019-9-7 21:23 | 只看该作者
这程序是16*16的啊,,这8*16的看不出来
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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