|
這是原程序
#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( ); //顯示時間
}
}
|
|