этот код должен считывать состояние цифрового входного контакта с помощью кнопки и выводить состояние на светодиод.т. е. при высоком входном сигнале светодиод горит и наоборот. Поскольку кнопка подключена к подтягивающему резистору, при нажатии кнопки вход должен считываться НИЗКИМ, и наоборот.
Мой код:
#include "board.h"
#include <stdio.h>
//setting pointers
#define Port0 ((LPC_GPIO_T *) 0x50000000) //Port 0
#define IOCON ((LPC_IOCON_T *) 0x40044000) //IO configuration
int main(void)
{
/* Initialize pins */
Port0->DIR &= ~((1 << 1)); //PIO0_1 input - onboard switch (unpressed state is pulled-up)
Port0->DIR |= (1<<7); //PIO0_7 output - onboard LED
//Pin configuration
IOCON->REG[IOCON_PIO0_7] &= 0x0 << 3; //No addition pin function
IOCON->REG[IOCON_PIO0_1] &= 0x0 << 3; // "
Port0->DATA[1<<7] &= ~(1<<7); // output initially low
while (1) {
if((Port0->DATA[1<<1]) & (1<<1)) //When input is high
{
Port0->DATA[1<<7] |= (1<<7); //drive PIO0_7 High
}
else
{
Port0->DATA[1<<7] &= ~(1<<7); //Drive PIO0_7 Low
}
}
return 0;
}
Когда эта часть кода выполняется, PIO0_7 остается на низком уровне, если кнопка не нажата ... Однако разве не предполагается, что она работает противоположным образом, так как переключатель нажат?Я также дважды проверил это с помощью вольтметра.
Я попытался изменить
if((Port0->DATA[1<<1]) & (1<<1)) //When input is high
на
if(!(Port0->DATA[1<<1]) & (1<<1)) //When input is Low
Выходной сигнал светодиода остается высоким даже при нажатии кнопки.