|
單片機(jī)實(shí)現(xiàn)秒表計(jì)時(shí)程序,按一次按鍵,開始計(jì)時(shí),第二次按下暫停,再按則清零。
但是不知為什么,第二次按鍵時(shí),顯示全是0.
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//共陰數(shù)碼管段選表0~9和-
uchar code tabeld[]= {0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF,0x40};
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,0x40};
uchar code wei[]= {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
//uchar hour,minute,second,i;
uchar times=0,second,keyNum=0;
sbit key = P2^7;
void delay();
void display();
void timerInit();
void main(void)
{
timerInit();
second = 0;
key = 1;
while(1){
display();
if( !key){
keyNum++;
switch(keyNum){
case 1:
TH0 = 0xED;
TL0 = 0xFF;
TR0 = 1;
break;
case 2:
TR0 = 0;
display();
break;
case 3:
second = 0;
keyNum = 0;
display();
}
while( key & 1 == 0);
}
}
}
void timerInit()
{
TMOD = 0x01;
TH0 = 0xED;
TL0 = 0xFF;
EA = 1;
ET0 = 1;
}
void delay()
{
uchar i;
for( i = 0; i < 111; i++ ) ;
}
void display()
{
P0 = P1 = 0;
delay();
P0 = tabeld[second/10];
P1 = wei[ 1 ];
delay();
P0 = P1 = 0;
delay();
P0 = tabel[second%10];
P1 = wei[ 0 ];
delay();
}
void timer0Int() interrupt 1
{
TH0 = 0xED;
TL0 = 0xFF;
TR0 = 0;
times++;
if( 20 == times){
times = 0;
second++;
display();
}
if(second == 99){
TR0 = 0;
second = 0;
keyNum = 2;
} else{
TR0 = 1;
}
}
|
|