找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机可调时钟

[复制链接]
跳转到指定楼层
楼主


  1. #include"reg52.h"
  2. #include"intrins.h"
  3. sbit add=P1^0;
  4. sbit dec=P1^1;
  5. sbit key=P3^2;
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. int tab[6],x,y,z,n,a,b,c,o;
  9. void delay20ms(void)  //软件延时子程序
  10. {
  11.    unsigned char i,j;
  12.         for(i=0;i<100;i++)
  13.          for(j=0;j<60;j++)
  14.            ;
  15. }
  16. uchar code SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  17. void delay()
  18. {uint i;
  19. for(i=0;i<500;i++);
  20. }
  21. void chaifen()
  22. {
  23. tab[0]=x%10;
  24. tab[1]=x/10;
  25. tab[2]=y%10;
  26. tab[3]=y/10;
  27. tab[4]=z%10;
  28. tab[5]=z/10;
  29. }
  30. void main()
  31. {
  32. TMOD=0x01;
  33. TH0=0x3c;
  34. TL0=0xb0;
  35. EA=1;
  36. EX0=1;
  37. PX0=1;
  38. TR0=1;
  39. ET0=1;
  40. n=0;
  41. x=0;
  42. y=0;
  43. z=0;
  44. chaifen();
  45. while(1)
  46. {
  47. uchar i;
  48. P2=0x40;
  49. for(i=0;i<6;i++)
  50. {
  51. P2=_cror_(P2,1);
  52. P0=SEG[tab[i]];
  53. delay();
  54. }
  55. }
  56. }

  57. void wai() interrupt 0
  58. {
  59. while(!key)
  60.     {
  61.     a=x;
  62.         b=y;
  63.         c=z;
  64.         if (add==0)
  65.         {
  66.         delay20ms();
  67.     while(add==0);
  68.         a++;
  69.          
  70.         }

  71.         else if(dec==0)
  72.         
  73.         {
  74.         delay20ms();
  75.         while(dec==0);
  76.         a--;
  77.         }
  78.     x=a;
  79.         y=b;
  80.         z=c;
  81.                 if(x==(60))
  82.                   {
  83.                   x=0;
  84.                   y++;
  85.                   if(y==(60))
  86.                   {
  87.                   y=0;
  88.                   z++;
  89.                   if(z==(24))
  90.                   {z=0;}
  91.                   }
  92.                   }
  93.   if(x==(-1))
  94.   {
  95.   x=59;
  96.   y--;
  97.   if(y==(-1))
  98.   {
  99.   y=59;
  100.   z--;
  101.   if(z==(-1))
  102.   {z=23;}
  103.   }
  104.   }

  105.                                 P2=0x40;
  106.                                 for(o=0;o<6;o++)
  107.                                 {
  108.                                 P2=_cror_(P2,1);
  109.                                 P0=SEG[tab[o]];
  110.                                 delay();
  111.                                 }
  112.         chaifen();
  113.    }

  114. }
  115. void timer() interrupt 1
  116. {
  117. n++;
  118. if(n==10)
  119. {
  120.   n=0;
  121.   x--;
  122.   if(x==(-1))
  123.   {
  124.   x=59;
  125.   y--;
  126.   if(y==(-1))
  127.   {
  128.    y=59;
  129.    z--;
  130.     if(z==(-1))
  131.     {z=23;}
  132.   }
  133.   }

  134.   chaifen();
  135. }
  136. TH0=0x3c;
  137. TL0=0xb0;
  138. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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