多位数码管动态显示中的虚影消除

最近刚做好一个站,基于rails 3,教程为主,大家捧场看看,谢谢!www.yo945.com

书买的郭天祥的《51单片机C语言教程——入门、提高、开发、拓展全攻略》,看了60来页,书是不错,可是书中用的是他自己弄的板子,得卖近400,我买的100来块,功能一点不比他的少,BS一下~

由于书上的代码和自己的板子不兼容,所以得自己改了,不过也好,更锻炼人~

在学习动态显示时,发现有一个问题,数字是正常显示了,但是好几个数字上面,某些不应该亮的地方,有一些微微亮,导致数字显示不是很清楚,代码如下(说明:数码管可以显示8个数字,共阳,P3用于选择亮哪一个,P0用于输出数字):

#include <reg52.h>
	
#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 <reg52.h>
	
#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毫秒效果比较好
		}
	}
}

原文地址:https://www.cnblogs.com/varlxj/p/1646289.html