标题: 单片机T0方式2实现简单时钟仿真,keil+protues实现 [打印本页]

作者: 180303    时间: 2019-3-23 11:34
标题: 单片机T0方式2实现简单时钟仿真,keil+protues实现
T0方式2实现简单电子时钟仿真试验,keil+protues实现
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. //按4X4键盘的F键 进入设定状态
  2. //E D 键是前后移动键
  3. //C按键是调整数值按键
  4. #include "reg52.h"
  5. #define uchar unsigned char
  6. sbit key_h=P1^0;
  7. sbit key_m=P1^1;
  8. sbit key_s=P1^2;
  9. unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //段码表
  10. unsigned int h,m,s,counter;

  11. void delay1ms(unsigned int i)
  12. {
  13. unsigned char j;
  14. while(i--)
  15. {
  16.          for(j=0;j<125;j++)          //1ms基准延时程序
  17.          {
  18.           ;
  19.          }
  20. }  
  21. }
  22. void Display_h(unsigned char x)
  23. {           
  24.         P2=0xfb;        //P2.6引脚输出低电平,DS6点亮
  25.     P0=Tab[x/10];   //显示十位
  26.             delay1ms(5);
  27.          P2=0xff;

  28.     P2=0xf7;      //P2.7引脚输出低电平,DS7点亮
  29.     P0=Tab[x%10];  //显示个位
  30.     delay1ms(5);
  31.         P2=0xff;
  32. }
  33. void Display_m(unsigned char x)
  34. {           
  35.         P2=0xef;        //P2.6引脚输出低电平,DS6点亮
  36.     P0=Tab[x/10];   //显示十位
  37.             delay1ms(5);
  38.          P2=0xff;

  39.     P2=0xdf;      //P2.7引脚输出低电平,DS7点亮
  40.     P0=Tab[x%10];  //显示个位
  41.     delay1ms(5);
  42.         P2=0xff;
  43. }
  44.   void Display_s(unsigned char x)
  45. {           
  46.         P2=0xbf;        //P2.6引脚输出低电平,DS6点亮
  47.     P0=Tab[x/10];   //显示十位
  48.             delay1ms(5);
  49.          P2=0xff;

  50.     P2=0x7f;      //P2.7引脚输出低电平,DS7点亮
  51.     P0=Tab[x%10];  //显示个位
  52.     delay1ms(5);
  53.         P2=0xff;
  54. }

  55. /*********************初始化子程序**********************/
  56. void init()
  57. {
  58.   TMOD=0x01;
  59.   TH0=(65536-50000)/256;
  60.   TL0=(65536-50000)%256;
  61.   EA=1;
  62.   ET0=1;
  63.   TR0=1;
  64.   counter=0;
  65.   h=12;m=0;s=0;
  66. }

  67. /***************************按键调时间************************/
  68. void TZ_h()
  69. {
  70. h++;
  71. if(h>24)
  72. {
  73.          h=0;
  74. }
  75. while(key_h!=1);
  76. TR0=1;
  77. }
  78. void TZ_m()
  79. {
  80. m++;
  81. if(m>60)
  82. {
  83.          m=0;
  84. }
  85. while(key_m!=1);
  86. TR0=1;
  87. }
  88. void TZ_s()
  89. {
  90. s++;
  91. if(s>60)
  92. {
  93.          s=0;
  94. }
  95. while(key_s!=1);
  96. TR0=1;
  97. }

  98. /***************************主程序************************/

  99. void main(void)
  100. {
  101.   init();
  102.   while(1)
  103.   {
  104.            Display_h(h);
  105.         Display_m(m);
  106.         Display_s(s);

  107.         if(key_h==0)
  108.         delay1ms(20);
  109.         if(key_h==0)
  110.         {
  111.                 TR0=0;        
  112.                 TZ_h();
  113.         }
  114.         if(key_m==0)
  115.         delay1ms(20);
  116.         if(key_m==0)
  117.         {
  118.                 TR0=0;        
  119.                 TZ_m();
  120.         }
  121.         if(key_s==0)
  122.         delay1ms(20);
  123.         if(key_s==0)
  124.         {
  125.                 TR0=0;        
  126.                 TZ_s();
  127.         }
  128.    }
  129. }
  130. /*************************定时器0的中断**********************/
  131. void Time0() interrupt 1 using 2    //再次强调中断子程序执行时间越短越好
  132. {
  133.   TH0=(65536-50000)/256;
  134.   TL0=(65536-50000)%256;
  135.   counter++;
  136.   if(counter==20)
  137.   {
  138.     s++;
  139.     counter=0;
  140.           if(s==60)
  141.           {
  142.             m++;
  143.             s=0;
  144.               if(m==60)
  145.               {
  146.                h++;
  147.                m=0;
  148.                if(h==24)
  149.                 h=0;
  150.                }
  151.            }
  152.   }
  153. }
复制代码

所有资料51hei提供下载:
简单时钟显示实验.rar (51.09 KB, 下载次数: 40)



作者: 282323559    时间: 2020-4-25 21:56
很不错的程序和原理图。
作者: wakfaf    时间: 2020-12-7 20:14
很不错的原理图
作者: wakfaf    时间: 2020-12-7 20:15
这个想法和创意不错




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1