led,at89c52 时钟问题

2019-07-15 18:20发布

  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit LCDRS=P2^0;
  5. sbit LCDEN=P2^1;
  6. sbit K1=P3^0;
  7. sbit K2=P3^1;
  8. //uchar code p[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
  9. unsigned long int flag=1;
  10. uint second=58,minute=59,hour=12;
  11. void delay(uint z)
  12. {
  13.         uint i;
  14.         while(z--)
  15.                 for(i=110;i>0;i--);
  16. }
  17. void write_com(uchar com)
  18. {
  19.         LCDRS=0;
  20.         P0=com;
  21.         delay(5);
  22.         LCDEN=1;
  23.         delay(5);
  24.         LCDEN=0;
  25. }
  26. void write_data(uchar datas)
  27. {
  28.         LCDRS=1;
  29.         P0=datas;
  30.         delay(5);
  31.         LCDEN=1;
  32.         delay(5);
  33.         LCDEN=0;
  34. }
  35. void init()
  36. {
  37. //        P3=0x0f;
  38.         TMOD=0x01;
  39.         TH0=(65536-50000)/256;
  40.         TL0=(65536-50000)%256;
  41.         EA=1;                  //开启总中断
  42.         ET0=1;                //开启定时器1中断
  43.         TR0=1;                //开启定时器1  
  44.         LCDEN=0;
  45.         write_com(0x38);
  46.         write_com(0x0c);
  47.         write_com(0x06);
  48.         write_com(0x01);
  49.         write_com(0x80);
  50. }
  51. void main()
  52. {
  53.         init();
  54.         write_data(0x3c);
  55.         delay(5);
  56.         write_data('T');      
  57.     delay(5);   
  58.     write_data('i');
  59.     delay(5);
  60.     write_data('m');
  61.     delay(5);
  62.     write_data('e');
  63.     delay(5);
  64.     write_data(0x3e);                                                                           
  65.     write_com(0x80+0x06);
  66.         do
  67.         {
  68.                 write_data(hour%24/10+48);
  69.             write_data(hour%24%10+48);
  70.             write_data(58);
  71.             write_data(minute%60/10+48);
  72.             write_data(minute%10+48);
  73.             write_data(58);
  74.             write_data(second%60/10+48);
  75.             write_data(second%10+48);
  76.             write_com(0x10);
  77.             write_com(0x10);
  78.             write_com(0x10);
  79.             write_com(0x10);
  80.             write_com(0x10);
  81.             write_com(0x10);
  82.             write_com(0x10);
  83.             write_com(0x10);
  84.                 if(K1==0)        
  85.                 {
  86.                         TR0=0;
  87.                         while(!K1);
  88.                         TR0=1;
  89.                 }        
  90.         }while(1);
  91. }
  92. void time0() interrupt 1
  93. {
  94.         TH0=(65536-50000)/256;
  95.         TL0=(65536-50000)%256;
  96.         flag++;
  97.         if(flag%20==0)
  98.                 second++;         
  99.         if(second%60==0)
  100.                 minute++;
  101.         if(minute%60==0)
  102.                 hour++;
  103. }
复制代码运行2s之后,原本不应该是到了13:00:00吗???为何分钟位会出现这种情况,跪求大神指导!!!???
current

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
阿信509
2019-07-16 07:14
if(flag%20==0)
{
        flag=0;
        second++;         
        if(second%60==0)
        {
                second=0;
                minute++;
                if(minute%60==0)
                {
                        minute=0;
                        hour++;
                }
        }
}
改成这样试试,我也没试过啊,但是这样至少比你以前的那个要好些

一周热门 更多>