#c #embedded #code-composer #launchpad #msp432
Вопрос:
Я пытаюсь создать программу на панели запуска MSP432, которая будет включать зеленый светодиод, когда ни одна из двух встроенных кнопок (P1.4 и P1.1) не нажата, и включать красный светодиод, если нажата только кнопка P1.4. С помощью приведенного ниже кода панель запуска правильно включает зеленый светодиод, когда кнопки не нажимаются, но не включает красный светодиод, когда я нажимаю только кнопку P1.4. Есть ли какие-либо проблемы с моим кодом или конфигурацией контактов?
#include "msp.h"
#include "clock.h"
#include "TExaS.h"
void main()
{
Clock_Init48MHz();
/* Configuration of MSP42 */
P2->SEL0 amp;= ~0x03; // configure P2.0 and 2.1 as GPIO
P2->SEL1 amp;= ~0x03; // configure P2.0 and 2.1 as GPIO
P2->DIR |= 0x03; // configure P2.0 and P2.1 as output
//configure buttons on P1.1 and P1.4 as GPIO pull up inputs
P1->SEL0 amp;= ~0x12;
P1->SEL1 amp;= ~0x12;
P1->DIR amp;= ~0x12;
P1->REN |= 0x12;
P1->OUT |= 0x12;
//Application
while(1){
Clock_Delay1ms(100);
//if P1.4 and P1.1 are both not being pressed
if(P1->IN amp; 0x12){
P2->OUT |= 0x02; //turn on green light
P2->OUT amp;= ~0x01; //turn off red light
}
//if only P1.4 is pressed
else if(P1->IN amp; 0x10){
P2->OUT |= 0x01; //turn on red light
P2->OUT amp;= ~0x02; //turn off green light
}
}
}
Ответ №1:
Ваши утверждения if не согласуются с комментариями над ними.
Если ваши переключатели активны на низком уровне (что подразумевает включение подтягиваний), то первые операторы if проверяют, не нажата ли какая-либо кнопка, а не обе, а ваш else-if проверяет, не нажата ли P1.4 независимо от P1.1 (что никогда не может быть так, потому что это уже соответствовало бы if — то есть, если значение не меняется между считываниями).
Я думаю, вам, возможно, потребуется рассмотреть разницу между if ((x amp; m) == m)
и if (x amp; m)
.
Комментарии:
1. @RafaelE24, если этот ответ решит вашу проблему, не могли бы вы, пожалуйста, отметить его слева?