计数器计的脉冲在数码管上显示,外部脉冲由按键控制 按键选择了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() ;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>