#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=0;// second 调整定义
uint16 mstcnt=0;//minite调整定义
sbit key1=P1^6; //定义P1.6端口为按键1
sbit key2=P1^7;//定义p1.7端口为按键2
/*函数声明*/
void delay(uint8 k ); //延时子程序
void time_pro( ); //时间处理子程序
void display( ); //显示子程序
void keyscan( ); //键盘扫描子程序
/*延时子程序*/
void delay (uint8 k)
{
uint8 j;
while((k--)!=0)
{
for(j=0;j<125;j++)
{;}
}
}
/*时间处理子程序*/
void time_pro(void)
{
if(seconde==99)//秒钟设为99进制
{
seconde=0;
}
}
/* 显示子程序*/
void display(void)
{
P0=dispcode[seconde/10]; //显示秒的十位
delay(4);
P3=dispcode[seconde%10]; //显示秒的个位
delay(4);
}
/*键盘扫描子程序*/
void keyscan (void)
{
if(key1==0) //按键1为开始键
{
delay(60);
if(key1==0)
EA=1;
delay(60);
seconde++;
}
if(seconde==99)
{seconde=0;
}
if(key2==0) //按键2为复位键
{
delay(60);
if(key2==0)
{
delay(60);
seconde=0;
delay(60);
EA=0;
}
}
}
/*1s定时子程序 */
void timer0(void) interrupt 1 using 0
{
TH0=0xff;
TL0=0x19;
TMOD = 0x01;//定时器0方式1,250us中断一次
mstcnt++;
if(mstcnt==4000)
{
seconde++;
mstcnt=0; //对计数单元的清零
}
}
/*主函数*/
void main(void)
{
P0=0xff; //初始化p0口,全设为1使数码管
TMOD = 0x01; //time0为定时器,方式1
TH0=0xff; //预置计数初值
TL0=0x19;
EA=0;
ET0=1;
TR0=1;
while (1)
{
keyscan( ); //按键扫描
time_pro( ); //时间处理
display( ); //显示时间
}
}
|