155 lines
3.7 KiB
C
155 lines
3.7 KiB
C
#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;
|
|
}
|
|
}
|
|
} |