#include<reg51.h>
unsigned char code table[]={//共阴数码管段码"0~f-."
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x40,0x80};
unsigned char code wela[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位码
unsigned char data dis_buf[8];//显示缓存
unsigned int i,j,k,l;//计数变量
void main()
{
P1=0xfe;//流水灯初始化
while(1)
{
//i,j,k计数
i++;
if(i>=1000)
{
i=0;
j++;
if(j>9999)
{
j=0;
k++;
if(k>9999)
k=0;
}
//流水灯
P1=P1<<1|0x01;
if(P1==0xff)
P1=0xfe;
}
//分解数据
dis_buf[0]=table[k/1000%10];
dis_buf[1]=table[k/100%10];
dis_buf[2]=table[k/10%10];
dis_buf[3]=table[k%10];
dis_buf[4]=table[j/1000%10];
dis_buf[5]=table[j/100%10];
dis_buf[6]=table[j/10%10];
dis_buf[7]=table[j%10];
//数码管动态显示
P0=0x00;//消隐段码
P2=wela[l];//位码
P0=dis_buf[l];//段码
l++;//数码管动态计数
if(l>=8)
l=0;
}
}
棒