找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4670|回复: 7
收起左侧

单片机电子时钟和led流水灯的结合(仿真+程序)

  [复制链接]
ID:404878 发表于 2018-12-12 13:42 | 显示全部楼层 |阅读模式
这是一个基于定时器的电子时钟,以前总是觉得数码管和LED挺简单的,谁知道组合起来还是有些困难的,但还是一一的解决了程序中的bug,新手也可以借鉴一下,感觉还挺有趣的。如果发现程序中有什么bug可以回帖相互探讨一下。共同学习,共同进步。
(程序和仿真都在附件的压缩包中,需要的可以下载一下。)

电路仿真图

电路仿真图


单片机源程序如下:
  1. #include<reg52.H>
  2. #include<intrins.H>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf};                                   //花样1
  6. uchar code huayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,0xef,0xfb,0xdf,0xfd,0xbf,0xfe};                                   //花样2
  7. uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};           //花样3
  8. uchar code huayang4[]={0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0};                                                                                           //花样4
  9. uchar code Segcode[13]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf, 0xC7};
  10. uchar Dispbut[8]={10,10,10,10,10,10,10,10};         
  11. uchar Bitselect[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  12. uchar Displayer[8]={0x00};
  13. uint i,a,b;
  14. sbit DU=P2^0;
  15. sbit WE=P2^1;
  16. #define          Led_rod_DU    11       
  17. uchar Sec=0,Min=30,Hour=12;
  18. void Display(void)
  19. {
  20.         static uchar Num=0;
  21.         DU=1;
  22.         P0=0xff;
  23.            DU=0;
  24.        
  25.         WE=1;
  26.         P0=Bitselect[Num];
  27.         WE=0;

  28.         DU=1;
  29.         P0=Segcode[Dispbut[Num]];
  30.         DU=0;
  31.        
  32.         Num++;
  33.         if(Num>=8)
  34.                 Num=0;
  35. }


  36. void Timer0_int()interrupt 1
  37. {
  38.         TH0=(65536-5000)/256;                                                            
  39.         TL0=(65536-5000)%256;
  40.         Display();
  41. }
  42. void Timer1_int()interrupt 3
  43. {
  44.         static uint Timer1_Count=0;
  45.         TH1=(65536-50000)/256;                                                            
  46.         TL1=(65536-50000)%256;
  47.         Timer1_Count++;
  48.         if(Timer1_Count>=20)
  49.         {
  50.                 Timer1_Count=0;
  51.                 Sec++;
  52.                 if(Sec>59)
  53.                 {
  54.                         Sec=0;
  55.                         Min++;
  56.                         if(Min>59)
  57.                         {
  58.                                 Min=0;
  59.                                 Hour++;
  60.                                 if(Hour>23)
  61.                                         Hour=0;
  62.                         }
  63.                 }
  64.                 Dispbut[0]=Hour/10;
  65.                 Dispbut[1]=Hour%10;
  66.                 Dispbut[2]=Led_rod_DU;
  67.                 Dispbut[3]=Min/10;
  68.                 Dispbut[4]=Min%10;
  69.                 Dispbut[5]=Led_rod_DU;
  70.                 Dispbut[6]=Sec/10;
  71.                 Dispbut[7]=Sec%10;       
  72.         }
  73. }
  74. void delay(uint i)
  75. {
  76.   while(i--)
  77.    for(b=0;b<100;b++)
  78.    ;
  79. }

  80. void liushui()
  81. {
  82.   a=0xfe;
  83.   for(i=0;i<8;i++)
  84.   {
  85.     P1=a;
  86.         a=_crol_(a,1);
  87.         delay(200);
  88.   }
  89.   a=0xfc;
  90.   for(i=0;i<8;i++)
  91.   {
  92.     P1=a;
  93.         a=_crol_(a,1);
  94.         delay(200);
  95.   }                       
  96.   for(i=0;i<14;i++)
  97.   {
  98.     P1=huayang1[i];
  99.         delay(200);
  100.   }
  101.   for(i=0;i<14;i++)
  102.   {
  103.     P1=huayang2[i];
  104.         delay(200);
  105.   }
  106.   for(i=0;i<14;i++)
  107.   {
  108.     P1=huayang3[i];
  109.         delay(200);
  110.   }
  111.   for(i=0;i<14;i++)
  112.   {
  113.     P1=huayang4[i];
  114.         delay(200);
  115.   }
  116. }
  117. ……………………

  118. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1.zip (66.3 KB, 下载次数: 72)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:404878 发表于 2018-12-12 13:44 | 显示全部楼层
有问题欢迎在下方留言啊。共同学习下。
回复

使用道具 举报

ID:456926 发表于 2019-1-8 22:05 | 显示全部楼层
怎么更改时间呢
回复

使用道具 举报

ID:505337 发表于 2019-4-7 23:07 来自手机 | 显示全部楼层
看程序应该是第17行,uchar Sec=0,Min=30,Hour=12;这一句来更改时间吧,你可以试试

评分

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

查看全部评分

回复

使用道具 举报

ID:654612 发表于 2019-12-2 20:21 | 显示全部楼层
还有代码吗
回复

使用道具 举报

ID:441155 发表于 2019-12-4 21:21 来自手机 | 显示全部楼层
谢谢分享,学习一下。
回复

使用道具 举报

ID:677500 发表于 2019-12-30 14:44 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:697664 发表于 2020-2-24 21:31 | 显示全部楼层
很不错的教程
回复

使用道具 举报

ID:686739 发表于 2020-2-25 11:28 来自手机 | 显示全部楼层
谢谢,小白的我学习了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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