#include<REGX52.h>
unsigned char table[]={0x76,0x79,0x38,0x73};/*定义数码管显示图像,依次为H,E,L,P*/
void Delay(unsigned char xms)/*定义延时函数,输入的数字为多少毫秒*/
{
while(xms--)
{
unsigned char i,j;
i=2;
j=239;
do
{
while(--j);
}while(--i);
}
}
void choosesmg(unsigned char Location,led)
{
switch(Location)/*switch选择点亮哪个数码管*/
{
case 0:
P2_4=1;P2_3=1;P2_2=1;break;
case 1:
P2_4=1;P2_3=1;P2_2=0;break;
case 2:
P2_4=1;P2_3=0;P2_2=1;break;
case 3:
P2_4=1;P2_3=0;P2_2=0;break;
case 4:
P2_4=0;P2_3=1;P2_2=1;break;
case 5:
P2_4=0;P2_3=1;P2_2=0;break;
case 6:
P2_4=0;P2_3=0;P2_2=1;break;
case 7:
P2_4=0;P2_3=0;P2_2=0;break;
}
P0=table[led];/*选择点亮的数码管显示相应图像*/
}
void main()
{
while(1)
{
unsigned char b;
unsigned char a;
for(b=0;b<5;b++)/*共有两个4位数码管,help图像整体向右运动5次为一个总循环,故for 5次*/
{
for(a=0;a<60;a++)/*刷新若干次,使help能够停留足够时间*/
{
choosesmg(b,0);
Delay(1);
choosesmg(b+1,1);
Delay(1);
choosesmg(b+2,2);
Delay(1);
choosesmg(b+3,3);
Delay(1);
}
}
}
}
数码管动态扫描显示原理(多个数码管同时显示,人的视觉上):数码管实际只能一次点亮一个数码管,但是由于人的视觉有暂留效应,故只要
把不同数码管之间延时一定时间,人在视觉上就会认为多个数码管同时显示。