#include "key.h" #include "../App/ota_update.h" #include "../App/xspDataOpt.h" #include "../App/taskOpt.h" KeyInfo g_keyinfo; void key_delay(uint32_t time) { volatile uint32_t idly=0; for(idly=20*time; idly>0; idly--); } /*----------------------------------------------------------------------- * 初始化按键 * key2 * *PE3 * -----------------------------------------------------------------------*/ void key_init(void) { rcu_periph_clock_enable(RCU_GPIOE); gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ,GPIO_PIN_3); // timeout_setValue(&g_keyinfo.timer,5000); g_keyinfo.keyVal = 0; g_keyinfo.count = 0; g_keyinfo.keyPress = 0x00; } static void set_key_value(uint8_t keyval) { if((0!=g_keyinfo.keyVal) && (keyval != g_keyinfo.keyVal) ){ g_keyinfo.count = 0; g_keyinfo.keyPress = 0; timeout_stop(&g_keyinfo.timer); } g_keyinfo.keyVal = keyval; if(0==g_keyinfo.count){ timeout_start(&g_keyinfo.timer); } if(0 == g_keyinfo.keyPress){ g_keyinfo.count++; g_keyinfo.keyPress = 1; } } /*----------------------------------------------------------------------- * 检测按键的输入 * ----------------------------------------------------------------------*/ uint8_t key_scan(void) { if(KEY2_DOWN()){ // 按键按下 key_delay(20); // 消抖 if(KEY2_DOWN()) { // 确定按键按下 set_key_value(KEY2_VAL); } } else { g_keyinfo.keyPress = 0x00; if((g_keyinfo.keyVal !=0) && (g_keyinfo.count>0) ){ if(timeout_isOut(&g_keyinfo.timer)) return 1; else return 0; } } return 0; } /*--------------------------------------------------------------------------------- * 按键的处理 * --------------------------------------------------------------------------------*/ void key_opteration(void) { if(KEY2_VAL == g_keyinfo.keyVal ){ switch (g_keyinfo.count){ case 1:break; // 按键按一次 case 2:break; // 按键按二次 case 3: // 按键按三次 ota_start_offline_update(); break; default: break; } } else if(KEY4_VAL == g_keyinfo.keyVal) { switch(g_keyinfo.count){ case 1: break; case 2: break; case 3: // if(IDENTITY_MASTER == g_iDentity) { // g_taskRunDa.keyReadcurData = 1; // g_taskRunDa.keySaveMasterDa = 1; // printf("按键读取显示屏的值 \r\n"); // } break; default: break; } } }