今天做Proteus仿真时遇到了数码管不能动态显示的问题
我的程序是用单片机P1口控制数码管段选,P2口低四位控制数码管位选
数码管1ms显示一位,全部刷新需要4ms,正常情况下人眼是感受不到这个速度下数码管的刷新过程的,所以他应该是这个样子
这两张图对应的程序在真实硬件上应该都是没有问题的,但是由于我们使用的是Proteus进行仿真,所以程序要对Proteus的口味,Proteus才会给我们正确的反馈。
一个可能的解决办法就是在程序中先进行位选再进行段选,一般就可以正常显示了。
修改前
void SMG_shift()
{
switch(shift)
{
case 0:bits=second1/10; break;
case 1:bits=second1%10; break;
case 2:bits=second2/10; break;
case 3:bits=second2%10; break;
}
P1=smg[bits];
P2=~(0x01<<shift);
shift=(shift+1)%4;
}
修改后
void SMG_shift()
{
P2=~(0x01<<shift);
switch(shift)
{
case 0:bits=second1/10; break;
case 1:bits=second1%10; break;
case 2:bits=second2/10; break;
case 3:bits=second2%10; break;
}
P1=smg[bits];
shift=(shift+1)%4;
}