本文硬件基于蓝桥杯嵌入式主板及其扩展板
硬件基础
扩展板按键的电路图如下:
![图片[1]-蓝桥杯嵌入式国赛模块——按键-睿冰小站](https://www.r6b.cn/wp-content/uploads/2022/05/19t01.jpg)
通过该电路图可知,在扩展板上是用AD采集来判断键值的,根据不同按键按下时的分压不同,从而判断出按下的是哪个按键。
代码编写
1.对adc采集到的值做中值滤波处理
uint16_t adc_lvbo(){
uint16_t i=0;
uint16_t j=0;
uint16_t adc_value[49];
uint16_t temp=0;
for(i=0;i<50;i++){
adc_value[i]=getadc();
}
for(i=0;i<=25;i++){
for(j=0;j<50-i-1;j++){
if(adc_value[j]>adc_value[j+1]){
temp=adc_value[j];
adc_value[j]=adc_value[j+1];
adc_value[j+1]=temp;
}
}
}
return (adc_value[24]+adc_value[25])/2;
}
2.进行键值判断
uint8_t key_value(){
uint16_t adc_value=0;
adc_value=adc_lvbo();
if(adc_value<0xFFF*0.07)
return 1;
if((adc_value>0xFFF*0.07)&&(adc_value<0xFFF*0.07*3))
return 2;
if((adc_value>0xFFF*0.07*3)&&(adc_value<0xFFF*0.07*5))
return 3;
if((adc_value>0xFFF*0.07*5)&&(adc_value<0xFFF*0.07*7))
return 4;
if((adc_value>0xFFF*0.07*7)&&(adc_value<0xFFF*0.07*9))
return 5;
if((adc_value>0xFFF*0.07*9)&&(adc_value<0xFFF*0.07*11))
return 6;
if((adc_value>0xFFF*0.07*11)&&(adc_value<0xFFF*0.07*13))
return 7;
if((adc_value>0xFFF*0.07*13)&&(adc_value<0x0F6F))
return 8;
else
return 0;
}
© 版权声明
文章版权归原作者所有,转载请注明出处。
THE END