要设计一个产品,只有一个按键,长按开机,再长按就关机(关机电路上的电源需要断开)。那么硬件需要怎么设计呢,软件又可以怎么做呢?
硬件电路设计如下。
硬件PCB设计如下。
硬件的工作原理是这样的,长按按键SW1时,MOS管Q1导通,电源VBAT+给系统供电,单片机开始初始化,置高电平给POWER-OFF,此时三极管Q2满足导通条件,Q2导通后,松开按键SW1,PMOS管Q1仍然可以保持导通状态,电源VBAT+维持给系统供电,这样就完成了开机的操作。开机后,如果长按按键SW1,POWER-ON就会被拉低,单片机检测到
POWER-ON/OFF被拉低后,就置低电平给POWER-EN,三极管Q5截止,松开按键S5后,PMOS管Q7截止,系统的供电断开,这样就完成了关机的操作。
软件的设计可以参考以下的代码。
按键扫描子程序:
UINT8 Key_Scan (void) { UINT8 key_value=0; if(POWER_ON==0) { num_check++; if(num_check>=10000) { if(POWER_ON==0) { key_flag=1; } } } else { num_check=0; if(key_flag) { key_flag=0; if(!key_flag1) { key_flag1=1; key_value=1; } else { key_flag1=0; key_value=3; } } } return(key_value); } 主程序: void main (void) { SYSCLK_Init (); PORT_Init (); while (1) { LED(); switch(Key_Scan()) { case 1 : POWER_OFF=1; break; case 2 : break; case 3: POWER_OFF=0; break; default : break; } } }
软硬件联调测试:
长按按键开机,
长按按键关机