第十一集 矩阵按键 课后作业

我这里使用12345分别对应5种模式,对应的工作时间分别为:5秒,10秒,15秒,20秒,25秒。
开始按键为0。
使用了四个函数加上之前的595数码管显示函数。
mod_task:模式的选择
void mod_task(void){if(key_numb10>0&&key_numb10<6){
Key_vol3++;
if(Key_vol3==5){ mod = key_numb10;
start = 0;
finish=0;
}
}
mod = key_numb10;
start = 0;
finish=0;
}
}
else if(key_numb10==0){
Key_vol3++;
if(Key_vol3==5){ start = 1;
finish=0;
if(mod==1){
CoutDown_time=5;
}
else if(mod==2){
CoutDown_time=10;
}
else if(mod==3){
CoutDown_time=15;
}
else if(mod==4){
CoutDown_time=20;
}
else if(mod==5){
CoutDown_time=25;
}
}
}
else{
Key_vol3=0;
}
start = 1;
finish=0;
if(mod==1){
CoutDown_time=5;
}
else if(mod==2){
CoutDown_time=10;
}
else if(mod==3){
CoutDown_time=15;
}
else if(mod==4){
CoutDown_time=20;
}
else if(mod==5){
CoutDown_time=25;
}
}
}
else{
Key_vol3=0;
}
}
CountDown_Task:倒计时
void CountDown_Task(void){ if(start==1){
CoutDown_time--;
if( CoutDown_time==0){
finish=1;
start=0;
}
if(start==1){
CoutDown_time--;
if( CoutDown_time==0){
finish=1;
start=0;
}
}
}
数码管显示
void Seg_Task2(void){switch(Seg_no){
case 0: Display_Seg( SEG_NUMB[17], ~T_NUM[0]); break;
case 1: Display_Seg( SEG_NUMB[17], ~T_NUM[1]); break;
case 2: Display_Seg( SEG_NUMB[17], ~T_NUM[2]); break;
case 3: Display_Seg( SEG_NUMB[17], ~T_NUM[3]); break;
case 4: Display_Seg( SEG_NUMB[17], ~T_NUM[4]); break;
case 5: Display_Seg( SEG_NUMB[17], ~T_NUM[5]); break;
case 6: if(start==0&&finish==0){ Display_Seg(SEG_NUMB[17], ~T_NUM[6]) ;}else if(start==1&&finish==0){Display_Seg( SEG_NUMB[CoutDown_time/10], ~T_NUM[6]);}else if(finish==1){ Display_Seg(SEG_NUMB[17], ~T_NUM[6]) ;}break;
case 7: if(start==0&&finish==0){ Display_Seg( SEG_NUMB[mod], ~T_NUM[7]) ;}else if(start==1&&finish==0){Display_Seg( SEG_NUMB[CoutDown_time%10], ~T_NUM[7]);}else if(finish==1){ Display_Seg(SEG_NUMB[17], ~T_NUM[7]) ;}break;
}
Seg_no++;
if(Seg_no>7){
Seg_no=0;
}
}
switch(Seg_no){
case 0: Display_Seg( SEG_NUMB[17], ~T_NUM[0]); break;
case 1: Display_Seg( SEG_NUMB[17], ~T_NUM[1]); break;
case 2: Display_Seg( SEG_NUMB[17], ~T_NUM[2]); break;
case 3: Display_Seg( SEG_NUMB[17], ~T_NUM[3]); break;
case 4: Display_Seg( SEG_NUMB[17], ~T_NUM[4]); break;
case 5: Display_Seg( SEG_NUMB[17], ~T_NUM[5]); break;
case 6: if(start==0&&finish==0){ Display_Seg(SEG_NUMB[17], ~T_NUM[6]) ;}else if(start==1&&finish==0){Display_Seg( SEG_NUMB[CoutDown_time/10], ~T_NUM[6]);}else if(finish==1){ Display_Seg(SEG_NUMB[17], ~T_NUM[6]) ;}break;
case 7: if(start==0&&finish==0){ Display_Seg( SEG_NUMB[mod], ~T_NUM[7]) ;}else if(start==1&&finish==0){Display_Seg( SEG_NUMB[CoutDown_time%10], ~T_NUM[7]);}else if(finish==1){ Display_Seg(SEG_NUMB[17], ~T_NUM[7]) ;}break;
}
Seg_no++;
if(Seg_no>7){
Seg_no=0;
}
}
juzhenjianpan:矩阵键盘显示
void juzhenjianpan(){///第一步:将列设置为低电平Col1=0;
Col2=0;
Col3=0;
Col4=0;
Row1=1;
Row2=1;
if(Row1==0||Row2==0){
if(Row1==0&&Row2==0){} //如果两行都有按键按下,不处理
else {
if(Row1==0){key_numb10=0;}
else if(Row2==0){key_numb10=4;}
Col1=1;
Col2=1;
Col3=1;
Col4=1;
Row1=0;
Row2=0;
if(Col1==0){ //判断哪一列叠加按键的序号
}else if(Col2==0){
key_numb10=key_numb10+1;
}else if(Col3==0){
key_numb10=key_numb10+2;
}else if(Col4==0){
key_numb10=key_numb10+3;
}
}
Col1=0;
Col2=0;
Col3=0;
Col4=0;
Row1=1;
Row2=1;
}
else{key_numb10 =0xff;}
Col1=0;
Col2=0;
Col3=0;
Col4=0;
Row1=1;
Row2=1;
if(Row1==0||Row2==0){
if(Row1==0&&Row2==0){} //如果两行都有按键按下,不处理
else {
if(Row1==0){key_numb10=0;}
else if(Row2==0){key_numb10=4;}
Col1=1;
Col2=1;
Col3=1;
Col4=1;
Row1=0;
Row2=0;
if(Col1==0){ //判断哪一列叠加按键的序号
}else if(Col2==0){
key_numb10=key_numb10+1;
}else if(Col3==0){
key_numb10=key_numb10+2;
}else if(Col4==0){
key_numb10=key_numb10+3;
}
}
Col1=0;
Col2=0;
Col3=0;
Col4=0;
Row1=1;
Row2=1;
}
else{key_numb10 =0xff;}
}
附件:test.rar