找回密码
 立即注册

QQ登录

只需一步,快速开始

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

我的单片机数字钟程序设计,含源码

[复制链接]
跳转到指定楼层
楼主
ID:1036674 发表于 2022-6-23 21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我上个月做的数字钟程序,可以调整时间,用了一个星期的时间附件里面包含数字钟的源代码
都是自己原创的请多多指教。
  1. #include <REGX52.H>
  2. #define Fosc                11059200L
  3. #define INT_PERIOD        50
  4. #define OverFreq        (1000/INT_PERIOD)
  5. #define ClockPeriod (0x10000-Fosc/12/OverFreq)
  6. unsigned char code DispSeg[]={       
  7.         //D7 D6 D5 D4 D3 D2 D1 D0==>dp g f e d c b a
  8.         0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,
  9.         0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
  10.         0x00
  11. };
  12. struct TIME{
  13.         unsigned char hour;
  14.         unsigned char minute;
  15.         unsigned char second;
  16.         unsigned char ms;
  17. }Time;
  18. bit flag = 0;
  19. bit twinkle = 0;
  20. bit KeyChecked;
  21. bit WatchRunning;
  22. sbit K1 = P2^0;
  23. sbit Keyin = P2^1;
  24. unsigned char cnt = 0;
  25. unsigned char timer0_cnt = 0;
  26. unsigned char DispBuffer[6];
  27. void Delay(unsigned int xms)       
  28. {
  29.         unsigned char i, j;
  30.         while(xms--){
  31.                 i = 2;
  32.                 j = 199;
  33.                 do
  34.                 {
  35.                         while (--j);
  36.                 } while (--i);
  37.         }
  38. }
  39. void Translate( void )
  40. {
  41.         DispBuffer[0] = Time.hour/10;
  42.         DispBuffer[1] = Time.hour%10;
  43.         DispBuffer[2] = Time.minute/10;
  44.         DispBuffer[3] = Time.minute%10;
  45.         DispBuffer[4] = Time.second/10;
  46.         DispBuffer[5] = Time.second%10;
  47. }
  48. void timer0_init(void)
  49. {
  50.         TMOD &= 0xF0;
  51.         TMOD |= 0x01;
  52.         TH0 = ClockPeriod >> 8;
  53.         TL0 = ClockPeriod & 0xFF;
  54.         ET0 = 1;
  55.         EA = 1;
  56.         TR0 = 1;
  57. }
  58. void timer1_init(void)
  59. {
  60.         TMOD &= 0xF0;
  61.         TMOD |= 0x10;
  62.         TH1 = ClockPeriod >> 8;
  63.         TL1 = ClockPeriod & 0xFF;
  64.         ET1 = 1;
  65.         EA = 1;
  66.         TR1 = 1;
  67. }
  68. void InitCounter( void )
  69. {
  70.         Time.hour = 0;
  71.         Time.minute = 0;
  72.         Time.second = 0;
  73.         WatchRunning = 0;
  74. }
  75. void system_init(void)
  76. {
  77.         InitCounter();
  78.         timer0_init();
  79.         timer1_init();
  80. }
  81. void Display( void )
  82. {
  83.         unsigned char i=0x80;
  84.         unsigned char *ptr=DispBuffer;
  85.         Translate();
  86.         if(!flag)
  87.         {
  88.                 while(i!=0x02)
  89.                 {
  90.                         P0=DispSeg[*ptr++];       
  91.                         P1 = i;               
  92.                         Delay(1);       
  93.                         i=i>>1;       
  94.                 }
  95.         }
  96.         else if(flag)
  97.         {
  98.                 if((cnt%4)==1)
  99.                 {
  100.                         while(i!=0x08)
  101.                         {
  102.                                 P0=DispSeg[*ptr++];       
  103.                                 P1 = i;               
  104.                                 Delay(1);       
  105.                                 i=i>>1;       
  106.                         }
  107.                 }
  108.                 else if((cnt%4)==2)
  109.                 {
  110.                         while(i!=0x02)
  111.                         {
  112.                                 if((i==0x20)||(i==0x10))
  113.                                 {
  114.                                         P0 = 0x00;
  115.                                         ptr++;
  116.                                         P1 = i;               
  117.                                         Delay(1);       
  118.                                         i=i>>1;       
  119.                                 }else{
  120.                                         P0=DispSeg[*ptr++];       
  121.                                         P1 = i;               
  122.                                         Delay(1);       
  123.                                         i=i>>1;       
  124.                                 }       
  125.                         }
  126.                 }
  127.                 else if((cnt%4)==3)
  128.                 {
  129.                         while(i!=0x02)
  130.                         {
  131.                                 if((i==0x80)||(i==0x40))
  132.                                 {
  133.                                         P0 = 0x00;
  134.                                         ptr++;
  135.                                         P1 = i;       
  136.                                         Delay(1);       
  137.                                         i=i>>1;       
  138.                                 }else{
  139.                                         P0=DispSeg[*ptr++];       
  140.                                         P1 = i;               
  141.                                         Delay(1);       
  142.                                         i=i>>1;       
  143.                                 }
  144.                         }
  145.                 }
  146.                 else if((cnt%4)==0)
  147.                 {
  148.                         twinkle = 0;
  149.                         while(i!=0x02)
  150.                         {
  151.                                 P0=DispSeg[*ptr++];       
  152.                                 P1 = i;               
  153.                                 Delay(1);       
  154.                                 i=i>>1;       
  155.                         }
  156.                 }
  157.         }
  158. }
  159. void KeyProcess( void )
  160. {
  161.         if(Keyin == 0)
  162.         {
  163.                 Display();
  164.                 if(Keyin == 0)
  165.                 {
  166.                         if((cnt%4)==1)
  167.                         {
  168.                                 Time.second ++;
  169.                                 if(Time.second == 60) Time.second = 0;
  170.                         }
  171.                         else if((cnt%4)==2)
  172.                         {
  173.                                 Time.minute ++;
  174.                                 if(Time.minute == 60) Time.minute = 0;
  175.                         }
  176.                         else if((cnt%4)==3)
  177.                         {
  178.                                 Time.hour ++;
  179.                                 if(Time.hour == 60) Time.hour = 0;
  180.                         }
  181.                         while(Keyin == 0) Display();
  182.                 }
  183.         }
  184. }
  185. void key_pre(void)
  186. {
  187.         if(K1==0)
  188.         {
  189.                 Display();
  190.                 if(K1==0)
  191.                 {
  192.                         cnt++;
  193.                         twinkle = 1;
  194.                         while(K1==0)
  195.                         {
  196.                                 Display();
  197.                         }
  198.                 }
  199.         }
  200. }

  201. void main( void )
  202. {
  203.         system_init();
  204.         while(1)
  205.         {
  206.                 key_pre();
  207.                 KeyProcess();
  208.                 Display();
  209.         }
  210. }
  211. void Time1Interrupt( void ) interrupt 3       
  212. {
  213.         TH0 = ClockPeriod >> 8;
  214.         TL0 += ClockPeriod & 0xFF;
  215.         Time.ms ++;
  216.         if( Time.ms == 20 )
  217.         {
  218.                 Time.ms = 0;       
  219.                 Time.second ++;
  220.                 if( Time.second == 60 )
  221.                 {
  222.                         Time.second = 0;
  223.                         Time.minute ++;
  224.                         if( Time.minute == 60 )
  225.                         {
  226.                                 Time.minute = 0;
  227.                                 Time.hour ++;
  228.                         }
  229.                 }
  230.         }
  231. }
  232. void Time0Interrupt( void ) interrupt 1
  233. {
  234.         timer0_cnt++;
  235.         TH0 = ClockPeriod >> 8;
  236.         TL0 = ClockPeriod & 0xFF;
  237.         if(timer0_cnt==100)
  238.         {
  239.                 if(twinkle)
  240.                 {
  241.                         flag = !flag;
  242.                 }
  243.                 timer0_cnt = 0;
  244.         }
  245. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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