1.cubemax配置
2.代码
#include "key.h"
struct keys_adc key_adc[9]={0,0};
uint16_t adc2_val[2];
void getadc(ADC_HandleTypeDef* hadc)
{
for(int i=0;i<2;i++)
{
HAL_ADC_Start(hadc);
adc2_val[i]=HAL_ADC_GetValue(hadc);
}
}
uint8_t key_read_adc()
{
if(adc2_val[1]<250)return 1;
else if(adc2_val[1]<700)return 2;
else if(adc2_val[1]<1400)return 3;
else if(adc2_val[1]<1900)return 4;
else if(adc2_val[1]<2500)return 5;
else if(adc2_val[1]<3000)return 6;
else if(adc2_val[1]<3600)return 7;
else if(adc2_val[1]<4000)return 8;
else return 0;
}
void key_serv_adc()
{
uint8_t key_val=key_read_adc();
if(key_val!=0)
{
key_adc[key_val].age++;
if(key_adc[key_val].age==2)key_adc[key_val].flag=1;
}
else{
for(int i=0;i<9;i++)key_adc[i].age=0;
}
}
struct keys_adc{
uint8_t age;
uint8_t flag;
};
void key_serv_adc(void);
void getadc(ADC_HandleTypeDef* hadc);
extern struct keys_adc key_adc[];
extern uint16_t adc2_val[];
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);//校准adc2
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM4)
{
getadc(&hadc2);
key_serv_long();
key_serv_adc();
}
}
if(key_adc[1].flag==1)
{
sprintf(text,"key_adc1 down ");
LCD_DisplayStringLine(Line8,(uint8_t *)text);//局部刷新
key_adc[1].flag=0;
}
if(key_adc[2].flag==1)
{
sprintf(text,"key_adc2 down ");
LCD_DisplayStringLine(Line8,(uint8_t *)text);//局部刷新
key_adc[2].flag=0;
}
if(key_adc[8].flag==1)
{
sprintf(text,"key_adc8 down ");
LCD_DisplayStringLine(Line8,(uint8_t *)text);//局部刷新
key_adc[8].flag=0;
}