/****************************************************************************//**********************************定时计数器1定时5us溢出中断**********************/ /*****函数名称:void timer1(void) interrupt 3 ******功能: ******参数传递:无 ******返回值: 无 ******创建时间:2009.6.1 ******修改时间: ******/ /***************************************************************************/ void timer1(void) interrupt 3 { //静态变量,退出程序后,值保留 static unsigned char Bit=0; //标记数码管片选位 static unsigned char count1=0; //防抖程序计数标志 //再次装入计数初值 TH1=THCO; TL1=TLCO; //扫描显示控制部分 Bit++; if(Bit>=4)Bit=0; P1|=0x0f; //先关位码 P0=Duan[Data_Buffer[Bit]]; //开段码 switch(Bit) //送位码 { case 0: P10=0;break; case 1: P11=0;break; case 2: P12=0;break; case 3: P13=0;break; } //功能调节按键控制部分 if(Mode==0||UP==0||DN==0) { count1++; if(count1>=30) //消抖处理 { count1=0; //读取分与秒的值 Min = Read1302(READ_MINUTE); Sec = Read1302(READ_SECOND); //显示时钟标志,清零不显示走时或调节 flag_timer = 0; //开启走时标志,置1,进入调节状态,且不走时 timer=1; if(timer==1) { if(Mode==0) { switch(flag_mode) { case 1: flag_mode = 2; flag = 1; flag_timer = 1;//显示时钟设置 Set_flag=0; //不显示闹钟 set_timer=0; //不显示走时 timer=1; //且不走时 led1 = 0; break; case 2: flag_mode = 3; flag = 1; flag_timer = 1;//显示时钟设置 Set_flag=0; //不显示闹钟 set_timer=0; //不显示走时 timer=1; //且不走时 led2 = 0; break; case 3: flag_mode = 4; flag = 0; //不显示时钟设置 Set_flag=1; //显示闹钟 timer=1; //不走时 led3 = 0; break; case 4: flag_mode = 5; flag = 0; //不显示时钟设置 Set_flag=1; //显示闹钟 timer=1; //不走时 led4 = 0; break; case 5: flag_mode = 1; Set_flag=0; //不显示闹钟 flag_timer = 1; flag = 1; set_timer=1; //显示走时 timer=0; //不再是调节模式 Initial(); break; default: break; } } else if(DN==0) //下调 { flag = 1; flag_timer = 1; Set_flag=0; if(flag_mode==2) { flag = 1; flag_timer = 1; Set_flag=0; if(Min>0) Min--; else Min = 59; R_Initial(); //禁止走时 } else if(flag_mode==3) { flag = 1; flag_timer = 1; Set_flag=0; if(Sec>0) Sec--; else Sec = 59; R_Initial(); //禁止走时 } else if(flag_mode==4) { flag = 0; Set_flag=1; if(Set_Min>0) Set_Min--; else Set_Min = 59; R_Initial(); //禁止走时 } else if(flag_mode==5) { flag = 0; Set_flag=1; if(Set_Sec>0) Set_Sec--; else Set_Sec = 59; R_Initial(); //禁止走时 } } else if(UP==0) //上调 { flag = 1; flag_timer = 1; Set_flag=0; if(flag_mode==2) { if(Min<59) Min++; else Min = 0; R_Initial(); //禁止走时 } else if(flag_mode==3) { flag = 1; flag_timer = 1; Set_flag=0; if(Sec<59) Sec++; else Sec = 0; R_Initial(); //禁止走时 } else if(flag_mode==4) { flag = 0; Set_flag=1; if(Set_Min<59) Set_Min++; else Set_Min = 0; R_Initial(); //禁止走时 } else if(flag_mode==5) { flag = 0; Set_flag=1; if(Set_Sec<59) Set_Sec++; else Set_Sec = 0; R_Initial(); //禁止走时 } } } } } else flag=1; } /***************************************************************************/ /**************************************end**********************************/ |