編輯語:
芯片開放社區(OCC)面向廣大開發者推出應用實戰系列內容,通過分享開發者實戰開發案例,總結應用開發經驗,梳理開發中的常見問題及解決方案,為后續參與的開發者提供更多參考與借鑒。
本文是關于開發者 kit7828基于BL606P-DVK開發板實戰開發的系列文章中的第三篇,主要介紹了ADC Key按鈕例程,后面還會持續更新該開發者的測評內容,敬請期待!
BL606P的ADC按鍵都接在IO管腳上的GPIO16,需要設置跳線帽。根據分壓電阻網絡獲取不同的電壓值,通過AD轉換值區分按下了哪個按鍵。
01硬件及連接
根據官方提供的資料,可以看到如下的原理圖
ADC的管腳使用的是GPIO16,需要設置跳線帽。
KEY_IN通過FPC連接線連接至KEY
而key連接至按鍵電阻分壓網絡
通過不同大的分壓,確定哪個按鍵按下
02軟件實現
平頭哥官網給出的ADC例程
具體實現代碼
CDK中具體代碼為:
2.1 設置管腳
void adcpin_init(void) { csi_pin_set_mux(GPIO_PIN_16, GPIO16_ADC_CH8); }
2.2 ADC初始化
void adckey_Init() { adc.port = 8; adc.config.sampling_cycle = 100; hal_adc_init(&adc); }
2.3 按鍵檢測代碼
#define KEY_NOTHING19 uint16_t GetKey() { //持續檢測按鍵次數 #define CHECKNUM 10 uint32_t value; uint16_t kval=0; uint16_t oldkey=KEY_NOTHING,i=0; hal_adc_value_get(&adc, &value, HAL_WAIT_FOREVER); kval = (value & 0xffff)>> 9; if(kvalCHECKNUM)i=CHECKNUM; } } else oldkey=KEY_NOTHING; return KEY_NOTHING; } ){>
2.4 按鍵判定代碼
keyval = GetKey(); if( keyval < 19) printf("Key Pressed: %d ", keyval); aos_msleep(5); switch (keyval) { case 0: printf("K4 Pressed. "); break; case 3: printf("K3 Pressed. "); break; case 8: printf("K6 Pressed. "); break; case 11: case 12: printf("K5 Pressed. "); break; case 17: printf("K7 Pressed. "); break; }
03運行后效果
按鍵檢測過程中,由于運用ADC檢測電壓,會出現浮動情況,比較好的解決辦法是多讀數幾次,取平均值。
審核編輯:湯梓紅
-
adc
+關注
關注
99文章
6534瀏覽量
545768 -
音視頻
+關注
關注
4文章
485瀏覽量
29982 -
開發板
+關注
關注
25文章
5121瀏覽量
98208 -
key
+關注
關注
0文章
51瀏覽量
12860 -
按鍵檢測
+關注
關注
0文章
24瀏覽量
4852
原文標題:應用速遞 | 博流BL606P音視頻開發板:三、ADC Key按鈕例程
文章出處:【微信號:芯片開放社區,微信公眾號:芯片開放社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論