master的電視晶元v39的按鍵處理分析
不同的按鍵按下去讀到不同的ad值,反過來根據按鍵值就可以得出是哪個按鍵。
ad值有一定範圍。程式裡一般是該值的容忍度,認為只要在容忍度範圍內就是這個按鍵的值。
過程為為檢測到按下 開始記錄 檢測到抬起後,檢測記錄的按鍵值是否一樣。
探測到按鍵值後,全域性標記g_bkeydetect會被置位,handler處理函式處理後再清零。這就像生產者和消費者。
按鍵產生函式有bug,可能產生串鍵。看著改吧
1. ad值集合
下面**是按鍵會觸發的ad值集合。
byte code tadckeylevel[adc_key_channel_num][8] =
, ,
};
如
#define key1_ad_l0 0x01
#define key1_ad_l1 0x26
#define key1_ad_l2 0x4d
#define key1_ad_l3 0x74
#define key1_ad_l4 0x9b
#define key1_ad_l5 0xb9
#define key1_ad_l6 0xd8
#define key1_ad_l7 0xef
2. ad值的容忍度#define key_ad_delta 0x05 // tolerance
3. ad值的獲取if (ucadclv < (tadckeylevel[ucadcchannel][0] + key_ad_delta))
return tadckeylevel[ucadcchannel][0];
else if ((tadckeylevel[ucadcchannel][1]-key_ad_delta) < ucadclv && ucadclv < (tadckeylevel[ucadcchannel][1]+key_ad_delta))
return tadckeylevel[ucadcchannel][1];
...
4. 將ad值轉換為按鍵if(keyvalue<=key1_ad_l0)
keystatus |= tadckeyflag[0][0];
else if(keyvalue<=key1_ad_l1)
keystatus |= tadckeyflag[0][1];
...
按鍵定義如下
#define adc_key_1_l0_flag key_power
#define adc_key_1_l1_flag key_down
#define adc_key_1_l2_flag key_up
#define adc_key_1_l3_flag key_right
#define adc_key_1_l4_flag key_left
#define adc_key_1_l5_flag key_menu
#define adc_key_1_l6_flag key_source
#define adc_key_1_l7_flag key_pip
typedef enum _keyscantype
keyscantype;
5. 按鍵產生函式void keydetectpoll(void)
}else}}
}else // new key pressed
}else // no key pressed
}else // different
g_uckeycounter = key_debounce_time; // next time counter
}}
魔獸按鍵精靈 V2 0 修正1
按下鍵盤時,鍵值就是鍵盤識別 紅色字型 處的數值 進入遊戲後,請按 ctrl q 開啟鍵盤設定,再按一次關閉 任何時候,請按 scroll 即可撥出本系統窗體 按一次home鍵開啟已方血條 再按一次關閉 按一次end鍵開啟敵人血條 再按一次關閉 請在輸入框填入鍵值 並儲存,自定義鍵盤ok 禁用win...
原子哥的按鍵掃瞄分析
返回值 0,沒有任何按鍵按下 key0 pres,key0按下 key1 pres,key1按下 wkup pres,wk up按下 注意此函式有響應優先順序,key0 key1 wk up u8 key scan u8 mode mode 0,不支援連續按 1,支援連續按 if key up 1 ...
39 逗號操作符的分析
注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 逗號操作符 1 逗號操作符 可以構成逗號表示式 逗號表示式用於將多個子表示式連線為乙個表示式 逗號表示式的值為最後乙個子表示式的值 逗號表示式中的前n 1個子表示式可以沒有...