找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的计时器程序

[复制链接]
跳转到指定楼层
楼主
ID:929149 发表于 2021-6-22 07:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序拥有暂停,复位和自己设置时间的功能
  1. #include "reg52.h"

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. sbit LSA=P2^2;
  5. sbit LSB=P2^3;
  6. sbit LSC=P2^4;
  7. sbit k1=P3^0;
  8. sbit k2=P3^1;
  9. sbit k3=P3^2;
  10. sbit k4=P3^3;
  11. sbit k5=P3^4;
  12. sbit k6=P3^5;
  13. sbit k7=P3^6;
  14. sbit k8=P3^7;
  15. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  16.                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  17. u8 ssec,sec,min,hour;
  18. u8 DisplayData[8];

  19. void delay(u16 i)
  20. {
  21.     while(i--);
  22. }


  23. void Timer0Init()
  24. {
  25.     TMOD=0X01;
  26.     TH0=0Xd8;
  27.     TL0=0Xf0;   
  28.     TR0=1;
  29. }



  30. void DigDisplay()
  31. {
  32.     u8 i;
  33.     for(i=0;i<8;i++)
  34.     {
  35.         switch(i)
  36.         {
  37.             case(0):
  38.                 LSA=1;LSB=1;LSC=1; break;
  39.             case(1):
  40.                 LSA=0;LSB=1;LSC=1; break;
  41.             case(2):
  42.                 LSA=1;LSB=0;LSC=1; break;
  43.             case(3):
  44.                 LSA=0;LSB=0;LSC=1; break;
  45.             case(4):
  46.                 LSA=1;LSB=1;LSC=0; break;
  47.             case(5):
  48.                 LSA=0;LSB=1;LSC=0; break;
  49.             case(6):
  50.                 LSA=1;LSB=0;LSC=0; break;
  51.             case(7):
  52.                 LSA=0;LSB=0;LSC=0; break;
  53.         }
  54.         P1=DisplayData[i];
  55.         delay(100);
  56.         P1=0x00;
  57.     }
  58. }

  59. void datapros()
  60. {
  61.     DisplayData[0]=smgduan[hour/10];
  62.     DisplayData[1]=smgduan[hour%10];
  63.     DisplayData[2]=0x40;   
  64.     DisplayData[3]=smgduan[min/10];
  65.     DisplayData[4]=smgduan[min%10];
  66.     DisplayData[5]=0x40;   
  67.     DisplayData[6]=smgduan[sec/10];
  68.     DisplayData[7]=smgduan[sec%10];
  69. }


  70. void keypros1()
  71. {
  72.     if(k1==0)
  73.     {   
  74.         delay(1000);
  75.         if(k1==0)
  76.         {
  77.             TR0=~TR0;
  78.         }
  79.         while(!k1);
  80.     }      
  81. }


  82. void keypros2()
  83. {
  84.     if(k2==0)
  85.     {   
  86.         delay(1000);
  87.         if(k2==0)
  88.         {
  89.             ssec=0;sec=0;min=0;hour=0;
  90.         }
  91.         while(!k2);
  92.     }      
  93. }

  94. void keypros3()
  95. {
  96.     if(k3==0)
  97.     {   
  98.         delay(1000);
  99.         if(k3==0)
  100.         {
  101.             sec=sec+1;
  102.         }
  103.         while(!k3);
  104.     }      
  105. }


  106. void keypros4()
  107. {
  108.     if(k4==0)
  109.     {   
  110.         delay(1000);
  111.         if(k4==0)
  112.         {
  113.             sec=sec-1;;
  114.         }
  115.         while(!k4);
  116.     }      
  117. }
  118. void keypros5()
  119. {
  120.     if(k5==0)
  121.     {   
  122.         delay(1000);
  123.         if(k5==0)
  124.         {
  125.             min=min+1;;
  126.         }
  127.         while(!k5);
  128.     }      
  129. }
  130. void keypros6()
  131. {
  132.     if(k6==0)
  133.     {   
  134.         delay(1000);
  135.         if(k6==0)
  136.         {
  137.             min=min-1;;
  138.         }
  139.         while(!k6);
  140.     }      
  141. }
  142. void keypros7()
  143. {
  144.     if(k7==0)
  145.     {   
  146.         delay(1000);
  147.         if(k7==0)
  148.         {
  149.             hour=hour+1;;
  150.         }
  151.         while(!k7);
  152.     }      
  153. }
  154. void keypros8()
  155. {
  156.     if(k8==0)
  157.     {   
  158.         delay(1000);
  159.         if(k8==0)
  160.         {
  161.             hour=hour-1;;
  162.         }
  163.         while(!k8);
  164.     }      
  165. }




  166. void main()
  167. {   
  168.     Timer0Init();
  169.     while(1)
  170.     {
  171.         keypros1();
  172.         keypros2();
  173.         keypros3();
  174.         keypros4();
  175.         keypros5();
  176.         keypros6();
  177.         keypros7();
  178.         keypros8();
  179.         if(TF0==1)
  180.         {
  181.             TF0=0;
  182.             TH0=0Xd8;
  183.             TL0=0Xf0;
  184.             ssec++;
  185.             if(ssec>=100)
  186.             {
  187.                 ssec=0;
  188.                 sec++;
  189.                 if(sec>=60)
  190.                 {
  191.                     sec=0;
  192.                     min++;
  193.                     if(min>=60)
  194.                     {
  195.                         min=0;
  196.                         hour++;
  197.                         if(hour>=24)
  198.                         {hour=0;}
  199.                     }
  200.                 }   
  201.             }   
  202.         }   
  203.         datapros();
  204.         DigDisplay();   
  205.     }      
  206. }
复制代码




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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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