123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #include "include.h"
- #if USER_KEY_KNOB_EN
- //16级旋钮
- AT(.com_rodata.port.key)
- const u8 tbl_knob_level_16[16 + 1] = {
- 0x02, 0x13, 0x24, 0x36, 0x47, 0x59, 0x6A, 0x7B,
- 0x8B, 0x9A, 0xA0, 0xB2, 0xC3, 0xD5, 0xE6, 0xF8,
- 0xFF,
- };
- void knob_init(void)
- {
- u16 adc_ch = 0;
- adc_ch |= BIT(ADCCH_PE5); //旋钮1
- adc_ch |= BIT(ADCCH_PE6); //旋钮2
- saradc_set_channel(adc_ch);
- }
- AT(.com_text.bsp.key)
- void knob_get_level(u16 adc_val, const u8 *knob_level, u8 *key_val)
- {
- u8 step = 0;
- if (s_abs((int)knob_level[*key_val] - (int)adc_val) > 4) { //取绝对值消抖
- while (adc_val > knob_level[step]) {
- step++;
- }
- *key_val = step;
- }
- }
- AT(.com_text.port.key)
- void knob_process(void)
- {
- u8 mic_vol_val = saradc_get_value8(ADCCH_PE5);
- u8 echo_level_val = saradc_get_value8(ADCCH_PE6);
- static u8 echo_level = USER_KEY_KNOB_LEVEL, mic_vol = USER_KEY_KNOB_LEVEL;
- knob_get_level(echo_level_val, tbl_knob_level_16, &echo_level);
- if (echo_level != sys_cb.echo_level) {
- sys_cb.echo_level = echo_level;
- msg_enqueue(EVT_ECHO_LEVEL);
- }
- knob_get_level(mic_vol_val, tbl_knob_level_16, &mic_vol);
- if (mic_vol != sys_cb.mic_vol) {
- sys_cb.mic_vol = mic_vol;
- msg_enqueue(EVT_MIC_VOL);
- }
- }
- #if USER_KEY_KNOB2_EN
- AT(.com_text.bsp.key)
- u16 knob_process2(u16 *key_val)
- {
- static u8 key_flag = 0;
- static u8 key_cnt_0 = 0, key_cnt_1 = 0;
- // my_printf(test_printf,*key_val);
- if (*key_val != KEY_VOL_DOWN_PREV && *key_val != KEY_VOL_UP_NEXT) { //过滤掉其他按键
- key_flag = 0;
- if (*key_val == NO_KEY) {
- return NO_KEY;
- }
- return 0xffff;
- }
- if (*key_val == KEY_VOL_DOWN_PREV) {
- if (key_cnt_0 > 1) { //消抖
- key_cnt_0 = 0;
- if (key_flag & BIT(1)) {
- key_flag = 0;
- return KEY_VOL_UP_NEXT | KEY_SHORT_UP; //顺时针
- } else {
- key_flag |= BIT(0);
- }
- } else {
- key_cnt_0++;
- }
- }
- if (*key_val == KEY_VOL_UP_NEXT) {
- if (key_cnt_1 > 1) { //消抖
- key_cnt_1 = 0;
- if (key_flag & BIT(0)) {
- key_flag = 0;
- return KEY_VOL_DOWN_PREV | KEY_SHORT_UP; //逆时针
- } else {
- key_flag |= BIT(1);
- }
- } else {
- key_cnt_1++;
- }
- }
- *key_val = NO_KEY;
- return NO_KEY;
- }
- #endif // USER_KEY_KNOB2_EN
- #endif // USER_KEY_KNOB_EN
|