STM32G4备战蓝桥杯嵌入式---模块配置---ADC_KEY(拓展板)
Posted 旺旺^淞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32G4备战蓝桥杯嵌入式---模块配置---ADC_KEY(拓展板)相关的知识,希望对你有一定的参考价值。
文章目录
ADC按键
1.模块引脚
使用PA5接上AKEY
2.Cubemx实现的配置
3.生成工程
1.ADC采集函数
采集50次
#define BTN_BUFF_LEN 50
uint16_t btn_buff[BTN_BUFF_LEN];
uint16_t Read_ADC()
uint16_t aa;
HAL_ADC_Start(&hadc2);
aa = HAL_ADC_GetValue(&hadc2);
HAL_ADC_Stop(&hadc2);
return aa;
2.ADC采集值处理
uint16_t Read_Btn(void)
uint16_t tmp;
uint8_t i = 0,j = 0;
for(i=0; i<BTN_BUFF_LEN; i++)
btn_buff[i] = Read_ADC();
for(i=0; i<=BTN_BUFF_LEN/2; i++)
for(j=0; j< BTN_BUFF_LEN-i-1; j++)
if(btn_buff[j+1] < btn_buff[j])
tmp = btn_buff[j+1];
btn_buff[j+1] = btn_buff[j];
btn_buff[j] = tmp;
if(BTN_BUFF_LEN % 2 == 0)
return(btn_buff[BTN_BUFF_LEN/2-1] + btn_buff[BTN_BUFF_LEN/2])/2;
else
return(btn_buff[BTN_BUFF_LEN/2]);
3.按键识别
uint8_t Scan_Btn(void)
uint16_t btn_tmp = 0;
btn_tmp = Read_Btn();
if(btn_tmp < 0x0FFF/14)
return 1;
else if((btn_tmp > 0x0FFF/14) && (btn_tmp < 0x0FFF/14*3))
return 2;
else if((btn_tmp > 0x0FFF/14*3) && (btn_tmp < 0x0FFF/14*5))
return 3;
else if((btn_tmp > 0x0FFF/14*5) && (btn_tmp < 0x0FFF/14*7))
return 4;
else if((btn_tmp > 0x0FFF/14*7) && (btn_tmp < 0x0FFF/14*9))
return 5;
else if((btn_tmp > 0x0FFF/14*9) && (btn_tmp < 0x0FFF/14*11))
return 6;
else if((btn_tmp > 0x0FFF/14*11) && (btn_tmp < 0x0FFF/14*13))
return 7;
else if((btn_tmp > 0x0FFF/14*13) && (btn_tmp < 0x0FDF))
return 8;
else
return 0; //error status & no key
4.按键控制
adc = Scan_Btn();
sprintf((char *)ass,"The key is press:%d",adc);
LCD_DisplayStringLine(Line5,ass);
HAL_Delay(200);
总结
以上是关于STM32G4备战蓝桥杯嵌入式---模块配置---ADC_KEY(拓展板)的主要内容,如果未能解决你的问题,请参考以下文章
STM32G4备战蓝桥杯嵌入式---模块配置---LIS302DL(拓展板)
STM32G4备战蓝桥杯嵌入式---模块配置---获取占空比(拓展板)