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]);
- }
- }</i>
复制代码
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);
复制代码
总结
|