Что не так с моим кодом здесь? Что я должен исправить?
Этот код использует микроконтроллер MSP432 для создания счетчика светодиодов. S1 на MSP432 - это S1, и я предполагаю выбрать любые два контакта для установки моего внешнего переключателя. Используя P5.0 и P5.2, был установлен внешний переключатель для уменьшения счетчика, в то время как встроенный переключатель S1 (P1.1) на самой плате MSP432 должен был увеличивать счетчик. Состояние должно изменяться только после завершения пресс-релиза. В настоящее время внешний переключатель, который я установил, будет отлично уменьшать счетчик, но встроенный переключатель (P1.1) будет увеличивать счетчик, только если я сначала нажму и удерживаю на внешнем переключателе, а затем нажмите на встроенный переключатель S1. У меня есть ощущение, что это может быть что-то в коде в моих функциях readS1input и readS2input. Может ли кто-нибудь помочь мне понять, что это такое?
#include "msp.h"
// Global variable used to hold the current state
char currentState;
// Global variable used to hold the number of pushes
long int pushes;
void countDown(void);
void countUp(void);
void init(void)
{
WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;
P1DIR |= (BIT0);
P2DIR |= (BIT2 + BIT1 + BIT0);
P1DIR &= ~(BIT1);
P1REN |= (BIT1);
P1OUT |= (BIT1);
P5DIR |= BIT0;
P5OUT |= BIT0;
P5DIR &= ~ (BIT2);
P5REN |= (BIT2);
P5OUT &= ~(BIT2);
currentState = 0;
pushes = 0;
P1OUT &= ~(BIT0);
P2OUT &= ~(BIT2 + BIT1 + BIT0);
}
char readS1Input(void)
{
char local = 0;
if (!(P1IN & BIT1)) {
pushes = pushes + 1;
local = 1;
__delay_cycles(10000);
countUp();
while(!(P1IN & BIT1)) {
}
__delay_cycles(10000);
}
return local;
}
char readS2Input(void)
{
char local = 0;
if (!(P5IN & BIT2)) {
pushes = pushes + 1;
local = 2;
__delay_cycles(10000);
countDown();
while(!(P5IN & BIT2)) {
}
__delay_cycles(10000);
}
return local;
}