欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機根據按鍵按下的狀態獲得按鍵標志源程序
[打印本頁]
作者:
醬油兌啤酒
時間:
2020-3-3 15:47
標題:
單片機根據按鍵按下的狀態獲得按鍵標志源程序
idata KEY_FLAG key_flag;
/************************************************************
* 函數名稱:按鍵掃描
* 描 述:根據按鍵按下的狀態獲得按鍵標志
* 輸 入:無
* 輸 出:無
************************************************************/
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; // 消抖定時時間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; // 被按下沒開始長按計時
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)) // 放開的時候
{
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;
}
}
/************************************************************
* 函數名稱:按鍵任務處理
* 描 述:根據按鍵掃描的結果處理對應的按鍵任務
* 輸 入:無
* 輸 出:無
************************************************************/
void key_task(void)
{
/*按鍵任務*/
if (time_out_flag)
{
time_out_flag = 0;
switch(key_flag.thick)
{
case 1:
user_data_fill(pwm_value); //初始化要發送的5bytes數據
RF_Send_Data_To_hardware(); //RF 開始發送給硬件
key_flag.thick = 0;
break;
default:
key_flag.thick = 0;
break;
}
}
if (key_flag.long_press == 1) // 如果長按釋放了,清楚長按標志位
{
user_flag |= 0x01; // PWM調光標志置位
}
else
user_flag &= 0xFE; // PWM調光標志清零
}
復制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1