/** * @brief 读取按键值 * @param None * @return enum KEY */ enum KEY key_read(void) { enum KEY key_value = NO_KEY; key_value = key_press_down(); if (key_value != NO_KEY) { delay_n_ms(100); while (key_press_down() != NO_KEY) { delay_n_ms(50); } } return key_value; }
void PIN_MANAGER_IOC(void) { if((IOCBP5 == 1) && (IOCBF5 == 1)) { delay_n_ms(2); if (BLUE_BTN == 0) { IOCBF5 = 0; return; } selected_spell = BLUE_SPELL; armButtonEnabled = true; //@TODO Add handling code for IOC on pin RA4 // BLUE Button YELLOW_LED = 0; YELLOW_LED2 = PORTCbits.RC6; WHITE_LED = 0; ARM_LED = armButtonEnabled; BLUE_LED = 1; RED_LED = 0; // clear interrupt-on-change flag IOCBF5 = 0; } else if((IOCBP4 == 1) && (IOCBF4 == 1)) { //@TODO Add handling code for IOC on pin RA3 // RED Button delay_n_ms(2); if (RED_BTN == 0) { IOCBF4 = 0; return; } selected_spell = RED_SPELL; armButtonEnabled = true; YELLOW_LED = 0; YELLOW_LED2 = PORTCbits.RC6; WHITE_LED = 0; ARM_LED = armButtonEnabled; BLUE_LED = 0; RED_LED = 1; // clear interrupt-on-change flag IOCBF4 = 0; } else if((IOCBP6 == 1) && (IOCBF6 == 1)) { //@TODO Add handling code for IOC on pin RB6 // ARM Button arm_held_for_3_seconds = false; if (!armButtonEnabled) { IOCBF6 = 0; return; } delay_n_ms(2); if (ARM_BTN == 0 || !armButtonEnabled) { IOCBF6 = 0; arm_button_pressed_start_time = 0; return; } if (armedMode == STATE_DISARMED) { while (ARM_BTN == 1) { __delay_ms (1); arm_button_pressed_start_time++; if (arm_button_pressed_start_time >= 3000) { arm_held_for_3_seconds = true; ARM_LED = 0; delay_n_ms(2); ARM_LED = 1; delay_n_ms(2); ARM_LED = 0; delay_n_ms(2); ARM_LED = 1; delay_n_ms(2); ARM_LED = 0; delay_n_ms(2); ARM_LED = 1; break; } } if (arm_held_for_3_seconds) { switch (selected_spell) { case YELLOW_SPELL: printf("I\n%c\n", 0x10); break; case WHITE_SPELL: printf("I\n%c\n", 0x11); break; case BLUE_SPELL: printf("I\n%c\n", 0x12); break; case RED_SPELL: printf("I\n%c\n", 0x13); break; } armedMode = STATE_MANUAL_MODE; } else { switch (selected_spell) { case YELLOW_SPELL: printf("I\n%c\n", 0x20); break; case WHITE_SPELL: printf("I\n%c\n", 0x21); break; case BLUE_SPELL: printf("I\n%c\n", 0x22); break; case RED_SPELL: printf("I\n%c\n", 0x23); break; } armedMode = STATE_AUTOMATIC_MODE; armButtonEnabled = false; } } else if (armedMode == STATE_MANUAL_MODE) { printf("I\n%c\n", 0x00); armedMode = STATE_DISARMED; arm_held_for_3_seconds = false; } YELLOW_LED = selected_spell == YELLOW_SPELL; YELLOW_LED2 = PORTCbits.RC6; WHITE_LED = selected_spell == WHITE_SPELL; ARM_LED = armButtonEnabled || STATE_MANUAL_MODE; BLUE_LED = selected_spell == BLUE_SPELL; RED_LED = selected_spell == RED_SPELL; arm_button_pressed_start_time = 0; // clear interrupt-on-change flag IOCBF6 = 0; } else if((IOCCP0 == 1) && (IOCCF0 == 1)) { //@TODO Add handling code for IOC on pin RB5 // WHITE Button delay_n_ms(2); if (WHITE_BTN == 0) { IOCCF0 = 0; return; } if (armedMode == STATE_DISARMED) { selected_spell = WHITE_SPELL; armButtonEnabled = true; } reset_btn_held = 0; while (WHITE_BTN == 1) { __delay_ms (1); reset_btn_held++; if (reset_btn_held >= 3000) { RESET(); } else if (reset_btn_held % 500 == 0) { WHITE_LED = 1; delay_n_ms(2); WHITE_LED = 0; delay_n_ms(2); WHITE_LED = selected_spell == WHITE_SPELL; } } YELLOW_LED = 0; YELLOW_LED2 = 0; WHITE_LED = 1; ARM_LED = armButtonEnabled; BLUE_LED = 0; RED_LED = 0; // clear interrupt-on-change flag IOCCF0 = 0; } else if((IOCBP7 == 1) && (IOCBF7 == 1)) { //@TODO Add handling code for IOC on pin RB7 // YELLOW Button delay_n_ms(2); if (YELLOW_BTN == 0) { IOCBF7 = 0; return; } selected_spell = YELLOW_SPELL; armButtonEnabled = true; YELLOW_LED = 1; YELLOW_LED2 = PORTCbits.RC6; WHITE_LED = 0; ARM_LED = armButtonEnabled; BLUE_LED = 0; RED_LED = 0; // clear interrupt-on-change flag IOCBF7 = 0; } }