采用定时器中断动态扫描方式显示4位数码管.当显示数值0~255正常,大于255时就暗下来,不知道是什么原因?请高手指点.源代码如下:
unsigned char dis_index;//显示位4位轮回
unsigned char m1,m2,m3,m4;//显示各位数据寄存器
unsigned int disp_m;//需显示数据用寄存器
sbit ge=P2^7;//个位
sbit shi=P2^6;//十位
sbit bai=P2^5;//百位
sbit ceng=P2^4;//千位
void led_disp (void) interrupt 1 using 1
{ TL0 =tl0; //载入定时器0低4位初始值
TH0 =th0; //载入定时器0高4位初始值
ge=0; //关显示
shi=0;
bai=0;
ceng=0;
led_led();
switch (dis_index)
{
case 0:dis_buf[0] = dis_code[m1];P0 = dis_buf[dis_index];ge =1;break; //个位
case 1:dis_buf[1] = dis_code[m2];P0 = dis_buf[dis_index];shi=1;break; // 十位
case 2:dis_buf[2] = dis_code[m3];P0 = dis_buf[dis_index];bai=1;break; //百位
case 3:dis_buf[3] = dis_code[m4];P0 = dis_buf[dis_index];ceng=1;break; //千位
default:dis_index=0;
}
dis_index++; // 显示位加1
if(dis_index>=4) //显示位大于等于4
{dis_index=0;} //显示位归0,从头开始
}
void led_led()//显示数据分位计算
{
m1=disp_m%10;//个位
m2=disp_m/10%10;//十位
m3=disp_m/100%10;//百位
m4=disp_m/1000;//千位
}
unsigned char dis_index;//显示位4位轮回
unsigned char m1,m2,m3,m4;//显示各位数据寄存器
unsigned int disp_m;//需显示数据用寄存器
sbit ge=P2^7;//个位
sbit shi=P2^6;//十位
sbit bai=P2^5;//百位
sbit ceng=P2^4;//千位
void led_disp (void) interrupt 1 using 1
{ TL0 =tl0; //载入定时器0低4位初始值
TH0 =th0; //载入定时器0高4位初始值
ge=0; //关显示
shi=0;
bai=0;
ceng=0;
led_led();
switch (dis_index)
{
case 0:dis_buf[0] = dis_code[m1];P0 = dis_buf[dis_index];ge =1;break; //个位
case 1:dis_buf[1] = dis_code[m2];P0 = dis_buf[dis_index];shi=1;break; // 十位
case 2:dis_buf[2] = dis_code[m3];P0 = dis_buf[dis_index];bai=1;break; //百位
case 3:dis_buf[3] = dis_code[m4];P0 = dis_buf[dis_index];ceng=1;break; //千位
default:dis_index=0;
}
dis_index++; // 显示位加1
if(dis_index>=4) //显示位大于等于4
{dis_index=0;} //显示位归0,从头开始
}
void led_led()//显示数据分位计算
{
m1=disp_m%10;//个位
m2=disp_m/10%10;//十位
m3=disp_m/100%10;//百位
m4=disp_m/1000;//千位
}







