找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机时钟,显示时分秒,可按键设置.(用定时器和中断)

[复制链接]
跳转到指定楼层
楼主
ID:420964 发表于 2018-11-5 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

单片机源程序如下:
  1. #include"reg51.h"
  2. sbit    key=P3^4;
  3. #define         WEI   P2
  4. #define   SEGNUM   P0
  5. unsigint addNum;
  6. unsigned int h,m,s;                 
  7. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
  8.                             0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  9.                             0x39,0x5e,0x79,0x71,0x00 } ;
  10. void delay (unsigned int num)         
  11. {
  12.   unsigned i,j;
  13.   for(i=num;i>0;i--)
  14.     for(j=120;j>0;j--);
  15. }
  16. void main()
  17. {
  18.    TMOD=0x02;
  19.    TL0=TH0=6;         //256次-6次
  20.    EA=1;                 //开中断允许位
  21.    ET0=1;                 //开中断允许位
  22.    TR0=1;                 //启动定时/计数器定时或计数          
  23.    IT0=1;                 //边沿触发                 (外部中断0)
  24.    EX0=1;                 //开中断允许位
  25.    IT1=1;                 //边沿触发                 (外部中断1)
  26.    EX1=1;                 //开中断允许位
  27.    TR0=1;                 //启动定时/计数器定时或计数
  28.    while (1)
  29.    {

  30.          if(!key)
  31.     {  
  32.           delay(10) ;
  33.           if(!key)
  34.           {
  35.         h++;  while(!key) ;
  36.           }
  37.         }

  38.           WEI=0xfe;                                            //显示位码
  39.       SEGNUM=table[h/10];                        // h
  40.       delay(5);                                                //十位
  41.       WEI=0xfd;                                                //个位
  42.       SEGNUM=table[h%10];
  43.       delay(5);
  44.           WEI=0xfb;
  45.       SEGNUM=table[m/10];                        //
  46.       delay(5);
  47.       WEI=0xf7;
  48.       SEGNUM=table[m%10];
  49.       delay(5);
  50.           WEI=0xef;                                                 
  51.           SEGNUM=table[s/10];                         //
  52.           delay(5);
  53.           WEI=0xdf;
  54.           SEGNUM=table[s%10];
  55.           delay(5);       
  56.    }
  57. }
  58. void timer0() interrupt 1 //
  59. {
  60.    addNum++;
  61.    if(addNum==4000)                  //1000000/250     1秒除250次
  62.    {
  63.         s++;                                //如果一秒到了,s秒表数加一,addNum归零
  64.         addNum=0;
  65.    }
  66.    if(s==60)   //如果秒为60,则清零,分加1
  67.    {
  68.     m++;
  69.         s=0;
  70.    }
  71.    if(m==60)  
  72.    {
  73.     h++;
  74.     m=0;
  75.    }
  76.    if(h==24)  
  77.    {
  78.     h=0;
  79.    }                                                                                 
  80. }

  81. void ex0( )  interrupt  0       
  82. {
  83.     s++;                                //表示外部中断来时的动作   (外部中断0)
  84. }         
  85. void ex1( )  interrupt  2       
  86. {
  87.     m++;                               
  88. }
复制代码

所有资料51hei提供下载:
时钟,显示时分秒,可按键设置.(用定时器和中断).rar (16.31 KB, 下载次数: 61)



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

使用道具 举报

沙发
ID:401109 发表于 2018-11-19 10:28 | 只看该作者
阻塞性按键
回复

使用道具 举报

板凳
ID:575093 发表于 2019-7-3 14:22 来自手机 | 只看该作者
很好,帮助很大
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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