#include<reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
/*七段共阳管显示定义*/
uint8 code dispcode[ ]={0x40,0x79,0x24,
0x30,0x19,0x12,0x02,
0x78,0x00,0x10};
/*定义并初始化变量*/
uint8 seconde=59;
uint16 mstcnt=0;
/*函数声明*/
void delay(uint8 k ); //延时子程序
void time_pro( ); //时间处理子程序
void display( ); //显示子程序
/*****************************/
/*延时子程序*/
/****************************/
void delay (uint8 k)
{
uint8 j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
/**************************/
/*时间处理子程序*/
/**************************/
void time_pro( void)
{
if(seconde==0)//秒钟设为59进制
{ seconde=59; }
}
/*****************************/
/* 显示子程序*/
/*****************************/
void display(void)
{
P1=dispcode[seconde/10]; //显示秒的十位
delay(4);
P2=dispcode[seconde%10]; //显示秒的个位
delay(4);
}
/**************************/
/*1s定时定时*/
/**************************/
void timer0(void) interrupt 1 using 0//定时器0方式1,250us中断一次{
TH0=0xff;
TL0=0x19;
TMOD = 0x01;
mstcnt++;
if(mstcnt==4000)
{
seconde--;
mstcnt=0; //注意对计数单元的清零
}
}
/**************************/
/*主函数*/
/**************************/
void main(void)
{ P1=0xff; //初始化p0口,全设为1使数码管P2=0xff; //初始化p2口,全设为1使数码管TMOD = 0x01; //time0为定时器,方式1
TH0=0xff; //预置计数初值
TL0=0x19;
EA=1;
ET0=1;
TR0=1;
while (1)
{
time_pro( ); //时间处理
display( ); //显示时间
}
}。