山景BP1048B2电位器
电位器使能后是默认功能比如GPIOA27 默认调节MIC_vol,怎样设置成想要的功能,比如改为music_vol .有没有使用过或接触过的朋友给指点指点。/**电位器功能选择**/
#define CFG_ADC_LEVEL_KEY_EN
#ifdef CFG_ADC_LEVEL_KEY_EN
#defineADCLEVL_CHANNEL_MAP (ADC_GPIOA28|ADC_GPIOA27|ADC_GPIOA29|ADC_GPIOA30) //(ADC_GPIOA20|ADC_GPIOA21|ADC_GPIOA22)//选择GPIOA20,GPIOA21,GPIOA22口做3路ADC电位器
#define MAX_ADCLEVL_LEVEL_VAL 4096//电位器最大电压值:4096对应3.3v
#define MAX_ADCLEVL_STEP_NUMBER CFG_PARA_MAX_VOLUME_NUM//电位器调节最大步数,范围:0-31
#define DISTANCE_BETWEEN_STEP 5//电位器滤波采样值://5//15//25 步距
#endif
功能配置不知在哪弄
在adc_levels.c里面可以自行配置:ADCLevels_Msg_Ch,然后看一下AdcLevelKeyProcess函数就明白了… Refee 发表于 2025-5-9 11:54
在adc_levels.c里面可以自行配置:ADCLevels_Msg_Ch,然后看一下AdcLevelKeyProcess函数就明白了… ...
感谢,但是没看很明白,应该是自动按顺序扫描处理吧。
/*
****************************************************************
* adc电位器扫描处理
*
*
****************************************************************
*/
uint16_tAdcLevelKeyProcess(void)
{
uint16_t Val;
uint8_t i_count;
//if(!IsTimeOut(&ADCLevelsScanTimer))
//{
// return ;
//}
//TimeOutSet(&ADCLevelsScanTimer, ADCLevelsTimer);
if(ADCLevelChannelTotal == 0) return MSG_NONE;
ADCLevelsScanCount++;
if(ADCLevelsScanCount >= ADCLevelChannelTotal)
{
ADCLevelsScanCount = 0;
}
Val = GetAdcVal(ADCLevelsChannel);
for(i_count=0;i_count < MAX_ADCLEVL_STEP_NUMBER;i_count++)
{
uint32_t min = MAX_ADCLEVL_LEVEL_VAL/MAX_ADCLEVL_STEP_NUMBER*i_count - DISTANCE_BETWEEN_STEP;
uint32_t max = MAX_ADCLEVL_LEVEL_VAL/MAX_ADCLEVL_STEP_NUMBER*(i_count+1) + DISTANCE_BETWEEN_STEP;
if(i_count == 0)
{
min = 0;
}
if(i_count == (MAX_ADCLEVL_STEP_NUMBER-1))
{
max = MAX_ADCLEVL_LEVEL_VAL;
}
if(Val >= min && Val <= max)
{
break;
}
}
if(i_count != MAX_ADCLEVL_STEP_NUMBER)
{
if(i_count != ADCLevels_STEP_Store )
{
repeat_count++;
if(repeat_count > how_many_times_have_effect)
{
ADCLevels_STEP_Store =i_count;
APP_DBG("Val = %d\n", Val);
APP_DBG("i_count = %d\n", i_count);
APP_DBG("ADCLevelsScanCount = %d\n", ADCLevelsScanCount);
return (ADCLevels_Msg_Ch+i_count);
}
}
else
{
repeat_count = 0;
return MSG_NONE;
}
}
return MSG_NONE;
}
页:
[1]