找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2577|回复: 0
上一主题 下一主题
收起左侧

51单片机24小时时钟显示

[复制链接]
跳转到指定楼层
楼主
ID:567207 发表于 2019-6-19 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我做的单片机时钟
附件里包含了单片机源代码和proteus仿真图
请多指教
  1. #include <reg51.h>
  2. #include <absacc.h>
  3. #include <intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define PA XBYTE[0X0000]
  7. #define PB XBYTE[0X0001]
  8. #define PC XBYTE[0X0002]
  9. #define COM XBYTE[0X0003]
  10. #define count 50000
  11. #define th_m1 (65536-count) /256
  12. #define tl_m1 (65536-count) %256
  13. uint intcount=0;
  14. uint intcount1=0;
  15. code uchar SEG_CODE []={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};
  16. uchar DSY_CODE2 []=     {0xf9, 0xa4, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,} ;
  17. uchar hour,minute,second;
  18. uchar hour1,hour0,minute1 ,minute0,second1,second0;
  19. uchar Disp_Buf[8],buffer=0xfe,ii=0;//=(1, 7,10,1,2,10,1,2);
  20. void wei_fenli();//分离各位值
  21. void delay_ms(uint x)
  22. {
  23. uchar t;
  24. while(x--)
  25. for(t=0;t<120;t++);
  26. }     
  27. void main ()
  28. {
  29.         uchar i;
  30.         COM = 0x80;
  31.         IE=0x8f;
  32.         IP=0x05;
  33.         IT0=1;
  34.         IT1=1;
  35.         TMOD=0x11;
  36.         TH0=th_m1;
  37.         TL0=tl_m1;
  38.         TR0=1;
  39.         TH1=th_m1;
  40.         TL1=tl_m1;
  41.         TR1=1;
  42.         hour=8;
  43.         minute=2;
  44.         second=54;
  45.         while (1)
  46.         {
  47.                 for (i = 0;i<8;i++)
  48.                 {
  49.                         wei_fenli();
  50.                         PA=0xFF;
  51.                         PB=1<<i;
  52.                         Disp_Buf[2]=10;
  53.                         Disp_Buf[5]=10;
  54.                         PA=SEG_CODE[Disp_Buf[i]] ;
  55.                         delay_ms(4);

  56.                 }
  57.                 PC=buffer;
  58.         }
  59. }
  60. void timerO(void) interrupt 1 using 1       
  61. {
  62.         TH0=th_m1;
  63.         TL0=tl_m1;
  64.         if (++intcount==20)
  65.         {
  66.                 intcount=0;
  67.                 second++;
  68.         }
  69. }
  70. void timer1 (void)  interrupt 3 using 2
  71. {
  72.         TH1=th_m1;
  73.         TL1=tl_m1;
  74.         if(++intcount1==10)
  75.         {
  76.                 intcount1=0;
  77.                 ii+=1;
  78.                 /*  buffer=(buffer< <1)Ox01;
  79.                  if (ii>8)
  80.                 {
  81.                 ii=O;
  82.                 buffer=Oxfe;
  83.                 }*/
  84.                 buffer=_crol_(buffer,1);
  85.                 if (ii>8)
  86.                 {
  87.                         ii=0;
  88.                         buffer=0xfe;
  89.                 }
  90.         }
  91. }
  92. void wei_fenli ()
  93. {
  94.         if ( second>59)
  95.         {
  96.                 second=0;
  97.                 minute+=1;
  98.                 if (minute>59)
  99.                 {
  100.                         minute=0;
  101.                         hour+=1;
  102.                         if (hour>23)
  103.                         {
  104.                                 hour=0;
  105.                         }
  106.                 }
  107.         }
  108.         hour1=hour/10;
  109.         hour0=hour%10;
  110.         minute1=minute/10;
  111.         minute0=minute%10;
  112.         second1= second/10;
  113.         second0= second%10;

  114.         Disp_Buf[0]=hour1;
  115.         Disp_Buf[1]=hour0;
  116.         Disp_Buf[3]=minute1;
  117.         Disp_Buf[4]=minute0;
  118.         Disp_Buf[6]=second1;
  119.         Disp_Buf[7]=second0;
  120. }
  121. void my_int0(void) interrupt 0
  122. {
  123.    uchar j;
  124.    delay_ms (1000) ;
  125.    TR0=0;
  126.    j=hour;
  127.    j=(j<23)?j+1:0;
  128.    hour=j;
  129.    TR0=1;
  130. }

  131. void my_int1 (void) interrupt 2
  132. {
  133.    uchar k;
  134.    delay_ms(1000);
  135.    TR0=0;
  136.    k=minute;
  137.    k=(k<59) ?k+1:0;
  138.    minute=k;
  139.    TR0=1 ;
  140. }
复制代码


时钟000.zip

24.3 KB, 下载次数: 20, 下载积分: 黑币 -5

仿真

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

使用道具 举报

沙发
ID:229550 发表于 2019-8-26 17:00
附件里面哪里有源码?扣了的分可以还给我吗?

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

本版积分规则

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

Powered by 单片机教程网

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