在main函数while循环中调用 KeyDriver()函数,目前只能开机,不能长按按键关机
#define _KEY_C
#include "Key.h"
#include "config.h"
#include "Uart.h"
bit keysta = 1;
sbit PWR_key_det = P3^2;
sbit PWR_ON_SYS = P1^0;
sbit PWR_HOLD = P1^1;
bit istiming = 0;
unsigned long keydowntime = 0; //记录按键按下时间
void KeyDriver()
{
if(keysta == 1)
{
if(keydowntime >=1000 && PWR_ON_SYS ==0)
{
_nop_();
_nop_();
PWR_ON_SYS = 1; //按下按键1.2秒,PWR_ON_SYS拉高
istiming = 1;
keysta = 0;
}
else if(keydowntime >=1000 && PWR_ON_SYS == 1)
{
_nop_();
_nop_();
PWR_HOLD = 0;
}
else
{}
}
}
void KeyScan() //按键扫描函数
{
static unsigned char keybuf = 0xFF;
keybuf = (keybuf <<1) |PWR_key_det;
if(keybuf == 0x00)
{
keydowntime ++;//按键按下每次进入中断就加2
}
else if(keybuf == 0xFF)
{
keydowntime = 0;
keysta = 1;
}
else
{}
}
void ConfigTimer0()
{
AUXR &= 0x7F; //2ms定时
TMOD &= 0xF0;
TH0 = 0xF8;
TL0 = 0xCD;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}
void TM0_Isr() interrupt 1
{
KeyScan();
if(istiming)
{
keydowntime = 0;
}
TH0 = 0xF8;
TL0 = 0xCD;
TF0 = 0;
}