Files
RCU_C12_Dimming/key.c
caocong 2dd675869a fix:修复调光时间BUG
解决调光时间一样的情况下,调光亮与调光灭的实际调光时间不一致问题
2025-12-15 20:48:52 +08:00

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;
}
}
}