標(biāo)題:
單片機(jī)根據(jù)按鍵按下的狀態(tài)獲得按鍵標(biāo)志源程序
[打印本頁(yè)]
作者:
醬油兌啤酒
時(shí)間:
2020-3-3 15:47
標(biāo)題:
單片機(jī)根據(jù)按鍵按下的狀態(tài)獲得按鍵標(biāo)志源程序
idata KEY_FLAG key_flag;
/************************************************************
* 函數(shù)名稱:按鍵掃描
* 描 述:根據(jù)按鍵按下的狀態(tài)獲得按鍵標(biāo)志
* 輸 入:無(wú)
* 輸 出:無(wú)
************************************************************/
void key_scan(void)
{
uint8_t key_value = 0;
static uint8_t key_temp = 0;
static uint8_t status = KEY_SET;
key_value = P0&0x04;
switch(status)
{
case KEY_SET: if (key_value)
{
time_out = 0;
debounce_time = 320; // 消抖定時(shí)時(shí)間32ms
status = KEY_UP;
}
break;
case KEY_UP: if (debounce_time_flag)
{
if (key_value == key_temp)
status = KEY_DOWN;
else
status = KEY_SET;
}
break;
case KEY_DOWN: if (key_value == key_temp) // 還是上次的按鍵值
{
long_time = 10000; // 被按下沒(méi)開(kāi)始長(zhǎng)按計(jì)時(shí)
status = KEY_RELEASE;
}
else if (!key_value)
status = KEY_SET;
break;
case KEY_RELEASE: if (!long_time_flag)
{
if ((key_value != key_temp)&&(key_value == 0)) // 放開(kāi)的時(shí)候
{
key_flag.thick++;
time_out = 2000;
long_time = 0;
status = KEY_SET;
}
}
else
{
key_flag.long_press = 1;
if (key_value == 0)
{
status = KEY_SET;
key_flag.long_press = 0;
long_time_flag = 0;
}
}
break;
default:
break;
}
key_temp = key_value;
if (long_time_flag||time_out_flag)
{
key_temp = 0;
}
}
/************************************************************
* 函數(shù)名稱:按鍵任務(wù)處理
* 描 述:根據(jù)按鍵掃描的結(jié)果處理對(duì)應(yīng)的按鍵任務(wù)
* 輸 入:無(wú)
* 輸 出:無(wú)
************************************************************/
void key_task(void)
{
/*按鍵任務(wù)*/
if (time_out_flag)
{
time_out_flag = 0;
switch(key_flag.thick)
{
case 1:
user_data_fill(pwm_value); //初始化要發(fā)送的5bytes數(shù)據(jù)
RF_Send_Data_To_hardware(); //RF 開(kāi)始發(fā)送給硬件
key_flag.thick = 0;
break;
default:
key_flag.thick = 0;
break;
}
}
if (key_flag.long_press == 1) // 如果長(zhǎng)按釋放了,清楚長(zhǎng)按標(biāo)志位
{
user_flag |= 0x01; // PWM調(diào)光標(biāo)志置位
}
else
user_flag &= 0xFE; // PWM調(diào)光標(biāo)志清零
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1