锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

通过电位器修改声音大小

时间:2022-09-20 04:00:00 电位器调到零电位器的类型

原则上,通过电位器修改声音大小是为了重写按钮类型,但按钮类型是一个旋钮,相当于一个滑动变阻器。旋转后,芯片读取的电压值正在发生变化们将根据不同的值进行下一步操作。
具体操作如下:
定义宏定义来管理是否打开旋转声控
#define POTENT_KEY 1
下一步是创建一个读取旋转数据的数据IO口,key_init()中:

#if POTENT_KEY     adc_ch |= BIT(ADCCH_PA7); #endif 

这样就创造了一个IO下一步是创建一个变量来承担变化值,get_adc_val()中:

#if POTENT_KEY     adc_cb.potent_val = (u8)(adc_cb.sfr[ADCCH_PA7]>>2);   #endif  

其实上面创造了一个IO需要注意的是,两个创建位置需要相应地读取电位器变化的电压。接下来是调用bsp_key_scan()中;

#if POTENT_KEY    sys_cb.potvol_lev = get_potent_val();///实时检测是否需要get_potent_val()需要自己定义    if(bef_val != sys_cb.potvol_lev)//表示检测到的值发生了变化,但并非每次变化都需要修改声音    { 
            step ;     if(step >= CNT_ElIMI)当变化次数达到一定范围时,需要修改声音大小。检测速度非常快,以防止系统误检测     { 
              if(sys_cb.potvol_lev > sys_cb.vol)      { 
              sys_cb.vol = sys_cb.potvol_lev;        msg_enqueue(MSG_POTENT_VOL_UP);      }      else if(sys_cb.potvol_lev < sys_cb.vol)       { 
               sys_cb.vol = sys_cb.potvol_lev;        msg_enqueue(MSG_POTENT_VOL_DOWN);      }    bef_val= sys_cb.potvol_lev;     }    } else { 
         step = 0; } #endif  

get_potent_val()函数的定义如下

#if POTENT_KEY
//AT(.com_text.port.key)
static u8 get_potent_val(void)
{ 
       
    if(adc_cb.potent_val/EVE_LEL >=  VOL_MAX)//adc_cb.potent_val/EVE_LEL其实就已经代表了转换后的声音大小
    { 
       
    		return 0;
    }
    else 
       	return VOL_MAX- adc_cb.potent_val/EVE_LEL;    
}
#endif // USER_ADKEY

之后再去定义两个消息需要干嘛就好了,消息的定义只需要仿照自带声音修改的操作即可。如果还想写得高级一点也是可以继续下一步开发的,具体操作可以自行实现。还不清楚的小伙伴可以添加我的个人微信 lqy—1997 (中间是三个英文的杠)进行交流。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章