Что не так с моим кодом здесь? Что я должен исправить?

Этот код использует микроконтроллер 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;
}

0 ответов

Другие вопросы по тегам