找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机时钟数码管显示按键可调程序+原理图

[复制链接]
跳转到指定楼层
楼主
电路原理图如下:

单片机源程序如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit s_set=P1^0;
  5. sbit m_set=P1^1;
  6. sbit h_set=P1^2;
  7. sbit reset=P1^3;
  8. sbit led=P3^2;
  9. unsigned char second,minute,hour,tcnt,restar=0;
  10. uchar code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  11. uchar code table[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39,0x00};
  12. uchar dispbuf[8];

  13. void delay(unsigned int us)
  14. {
  15. while(us--);
  16. }
  17. void scandisp()
  18. {
  19. unsigned char i,value;
  20. for(i=0;i<8;i++)
  21. {
  22.   P2=0xff;
  23.   value=table[dispbuf[i]];
  24.   P0=value;
  25.   P2=scan[i];
  26.   delay(50);
  27. }
  28. }

  29. void Timer0(void)interrupt 1 using 1
  30. {
  31. TH0=(65536-50000)/256;
  32. TL0=(65536-50000)%256;
  33. tcnt++;
  34.   if(tcnt==20)
  35.   {            
  36.     second++;
  37.               tcnt=0;
  38.               if(second==60)
  39.               {
  40.               minute++;
  41.               second=0;
  42.               if(minute==60)
  43.               {
  44.                  hour++;
  45.                  minute=0;
  46.                  if(hour==24)
  47.                  {
  48.                                hour=0;
  49.                             minute=0;
  50.                             second=0;
  51.                             tcnt=0;
  52.                  }
  53.               }
  54.               }
  55.    }
  56. }


  57. void display()
  58. {
  59. scandisp();
  60. dispbuf[6]=second/10;
  61. dispbuf[7]=second%10;
  62. dispbuf[5]=10;
  63. dispbuf[3]=minute/10;
  64. dispbuf[4]=minute%10;
  65. dispbuf[2]=10;
  66. dispbuf[0]=hour/10;
  67. dispbuf[1]=hour%10;
  68. }

  69. void key_test()
  70. {
  71. display();
  72. P1=0xff;
  73. restar=0;
  74. if(s_set==0)
  75. {
  76.   delay(100);
  77.   if(s_set==0)
  78.   {
  79.    second++;
  80.    if(second==60)
  81.    {
  82.     second=0;
  83.    }
  84. while(s_set==0) display();
  85.   }
  86. }
  87. if(m_set==0)
  88. {
  89.   delay(100);
  90.   if(m_set==0)
  91.   {
  92.    minute++;
  93.    if(minute==60)
  94.    {
  95.     minute=0;
  96.    }
  97.    while(m_set==0) display();
  98.   }
  99. }
  100.   if(h_set==0)
  101.   {
  102.    delay(100);
  103.    if(h_set==0)
  104.    {
  105.    hour++;
  106.    if(hour==24)
  107.    {
  108.     hour=0;
  109.    }
  110.    while(h_set==0) display();
  111.   }
  112.   }
  113.   if(reset==0)
  114.   {
  115.    delay(100);
  116.    if(reset==0)
  117.    {
  118.     restar=1;
  119.    }
  120.   }
  121. }

  122. void main()
  123. {
  124. while(1)
  125. {
  126.   P3=0x00;
  127.   hour=0;
  128.   minute=0;
  129.   second=0;
  130.   tcnt=0;
  131.   TMOD=0x01;
  132.   TH0=(65536-50000)/256;
  133.   TL0=(65536-50000)%256;
  134. IE=0x82;
  135.   TR0=1;
  136. while(1)
  137.   {
  138.   if(dispbuf[1]==9&dispbuf[0]==0&dispbuf[6]<=1&dispbuf[7]<=5)
  139.   {        
  140. led=1;
  141.         if(dispbuf[1]==9&dispbuf[0]==0&dispbuf[6]==1&dispbuf[7]==5)
  142.         {
  143.         led=0;
  144.         }
  145.   }
  146. key_test();
  147. if(restar==1)
  148. break;
  149.   }
  150. }
  151. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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