多位数码管动态显示中的虚影消除
扫描二维码
随时随地手机看文章
在学习动态显示时,发现有一个问题,数字是正常显示了,但是好几个数字上面,某些不应该亮的地方,有一些微微亮,导致数字显示不是很清楚,代码如下(说明:数码管可以显示8个数字,共阳,P3用于选择亮哪一个,P0用于输出数字):
#include
#define uchar unsigned char
//随手抄来的,虽然我只显示0-7
uchar code table[] = {
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
};
uchar i;
void main()
{
P3 = 0xFF;
P0 = 0xFF;
while(1)
{
for(i=0;i<8;i++)
{
//共阳,P3用于选择亮哪一个,P0用于输出数字,不同开发板不一样
P3 = 0xFF & (~( 1 << (i%8) ));//选择使用哪一个数码管
P0 = table[i];//数码管代码
}
}
}
后来仔细看了代码,才发现书上有延时的代码,也就是设置完成后,延时1到2毫秒,本来以为没什么用,没想到 一加上,效果立杆见影啊,修改后如下:
#include
#define uchar unsigned char
void delay1ms()
{
uchar j;
for(j=110;j>0;j--)
;
}
//随手抄来的,虽然我只显示0-7
uchar code table[] = {
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
};
uchar i;
void main()
{
P3 = 0xFF;
P0 = 0xFF;
while(1)
{
for(i=0;i<8;i++)
{
//共阳,P3用于选择亮哪一个,P0用于输出数字,不同开发板不一样
P3 = 0xFF & (~( 1 << (i%8) ));//选择使用哪一个数码管
P0 = table[i];//数码管代码
/************加上延时后,数码管马上变清晰了**************/
delay1ms();
delay1ms();//试了下,2毫秒效果比较好
}
}
}