#include<reg51.h>
#define ulong unsigned long char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xd8,0x80,0x90};
char tab_dp[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10};
#define LED P0 //P0 为数码管的段选
#define WS P1 //P1 为数码管的位选
sbit time_shift=P3^0; //P3^0 为"移位"按键
sbit time_set=P3^1; //P3^1 为"修改"按键
sbit set_inc=P3^2; //P3^2 为"增加"按键
sbit time_run=P3^3; //P3^3 为"计时开始暂停"按键
sbit LIGHT=P2^0;
sbit SPEAKER=P2^7;
unsigned char sec,min,sec_ge,sec_shi,min_ge,min_shi,t; //定义秒,分,时,秒的个位,十位,分的个位,十位
int state; //秒表状态指示 0-计时暂停 1-正在倒计时 2-计时时间参数修改
int flag; //秒表修改数据指示 0-分钟十位 1-分钟个位 2-秒钟十位 3-秒钟个位
int blink; //--------------------------------------------------------------------
void init();
void display_run();
void display_pause();
void delay(int);
void time_modify(); //--------------------------------------------------------------------
void main() { init();
state=0;
flag=0;
blink=1;
t=0;
LIGHT=1;
SPEAKER=1;
min=5;
sec=0;
sec_ge=0; //秒的个位和十位
sec_shi=0;
min_ge=5; //分的个位和十位
min_shi=0;
while(1) { if(time_set==0) //如果"调时"按键按下 {
delay(5); //延时去抖
if(time_set==0) state=2;
}
if(state==0) { TR0=0;
TR1=0;
display_pause();
}
if(state==1) { TR0=1;
TR1=0;
display_run();
}
if(state==2)
{ TR1=1;
time_modify(); } } } //--------------------------------------------------------------------
void init()
{ TMOD=0x11;
EA=1;
ET0=0;
ET1=0;
TH0=0x4d;
TL0=oxfc; //开总中断 //定义定时器 0 工定时器 1 作与方式 1 //定时器 0 赋初值
TH1=15536/256;
TL1=15536%256; //中断初始化
EX0=1;
PX0=0;
IT0=1;