写了个秒表的程序,有些困惑

2020-01-30 14:16发布

00 :00 . 00
分   秒  分秒

代码:
  1. /***************************************************************
  2. 文件名:秒表.c
  3. 晶振频率:12MHz
  4. ****************************************************************/
  5. #include<reg52.h>
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. #define dataport P0

  9. uchar code weima[]={
  10. 0xfe,0xfd,0xfb,0xf7,
  11. 0xef,0xdf,0xbf,0x7f};
  12. uchar code duanma[]={
  13. 0x3f,0x06,0x5b,0x4f,0x66,
  14. 0x6d,0x7d,0x07,0x7f,0x6f};
  15. uchar tempdata[8];
  16. uchar tt0,tt1,tt2;

  17. sbit wela=P2^2;
  18. sbit dula=P2^3;

  19. void display(uchar,uchar);
  20. void Init_Timer0(void);
  21. void delayms(uint);

  22. void main(void)
  23. {
  24.         Init_Timer0();
  25.         while(1)
  26.                 display(0,6);
  27. }

  28. void Init_Timer0(void)
  29. {
  30.         TMOD=0x01;
  31.         TH0=(65536-10000)/256;
  32.         TL0=(65536-10000)%256;

  33.         IE=0x82;
  34.         //EA=1;
  35.         //ET0=1;
  36.         TR0=1;
  37. }

  38. void T0_isr(void)interrupt 1
  39. {
  40.         TH0=(65536-10000)/256;
  41.         TL0=(65536-10000)%256;
  42.         tt0++;
  43.         if(tt0==100)                //1秒
  44.         {
  45.                 tt0=0;
  46.                 tt1++;
  47.                 if(tt1==60)
  48.                 {
  49.                         tt1=0;
  50.                         tt2++;
  51.                         if(tt2==60)
  52.                                 tt2=0;
  53.                 }
  54.         }
  55.         tempdata[0]=duanma[tt2/10];                                //分前一位
  56.         tempdata[1]=duanma[tt2%10];                                //分后一位
  57.         tempdata[2]=duanma[tt1/10];                                //秒前一位
  58.         tempdata[3]=duanma[tt1%10];                                //秒后一位
  59.         tempdata[4]=duanma[tt0/10];                                //分秒前一位
  60.         tempdata[5]=duanma[tt0%10];                                //分秒后一位
  61. }

  62. void display(uchar firstbit,uchar num)
  63. {
  64.         uchar i;
  65.         for(i=0;i<num;i++)
  66.         {
  67.                 dataport=0;
  68.                 dula=1;
  69.                 dula=0;

  70.                 dataport=weima[i+firstbit];
  71.                 wela=1;
  72.                 wela=0;

  73.                 dataport=tempdata[i];
  74.                 dula=1;
  75.                 dula=0;

  76.                 delayms(2);
  77.         }
  78. }

  79. void delayms(uint ms)
  80. {
  81.         uint i;
  82.         while(ms--)
  83.                 for(i=110;i>0;i--);
  84. }

复制代码不知道问题出现在哪,数码管显示不对,高手指点下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。