此程序是在黃鶯老師的源程序上加以修改,在單片機板子上運行成功,這里是板子的硬件資料http://m.izizhuan.cn/mcu/1019.html,數碼管是四位共陽管子,程序沒有進行仿真測試
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uint temp,temp1,temp2,num,shi,ge,i,j;
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit WX1=P0^0;
sbit WX2=P0^1;
sbit WX3=P0^2;
sbit WX4=P0^3;
sbit NBL=P2^2;
sbit NBY=P2^1;
sbit NBR=P2^0;
sbit DXL=P2^5;
sbit DXY=P2^4;
sbit DXR=P2^3;
void init()
{
P0=0xff;
P2=0xff;
temp=0;
temp1=0;
temp2=0;
shi=0;
ge=0;
TMOD=0x21;
TH0=0x3c; //50ms
TL0=0xb0;
EA=1;
ET0=1;
TF0=0;
TR0=1;
}
void delay(uchar z)
{
uchar x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void display()
{
shi=num/10;
ge=num%10;
P1=table[ge];
WX3=1;
WX2=0;WX1=0;WX4=0;
delay(10);
WX2=1;
P1=table[shi];
WX2=1;
WX3=0;WX1=0;WX4=0;
delay(10);
WX3=1;
}
void time0() interrupt 1 using 1
{
temp++;
temp1++;
TH0=0x3c;
TL0=0xb0;
TR0=1;
}
void main()
{
init();
while(1)
{
if(temp==0)
{
DXR=1;
NBY=1;
DXL=0;
NBR=0;
num=21;
temp1=0;
for(i=20;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==400)
{
DXY=1;
NBR=0;
DXL=0;
num=3;
j=0;
for(i=7;i>0;i--)
{
j++;
if(j%2==0)
{
num--;
}
temp2=temp;
DXL=!DXL; //燈閃爍
while(temp-temp2!=10)
{
display();
};
}
}
if(temp==470)
{
DXL=1;
DXY=0;
NBR=0;
num=3;
temp1=0;
for(i=3;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
if(temp==530)
{
DXY=1;
DXR=0;
NBR=1;
NBL=0;
num=26;
temp1=0;
for(i=25;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
}
if(temp==1030)
{
DXY=1;
DXR=0;
NBL=0;
num=3;
j=0;
for(i=7;i>0;i--)
{
j++;
if(j%2==0)
{
num--;
}
temp2=temp;
NBL=!NBL; //燈閃爍
while(temp-temp2!=10)
{
display();
};
}
}
if(temp==1100)
{
DXL=1;
DXR=0;
NBY=0;
num=3;
temp1=0;
for(i=3;i>0;i--)
{
num--;
while(temp1!=20)
{
display();
}
temp1=0;
}
temp=0;
}
}
}
}

