stm32_ota/USER/USER_KEY/user_key.c

172 lines
7.7 KiB
C
Raw Normal View History

2023-12-15 06:28:06 +00:00
#include "user_key.h"
#include "user_oled.h"
/********************************************************************************
* @file user_key.c
* @author <EFBFBD>̳ϿƼ<EFBFBD> Mr.Wang
* @version V1.0.0
* @date 11-Dec-2018
* @brief <EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
******************************************************************************
* @attention
*******************************************************************************/
//typedef struct
//{
// uint8_t menuIndex ; // <20>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyMenuToIndex ; // <20><><EFBFBD>¡<EFBFBD><C2A1>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyBackToIndex ; // <20><><EFBFBD>¡<EFBFBD><C2A1>˻ء<CBBB><D8A1><EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyUpToIndex ; // <20><><EFBFBD>¡<EFBFBD><C2A1><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyDnToIndex ; // <20><><EFBFBD>¡<EFBFBD><C2A1><EFBFBD><EFBFBD>¡<EFBFBD><C2A1><EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyLeftToIndex ; // <20><><EFBFBD>¡<EFBFBD><C2A1><EFBFBD><EFBFBD>󡱼<EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyRightToIndex ; // <20><><EFBFBD>¡<EFBFBD><C2A1><EFBFBD><EFBFBD>ҡ<EFBFBD><D2A1><EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// uint8_t keyOkToIndex ; // <20><><EFBFBD>¡<EFBFBD>OK<4F><4B><EFBFBD><EFBFBD>ʱת<CAB1><D7AA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// void (*CurrentOperate)(uint8_t x) ;// <20><>ǰ״̬Ӧ<CCAC><D3A6>ִ<EFBFBD>еĹ<D0B5><C4B9>ܲ<EFBFBD><DCB2><EFBFBD>
//} KbdTab_s ;
volatile uint8_t currentMenuIndex = 0 ; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>IJ˵<C4B2>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static volatile uint8_t laseKey = KEYBACK ; //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ΰ<EFBFBD><CEB0>İ<EFBFBD><C4B0><EFBFBD>ֵ<EFBFBD><D6B5>
KbdTab_s sKeyTab[15] =
{
/*menuIndex, keyMenuToIndex, keyBackToIndex, keyUpToIndex, keyDnToIndex, keyLeftToIndex, keyRightToIndex, keyOkToIndex, (*CurrentOperate)(void)*/
{ 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , HomeMenu } ,
{ 1 , 1 , 0 , 3 , 2 , 1 , 1 , 4 , Sub1MenuSelect1 } ,
{ 2 , 1 , 0 , 1 , 3 , 2 , 2 , 5 , Sub1MenuSelect2 } ,
{ 3 , 1 , 0 , 2 , 1 , 3 , 3 , 8 , Sub1MenuSelect3 } ,
{ 4 , 1 , 1 , 4 , 4 , 4 , 4 , 4 , Sub1_1Menu },
{ 5 , 1 , 1 , 7 , 6 , 5 , 5 , 10 , Sub1_2MenuSelect1 },
{ 6 , 1 , 1 , 5 , 7 , 5 , 5 , 11 , Sub1_2MenuSelect2 },
{ 7 , 1 , 1 , 6 , 5 , 5 , 5 , 12 , Sub1_2MenuSelect3 } ,
{ 8 , 1 , 3 , 9 , 9 , 8 , 8 , 13 , Sub1_3MenuSelect1 } ,
{ 9 , 1 , 3 , 8 , 8 , 9, 9 , 14 , Sub1_3MenuSelect2 } ,
{ 10 , 1 , 5 , 10 , 10 , 10 , 10 , 10 , Sub1_2_1Menu } ,
{ 11 , 1 , 5 , 11 , 11 , 11, 11 , 11 , Sub1_2_2Menu } ,
{ 12 , 1 , 5 , 12 , 12 , 12 , 12 , 12 , Sub1_2_3Menu } ,
{ 13 , 1 , 8 , 13 , 13 , 13 , 13 , 13 , Sub1_3_1Menu } ,
{ 14 , 1 , 9 , 14 , 14 , 14, 14 , 14 , Sub1_3_2Menu }
} ; //<2F><>ͬ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void UserKeyInit(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UP<EFBFBD><EFBFBD>DOWN<EFBFBD><EFBFBD>LEFT<EFBFBD><EFBFBD>RIGHT<EFBFBD><EFBFBD>Menu<EFBFBD><EFBFBD>BACK IO<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ģʽ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>INT_RANK_6
* KEY0 KEY1 KEY2 KEY3 KEY7 KEY9<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪGPIO <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* ע<EFBFBD><EFBFBD>UP<EFBFBD><EFBFBD>DOWN<EFBFBD><EFBFBD>LEFT<EFBFBD><EFBFBD>RIGHT<EFBFBD><EFBFBD>Menu<EFBFBD><EFBFBD>BACK IO<EFBFBD>ⲿ<EFBFBD>жϵĻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void UserKeyInit(void)
{
KeyInit() ;
Io_RegHookCallback(MENU_KEY_PIN, Menu_Callback) ;
Io_RegHookCallback(BACK_KEY_PIN, Back_Callback) ;
Io_RegHookCallback(KEYUP_PIN, KeyUp_Callback) ;
Io_RegHookCallback(KEYDOWN_PIN, KeyDown_Callback) ;
Io_RegHookCallback(KEYLEFT_PIN, KeyLeft_Callback) ;
Io_RegHookCallback(KEYRIGHT_PIN, KeyRight_Callback) ;
Io_RegHookCallback(KEYOK_PIN, KeyOk_Callback) ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void GetKeylnput(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ͬ<EFBFBD>˵<EFBFBD>ҳ<EFBFBD><EFBFBD>Ӧ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>sKeyTab<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void GetKeylnput(void )
{
switch ( laseKey )
{
case KEYMENU :// <20><><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab [ currentMenuIndex ].keyMenuToIndex ;
break ;
case KEYBACK :// <20><><EFBFBD><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab [ currentMenuIndex ].keyBackToIndex ;
break ;
case KEYUP : // <20><><EFBFBD><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab[ currentMenuIndex ].keyUpToIndex ;
break ;
case KEYDOWN :// <20><><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD><C2A1><EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab [ currentMenuIndex ].keyDnToIndex ;
break ;
case KEYLEFT :// <20><><EFBFBD><EFBFBD><EFBFBD>󡱼<EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab [ currentMenuIndex ].keyLeftToIndex ;
break ;
case KEYRIGHT:// <20><><EFBFBD><EFBFBD><EFBFBD>ҡ<EFBFBD><D2A1><EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab [ currentMenuIndex ].keyRightToIndex ;
break ;
case KEYOK: // <20><>OK<4F><4B><EFBFBD><EFBFBD>,<2C>ҳ<EFBFBD><D2B3>µIJ˵<C4B2>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
currentMenuIndex = sKeyTab [ currentMenuIndex ].keyOkToIndex ;
break ;
case 0 : // û<>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return ;
default : // δ<>趨Ч<E8B6A8><D0A7><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD>ֵ
return ;
}
laseKey = 0 ;
sKeyTab[ currentMenuIndex ].CurrentOperate() ; // <20><>ǰ<EFBFBD>˵<EFBFBD>ҳ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ִ<EFBFBD>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void Menu_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Menu<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void Menu_Callback(void)
{
laseKey = KEYMENU ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void Back_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> BACK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void Back_Callback(void)
{
laseKey = KEYBACK ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void KeyUp_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> UP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void KeyUp_Callback(void)
{
laseKey = KEYUP ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void KeyDown_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DOWN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void KeyDown_Callback(void)
{
laseKey = KEYDOWN ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void KeyLeft_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> LEFT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void KeyLeft_Callback(void)
{
laseKey = KEYLEFT ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void KeyRight_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> RIGHT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void KeyRight_Callback(void)
{
laseKey = KEYRIGHT ;
}
/**************************************************************************************************
* <EFBFBD><EFBFBD> <EFBFBD>ƣ<EFBFBD> void KeyOk_Callback(void)
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD> OK<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************************************************************/
void KeyOk_Callback(void)
{
laseKey = KEYOK ;
}