好几年前,给客户设计了一款无线麦。没想到,硬件设计出来了,但是软件没找到人设计。刚开始,我想尝试自己调软件,可是出师不利,第一个看似简单的功能,短按开关机,我调了几天,都没能准确调出来。后来客户等不及了,就自己找人调了。
多年以后的今天,我又拿出来尝试调试,有心种花花不开,无心插柳柳成荫,短按开关机这个功能居然调好了。
开关机控制电路。
PCB。
按键扫描程序。
主程序。
参考代码:
UINT8 Key_Scan (void)
{ UINT8 key_value=0;
if(POWER_ON==0) //
{
num_check++;
if(num_check==3000) //
{
if(POWER_ON==0)
{
key_flag=1;
}
}
if(num_check>10000) //
{
num_check=0;
key_flag=0;
Exit_Counter++;
if(Exit_Counter>10)
{
Exit_Counter=0;
if(POWER_ON==0) key_value=2;
}
}
}
else
{
num_check=0;
if(key_flag==1)
{
key_flag=0;
key_value=1;
}
}
return(key_value);
}
void main (void)
{
SYSCLK_Init ();
PORT_Init ();
POWER_OFF =1;
while (1)
{
LED_Dis();
switch(Key_Scan())
{
case 1 : POWER_OFF =0; break;
case 2 : break;
case 3 : break;
default : break;
}
}
}
总结,以前在调试软件时,思维只局限在软件层面,没有结合硬件。以前调试时,一直都是在想方设法区分出第一次短按和第二次短按。第一次短按是开机,第二次短按就是关机。而我现在不再考虑如何去区分第一次短按和第二次短按,只需判断出短按,然后就关机即可。