編輯語:
芯片開放社區(qū)(OCC)面向廣大開發(fā)者推出應(yīng)用實(shí)戰(zhàn)系列內(nèi)容,通過分享開發(fā)者實(shí)戰(zhàn)開發(fā)案例,總結(jié)應(yīng)用開發(fā)經(jīng)驗(yàn),梳理開發(fā)中的常見問題及解決方案,為后續(xù)參與的開發(fā)者提供更多參考與借鑒。
本文是關(guān)于開發(fā)者 kit7828基于BL606P-DVK開發(fā)板實(shí)戰(zhàn)開發(fā)的系列文章中的第三篇,主要介紹了ADC Key按鈕例程,后面還會持續(xù)更新該開發(fā)者的測評內(nèi)容,敬請期待!
BL606P的ADC按鍵都接在IO管腳上的GPIO16,需要設(shè)置跳線帽。根據(jù)分壓電阻網(wǎng)絡(luò)獲取不同的電壓值,通過AD轉(zhuǎn)換值區(qū)分按下了哪個按鍵。
01硬件及連接
根據(jù)官方提供的資料,可以看到如下的原理圖
ADC的管腳使用的是GPIO16,需要設(shè)置跳線帽。
KEY_IN通過FPC連接線連接至KEY
而key連接至按鍵電阻分壓網(wǎng)絡(luò)
通過不同大的分壓,確定哪個按鍵按下
02軟件實(shí)現(xiàn)
平頭哥官網(wǎng)給出的ADC例程
具體實(shí)現(xiàn)代碼
CDK中具體代碼為:
2.1 設(shè)置管腳
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() { //持續(xù)檢測按鍵次數(shù) #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運(yùn)行后效果
按鍵檢測過程中,由于運(yùn)用ADC檢測電壓,會出現(xiàn)浮動情況,比較好的解決辦法是多讀數(shù)幾次,取平均值。
審核編輯:湯梓紅
-
adc
+關(guān)注
關(guān)注
98文章
6495瀏覽量
544461 -
音視頻
+關(guān)注
關(guān)注
4文章
471瀏覽量
29872 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5032瀏覽量
97371 -
key
+關(guān)注
關(guān)注
0文章
49瀏覽量
12826 -
按鍵檢測
+關(guān)注
關(guān)注
0文章
23瀏覽量
4834
原文標(biāo)題:應(yīng)用速遞 | 博流BL606P音視頻開發(fā)板:三、ADC Key按鈕例程
文章出處:【微信號:芯片開放社區(qū),微信公眾號:芯片開放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論