51单片机控制数码管时,出现以下问题:
1、不用的位隐约显示数据
2、不用的段隐约有亮度
3、本位显示上一位数据
经验证,增加以下注释处代码可明显改进
void display(uchar g, uchar s)
{
P1 = 0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段数据通过位选锁存器造成混乱
wela = 1;
P1 = 0xfe;
wela = 0;
P1 = 0x00;//送段选数据前关闭数码管各段,防止打开段选锁存时原来位数据通过段选锁存器
dula = 1;
P1 = table[s];
dula = 0;
delay1(11);
P1 = 0x00;//在下一位显示前给段选锁存器存入0x00,防止下一位数码
dula = 1;//管打开段选时上一位段数据给下一位造成影响
dula = 0;//同上
P1 = 0xff;
wela = 1;
P1 = 0xfd;
wela = 0;
P1 = 0x00;
dula = 1;
P1 = table[g];
dula = 0;
delay1(11);
P1 = 0x00;//在下一位显示前给段选锁存器存入0x00,防止下一位数码
dula = 1;//管打开段选时上一位段数据给下一位造成影响
dula = 0;//同上
}