代码如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit we = P2^7;//位定义数码管位选锁存器接口
sbit du = P2^6;//位定义数码管段选锁存器接口
sbit key_1 = P3^0;
sbit key_2 = P3^1;
sbit key_3 = P3^2;
sbit key_4 = P4^3;
uint ge=0,shi=0,bai=0,qian=0,wan=0,sw=0,i=0;//ge,shi组成毫秒,bai,qian组成秒,wan,sw组成分钟
uchar code leddata[]={
0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义
};
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void main(void)
{
TMOD=0x02;
TL0=0x1A;
TH0=0x1A;//为定时器赋初值
ET0=1;
EA=1;
TR0=1;
while(1)
{
P0 = 0xff; //清除断码
we = 1;//打开位选
P0 = 0x7f;//0111 1111
we = 0; //关闭位选
du = 1; //打开段选
P0 = leddata[ge];
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xbf;//1011 1111
we = 0; //关闭位选
du = 1;//打开段选
P0 = leddata[shi];
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xdf;//1101 1111
we = 0; //关闭位选
du = 1;//打开段选
P0 = 0x40;//0100 0000
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xfb;//1111 1011
we = 0; //关闭位选
du = 1;//打开段选
P0 = 0x40;//0100 0000
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xef;//1110 1111
we = 0; //关闭位选
du = 1;//打开段选
P0 = leddata[bai];
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xf7;//1111 0111
we = 0; //关闭位选
du = 1;//打开段选
P0 = leddata[qian];
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xfd;//1111 1101
we = 0; //关闭位选
du = 1;//打开段选
P0 = leddata[wan];
du = 0; //关闭段选
delay(1);//延时5毫秒
P0 = 0xff;//清除断码
we = 1; //打开位选
P0 = 0xfe;//1111 1110
we = 0; //关闭位选
du = 1;//打开段选
P0 = leddata[sw];
du = 0; //关闭段选
delay(1);//延时5毫秒
}
}
void time0_int(void) interrupt 1
{
i++;
if(i==40)
{
i=0;
ge++;
if(ge==10)
{
ge=0;
shi++;
if(shi==10)
{
shi=0;
bai++;
if(bai==10)
{
bai=0;
qian++;
if(qian==6)
{
qian=0;
wan++;
if(wan==10)
{
wan=0;
sw++;
}
}
}
}
}
}
}