void delay(unsigned int k)//延时函数10ms
{
unsigned int i,j;
for (i=0;i<k;i++) {for(j=0;j<240;j++){;}}
}
/******中断显示函数******/
void timer1(void) interrupt 3 using 2//显示
{
unsigned int shiwei,gewei,baiwei;
gewei=time_set%10;
shiwei=(time_set%100)/10;
baiwei=time_set/100;
if (led_flag>3){led_flag=0;}
switch (led_flag)
{
case 0:{P0=SEG[gewei];P20=0;P21=1;P22=1;break;}
case 1:{P0=SEG[shiwei];P20=1;P21=0;P22=1;break;}
case 2:{P0=SEG[baiwei];P20=1;P21=1;P22=0;break;}
default:break;
}
led_flag++;
TR1=1;//开定时器1
TH1=0xec;//定时器付初值
TL1=0x66;
}
/******发脉冲函数********/
void timer0 (void) interrupt 1 using 1//发脉冲
{
if (run_flag==1)
{
if (timer0_cnt==cnt)
{P23=0;nop4;P23=1;timer0_cnt=0;maichongshu++;//***P23发脉冲***/
if (maichongshu==200) {maichongshu=0;TR0=0;run_flag=0;}
}
timer0_cnt++;
}
if (run_flag==0){;}
TR0=1;
TH0=0xec;
TL0=0x77;//重装初值,开定时器0
}
/****************按键处理函数************/
void key(void)
{
delay(10);//延时函数;防抖动
if (P1!=0xff)
{
if (run==0)
{p=time_set/maichong;//每次脉冲的时间
pt=p*1000;//换算成ms
cnt=pt/5;//定时器需要中断多少次才发一次脉冲
run_flag=1;
}
if ((time_add==0)&&(run_flag==0)) {time_set++;if (time_set>120){time_set=120;}};
if ((time_sub==0)&&(run_flag==0)){time_set--;if (time_set<30) {time_set=30;}};
}
}
/*******************主函数*******************/
void main()
{
run_flag=0;
systemint();//系统初始化函数
while(1)
{
if (run_flag==0)
{P1=0xff;
if(P1!=0xff) key();//调用按键处理函数
}
}
}