数码管动态扫描时钟问题 求助高手解释

2020-02-03 10:09发布

怎么调试都是闪烁 而且闪烁的越快秒走的也越快  求高手指点

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl);
uchar a1,a2,a3,a4,a5,a6;
uchar hl,hh,ml,mh,sh,sl,aa,s,m,h,i;
uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,
                       0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar code seg[]={0,4,8,12,16,20,24,28,32};//由2.4  2.3  2.2  138译码器导出位选

uchar LedOut[]={0,0,0x40,0,0,0x40,0,0};         
void DelayMs(uint z)
{
   
        uint x,y;
        for(x=z;x>0;x--)
           for(y=110;y>0;y--);
}

void delay_us(unsigned int n)
{
if (n == 0)
  {  
  return ;  
  }
  while (--n);
}
uchar trans(uchar h,uchar m,uchar s)//时间转换
{
       
        hh=h/10;
        hl=h%10;
        mh=m/10;
        ml=m%10;
        sh=s/10;
        sl=s%10;
        return (hh,hl,mh,ml,sh,sl) ;
}



void T0_INT()
{
    TH0=0x3c;
  TL0=0xb0;
  EA=1;
  ET0=1;
  TR0=1;
}
       
void time()
{
  if(aa==20)
                {
                        aa=0;
                        s++;
                        if(s==60)
                        {
                                s=0;
                                m++;
                                if(m==60)
                                {
                                        m=0;
                                        h++;
                                        if(h==24)
                                        h=0;
                                }
                        }
                           trans(h,m,s);
                display(hh,hl,mh,ml,sh,sl);


             }
             
}

void display(uchar hh,uchar hl,uchar mh,uchar ml,uchar sh,uchar sl)//显示函数
{
                     LedOut[0]=DSY_CODE[hh];
                                     LedOut[1]=DSY_CODE[hl];
                                                                              
                                     LedOut[3]=DSY_CODE[mh];                                         
                                         LedOut[4]=DSY_CODE[ml];
                                                                                        
                                     LedOut[6]=DSY_CODE[sh];                  
                                     LedOut[7]=DSY_CODE[sl];
                   for(i=0;i<8;i++)
                          {                          
                               P0=LedOut[i];
                                  
                                   P2=seg[i];
                                  DelayMs(15);                                                   
                           }

}
/*主函数*/
void main()
{
         
  T0_INT();
  
          while(1)
          {
                time();
                  }
         
}
void time0() interrupt 1 //T1中断控制时钟运行
{  
  TH0=0x3c;
  TL0=0xb0;
  aa++;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
xfdr
1楼-- · 2020-02-03 11:05
void time0() interrupt 1 //T1中断控制时钟运行
{  
   TH0=0x3c;
   TL0=0xb0;
   aa++;

        if(aa==20)
                 {
                         aa=0;
                         s++;
                         if(s==60)
                         {
                                 s=0;
                                 m++;
                                 if(m==60)
                                 {
                                         m=0;
                                         h++;
                                         if(h==24)
                                         h=0;
                                 }
                         }
             aa=0;
           flag=1
             }
}

           while(1)
           {
               if(flag)
             {
               flag=0;
               trans(h,m,s);
                 display(hh,hl,mh,ml,sh,sl);
              }
               
            }
lxa0
2楼-- · 2020-02-03 14:07
看不懂C~~~~~~~~~~~~
876192514
3楼-- · 2020-02-03 16:59
void time0() interrupt 1 //T1中断控制时钟运行
{  
  TH0=0x3c;
  TL0=0xb0;
  aa++;
time();

}

在这里面处理时间 不要放到主程序 但是不要把显示部分也加进入
dongls
4楼-- · 2020-02-03 22:29
看楼主的程序,应该是50ms中断一次,你把time()中的s,m,h值放在主函数中,那么在两次中断之间,这个计算程序可以执行无限次.
gvgvfghv
5楼-- · 2020-02-03 23:55
 精彩回答 2  元偷偷看……
mei13634698139
6楼-- · 2020-02-04 04:14
感谢各位高人,,小弟问题已经解决

一周热门 更多>