【蓝桥杯嵌入式笔记】(十二)ADC按键

 

一、原理图

d107abf6c82a89f26ab09e9690a24449.png

需要盖帽PA5—AKEY上,此时,按扩展板上的8个按钮,会输出相应的ADC值,ADC同样是12位。

二、CubeMX配置

9b39ec2e809831dee313cb456d5b261c.png

选用即可。

三、代码

标准化,开启adc(第一个在adc的ex.h里面,第二个在adc.h里面)

HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
HAL_ADC_Start(&hadc2);

在主循环不断取值

HAL_ADC_Start(&hadc2);
adc_value=HAL_ADC_GetValue(&hadc2);
HAL_Delay(20);//延迟时间长,值稳定

开始可以显示取值,按下不同按键,记录各个按键的adc值,再划分范围。

ADC按键扫描。 

unsigned char adc_buttin()
{
	unsigned char key_result1=0;
	if( adc_value<100 )	key_result1=1;
	else if( adc_value<800 )	key_result1=2;
	else if( adc_value<1500 )	key_result1=3;
	else if( adc_value<2000 )	key_result1=4;
	else if( adc_value<2500 )	key_result1=5;
	else if( adc_value<3000 )	key_result1=6;
	else if( adc_value<3700 )	key_result1=7;
	else if( adc_value<3990 )	key_result1=8;
	return key_result1;
}

与按键一致,放入定时器

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if( htim->Instance==TIM4 )
	{
		static unsigned char key_old=0;
		unsigned char key_new,key_up,key_down;
		key_new=key_scan();
		key_down=key_new&(key_new^key_old);
		key_up=~key_new&(key_new^key_old);
		key_old=key_new;
		
		if( key_up )
		{
			key=key_up;
		}
		
		static unsigned char adc_old=0;
		unsigned char adc_new,adc_up,adc_down;
		adc_new=adc_buttin();
		adc_down=adc_new&(adc_new^adc_old);
		adc_up=~adc_new&(adc_new^adc_old);
		adc_old=adc_new;
		
		if( adc_up )
		{
			adc_key=adc_up;
		}
	}
}

然后主循环按键使用

switch(adc_key)
	{
		case 1:
		{
			num++;
			adc_key=0;
		}
		break;
		case 2:
		{
			num--;
			adc_key=0;
		}
		break;
		case 3:
		{
			num=300;
			adc_key=0;
		}
		break;
		case 4:
		{
			num=400;
			adc_key=0;
		}
		break;
		case 5:
		{
			num=500;
			adc_key=0;
		}
		break;
		case 6:
		{
			num=600;
			adc_key=0;
		}
		break;
		case 7:
		{
			num=700;
			adc_key=0;
		}
		break;
		case 8:
		{
			num=800;
			adc_key=0;
		}
		break;
		
	}

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值