菜鸟求大佬翻牌子解释下

2019-07-15 09:19发布

计数器计的脉冲在数码管上显示,外部脉冲由按键控制 按键选择了P3.4,每一次按下数码管最后一位就会加一,问我的6个数码管为什么不是同时显示
下面是程序
#include  <at89x52.h>
unsigned char dispBUF[]={0,0,0,0,0,0};
unsigned char code dispTAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char  i;
//ms延时函数
void delay_ms(unsigned int ms_number)//1ms延时函数  (AT89C51,11.0592MHz)
{
    unsigned char j;
    unsigned int i;
    for(i=0;i<ms_number;i++)
   
    {
        for(j=0;j<200;j++);
        for(j=0;j<102;j++);
    }
}
void DigDisplay()  //数码管位选
{
    char i;
    for(i=0;i<6;i++)
    {
        P2_6=1;P2_7=0;
        P0=dispTAB[dispBUF[i]];
        P2_6=0;P2_7=1;
        switch(i)
        {
             case 0: P0=0XFE; break;
            case 1: P0=0XFd; break;
            case 2: P0=0XFb; break;
            case 3: P0=0XF7; break;
            case 4: P0=0Xef; break;
            case 5: P0=0Xdf; break;
        }
            P2_6=0;P2_7=0;
              delay_ms(200);
    }
}
void main()
{
    unsigned int count;

    TMOD=0x05;
    TL0=0x00;
    TH0=0x00;
    TR0=1;
    while(1)
  {
//计算计数器的当前计数值并存到变量count中
    count=TH0*256+TL0;
//将计数器的当前计数值变为6个位分别存到显示缓冲区中
    dispBUF[1]=count/10000;
    dispBUF[2]=count%10000/1000;
    dispBUF[3]=count%1000/100;
    dispBUF[4]=count%100/10;
    dispBUF[5]=count%10;
    DigDisplay() ;
   }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。