消影
数码管的显示流程为 位选->段选->位选->段选->位选->段选->… 单片机运行很快 在第一次位选->段选后马上执行下一次位选 第二次的段选还没执行,导致上一次的段选进入残留,所以如果不进行消影,那么会导致显示错误。
代码
在数码管上显示数字1,2,3
#include <REGX52.H>
void Delay_ms(unsigned int num)
{
unsigned char i, j;
while(num)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
num--;
}
}
unsigned NixieTable[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,
0x77,
0x7C,
0X39,
0X5E,
0X79,
0X71,
0X00
};
void Nixie(unsigned char Location,unsigned char Num)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Num];
}
void main()
{
while(1)
{
Nixie(1,1);
Delay_ms(1);
P0=0x00;
Nixie(2,2);
Delay_ms(1);
P0=0x00;
Nixie(3,3);
Delay_ms(1);
P0=0x00;
}
}
|