标题: 单片机多用秒表 [打印本页]

作者: 丶丶丶!    时间: 2018-7-10 17:02
标题: 单片机多用秒表

  1. #include"reg52.h"
  2. #define start   0xfe
  3. #define pause   0xfd
  4. #define clr     0xfb
  5. #define stop    0xf7
  6. #define save    0xef
  7. #define look    0xdf
  8. unsigned int   times_10ms;
  9. idata unsigned int   s[12];
  10. unsigned char   s_ptr;
  11. unsigned char   d[4];
  12. void delay_1ms(void)
  13. {unsigned int i;
  14. for(i=0;i<123;i++){;}
  15. }
  16. void display(unsigned int t)
  17. { unsigned char i;
  18. unsigned char code BCD_7[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  19. for(;t>0;t--)
  20. {
  21.   for(i=0;i<4;i++)
  22.   {
  23.    P0=BCD_7[d[i]];
  24.    if(i==2)P0&=0x7f;
  25.    P2&=~(0x10<<i);
  26.    delay_1ms();
  27.    P2|=0xf0;
  28.   }
  29. }
  30. }
  31. unsigned char Read_key(void)
  32.   {unsigned char k;
  33.   P1=0xff;
  34.   k=P1;
  35.   if(k==0xff)return 0xff;
  36.   else
  37. {display(3);
  38. k=P1;
  39. if(k==0xff)return 0xff;
  40. else return k;
  41.   }
  42. }
  43. intmain(void)
  44. {unsigned char i,k;
  45. unsigned int tem;
  46. unsigned char run_sign;
  47. TH2=RCAP2H=(65536-10000)/256;
  48. TL2=RCAP2L=(65536-10000)%256;
  49. EA=1;ET2=1;
  50. times_10ms=0;
  51. s_ptr=0;
  52. for(i=0;i<12;i++)s[i]=0;
  53. for(i=0;i<4;i++)d[i]=0;
  54. while(1)
  55.   {k=Read_key();
  56.   if(k!=0xff)
  57.   {switch(k)
  58. {  case start:
  59.   run_sign=1;
  60.   TR2=1;
  61.   break;
  62.   case pause:
  63.   TR2=0;
  64. break;
  65. case stop:
  66.      TR2=0;
  67.      s_ptr=0;
  68.      run_sign=0;
  69.      break;
  70.      case clr:
  71.      TR2=0;
  72.      times_10ms=0;
  73.      TR2=(65536-10000)/256;
  74.       TL2=(65536-10000)%256;
  75.       s_ptr=0;
  76.        for(i=0;i<12;i++)s[i]=0;
  77.        for(i=0;i<4;i++)d[i]=0;
  78.           break;
  79.    case save:
  80.      s[s_ptr++]=times_10ms;
  81.      while(k!=0xff);
  82.       {k=Read_key();
  83.       display(1);
  84.       }
  85.      break;
  86.    case look:
  87.      tem=s[s_ptr++];
  88.      d[3]=tem/1000;d[2]=tem/100%10;
  89.      d[1]=tem/10%10;d[0]=tem%10;
  90.      while(k!=0xff)
  91.       {k=Read_key();
  92.       display(1);
  93.       }
  94.      break;
  95.    default:
  96.          break;
  97.   }
  98. }
  99. if(run_sign)
  100. {
  101.   tem=times_10ms;
  102.    d[3]=tem/1000;d[2]=tem/100%10;
  103.    d[1]=tem/10%10;d[0]=tem%10;
  104. }
  105.   display(1);
  106.   }
  107. }
  108. voidT2_overFlow(void) interrupt 5 using 3
  109.   {if(TF2)
  110. {TF2=0;
  111. times_10ms++;
  112. }
  113. EXF2=0;
  114. }
复制代码








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