蓝桥杯嵌入式国赛模块——按键

本文硬件基于蓝桥杯嵌入式主板及其扩展板

硬件基础

扩展板按键的电路图如下:

图片[1]-蓝桥杯嵌入式国赛模块——按键-睿冰小站

通过该电路图可知,在扩展板上是用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
喜欢就支持以下吧
点赞17 分享
相关推荐