#include "key.h" #include "GPIO.h" #include "timer.h" #include "string.h" #include "pwm_control.h" KEY_t g_Key; void Key_Init(void) { GPIO_InitTypeDef GPIO_InitStructure1; //结构定义 /***********************************1*******************************************/ GPIO_InitStructure1.Pin = GPIO_Pin_4; //指定要初始化的IO 4 GPIO_InitStructure1.Mode = GPIO_PullUp; //指定IO的输入或输出方式,GPIO_PullUp GPIO_Inilize(GPIO_P4,&GPIO_InitStructure1); //初始化 memset(&g_Key, 0, sizeof(g_Key)); } void Key_ScanTask(void) { u8 i; static u32 update_10ms = 0; if (systick_1ms - update_10ms > 10) { update_10ms = systick_1ms; for (i = 0; i < KEY_CHN_MAX; i++) { switch (g_Key.KEY_STA[i]) { case KEY_STA_S0: if ( P44 == KEY_PRESS ) { if (g_Key.delayCnt[i] < KEY_DELAY_COUNT) { g_Key.delayCnt[i]++; } else { g_Key.KEY_STA[i] = KEY_STA_S1; //消抖后 g_Key.key_time[i] = 0; g_Key.delayCnt[i] = 0; } } else { g_Key.delayCnt[i] = 0; g_Key.KEY_STA[i] = KEY_STA_S0; g_Key.key_val[i] = KEY_VAL_NOT; } break; case KEY_STA_S1: g_Key.key_time[i] ++; if ( g_Key.key_time[i] < KEY_DELAY_COUNT_LONG ) { if ( P44 == KEY_LOOSEN ) //松开 { g_Key.key_val[i] = KEY_VAL_SHORT_PRESS; //短按松开 g_Key.key_time[i] = 0; g_Key.KEY_STA[i] = KEY_STA_S0; } } else { g_Key.KEY_STA[i] = KEY_STA_S2; g_Key.key_time[i] = 0; g_Key.key_longPress[i] = KEY_VAL_SINGLE_LONG_PRESS; //长按单击按下 g_Key.key_val[i] = KEY_VAL_CONT_LONG_PRESS; //长按按下 } break; case KEY_STA_S2: g_Key.key_longPress[i] = KEY_VAL_NOT; if ( P44 == KEY_LOOSEN ) { g_Key.KEY_STA[i] = KEY_STA_S0; g_Key.key_val[i] = KEY_VAL_LONG_PRESS_LOOSEN; //长按松开 } break; } } } } void KEY_TEST(void) { u8 flag; if (g_Key.key_val[KEY_CH1] == KEY_VAL_SHORT_PRESS) { g_Key.key_val[KEY_CH1] = KEY_VAL_NOT; s_pwm.key_value++; switch (s_pwm.key_value) { case 1: s_pwm.currpwm[0] = 2000ul; //90%亮度 s_pwm.currvalue[0]=0x5A; break; case 2: s_pwm.currpwm[1] = 2000ul; s_pwm.currvalue[1]=0x5A; break; case 3: s_pwm.currpwm[2] = 2000ul; s_pwm.currvalue[2]=0x5A; break; case 4: s_pwm.currpwm[3] = 2000ul; s_pwm.currvalue[3]=0x5A; break; case 5: s_pwm.currpwm[4] = 2000ul; s_pwm.currvalue[4]=0x5A; break; case 6: s_pwm.currpwm[5] = 2000ul; s_pwm.currvalue[5]=0x5A; break; case 7: s_pwm.currpwm[6] = 2000ul; s_pwm.currvalue[6]=0x5A; break; case 8: s_pwm.currpwm[7] = 2000ul; s_pwm.currvalue[7]=0x5A; break; case 9: s_pwm.currpwm[8] = 2000ul; s_pwm.currvalue[8]=0x5A; break; case 10: s_pwm.currpwm[9] = 2000ul; s_pwm.currvalue[9]=0x5A; break; case 11: s_pwm.currpwm[10] = 2000ul; s_pwm.currvalue[10]=0x5A; break; case 12: s_pwm.currpwm[11] = 2000ul; s_pwm.currvalue[11]=0x5A; break; case 13: for(flag=0;flag<12;flag++) { s_pwm.currpwm[flag] = PWM_MAX_VALUE; s_pwm.currvalue[flag]=0x00; } s_pwm.key_value = 0; break; default: break; } } }