编辑语:
芯片开放社区(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
+关注
关注
98文章
6483浏览量
544407 -
音视频
+关注
关注
4文章
469浏览量
29871 -
开发板
+关注
关注
25文章
5024浏览量
97349 -
key
+关注
关注
0文章
49浏览量
12825 -
按键检测
+关注
关注
0文章
23浏览量
4832
原文标题:应用速递 | 博流BL606P音视频开发板:三、ADC Key按钮例程
文章出处:【微信号:芯片开放社区,微信公众号:芯片开放社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论