4个按键 K1 K2 K3 K4 其中 K1是开启和暂停键(本来想长按开显示短按启动定时器 新手还没这么去编程),K2 K3 K4 按键每个按键下可以选择工作时长:按一下能切 5分钟 10分钟 15分钟 K2对应一个IO口驱动三极管 K3K4都是一样的(工作时长略微不同而已)。 现在遇到的问题点是, 1.K2选好时间档位,我按下K1开关/暂停 键,正常运行倒计时,时间没到00能正常启动/暂停,到00了选其他时间档位就不能正常启动了倒计时。。。2.K2控制的输出IO口置高,然后其他2个输出口为0但是实际编出来的效果是暂停了 K2控制的IO口还是输出高。。。不同按键单独控制一个IO口 暂停时关闭,启动是打开,思路是有,但是C语音编程就是没效果。。。一直查资料2天了没进展,附上 按键和定时器的编码
单片机源程序如下:
void Key_Event_Handle()
{
if((K1==0) (munite_counts!=0))
{
DelayMS(10);
if(K1==0)
{
while(!K1);
ET0=~ET0;
TR0=~TR0;
/@@* if((flag==1) (TR0==1))
{
flag=0;
SONIC=1;
HEAT=0;
UV=0;
}
if((flag1==1) (TR0==1))
{
flag1=0;
SONIC=0;
HEAT=1;
UV=0;
}
if((flag2==1) (TR0==1))
{
flag2=0;
SONIC=0;
HEAT=0;
UV=1;
} */
}
}
if(K2==0)
{
DelayMS(10);
if(K2==0)
{
flag=1;
flag1=0;
flag2=0;
K2num++;
while(!K2);
K3num=0;
K4num=0;
// ET0=0;
// TR0=0;
if(K2num==1)
{
munite_counts=3;
Second_Counts=0;
}
if(K2num==2) //
{
munite_counts=10;
}
if(K2num==3) //
{
munite_counts=15;
}
if(K2num==4) //
{
munite_counts=20;
}
if(K2num==5) //
{
K2num=0;
munite_counts=2;
}
}
Key_Flag_Idx=0;
i=0;
}
if(K3==0)
{
DelayMS(10);
if(K3==0)
{
flag=0;
flag1=1;
flag2=0;
K3num++;
while(!K3);
K2num=0;
K4num=0;
//ET0=0;
//TR0=0;
if(K3num==1)
{
munite_counts=2;
Second_Counts=0;
}
if(K3num==2) //
{
munite_counts=10;
}
if(K3num==3) //
{
munite_counts=20;
}
if(K3num==4) //
{
munite_counts=30;
}
if(K3num==5) //
{
K3num=0;
munite_counts=3;
}
}
Key_Flag_Idx=0;
i=0;
}
if(K4==0)
{
DelayMS(10);
if(K4==0)
{
flag=0;
flag1=0;
flag2=1;
while(!K4);
K2num=0;
K3num=0;
//ET0=0;
//TR0=0;
munite_counts=1;
Second_Counts=0;
}
Key_Flag_Idx=0;
i=0;
}
}
void DSY_Refresh() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
i++;
if(i==2)
{
i=0;
Second_Counts++;
if(Second_Counts==60)
{
Second_Counts=0;
munite_counts--;
if(munite_counts==0)
{
TR0=0;
}
}
}
}