使用HCS12微控制器进行Iam。我拥有的以下程序从板载键盘上获取输入,并根据所按的键将字母显示到板载LCD上(我仅附加了处理输入/输出的代码部分,如果可以,则可以附加其余部分需要,但这样更容易在眼睛上看到)。

我想做的是摆脱用作输入的键盘,并使用我拥有的传感器,该传感器通过3个单独的引脚发送低电平有效信号。这样,无需每次都按下键盘,每当传感器读取读数之一(PortA1、2或3)时,它将显示正确的字母。

init_keypad函数将PortA0-PortA3设置为输入。

在getkey函数中,我不确定如何更改if语句以分别读取PortA0-PortA3

void init_keypad(void){
    DDRA = 0xf0;  // PA7-PA4 output; PA3-PA0 input
    DDRB = 0xf0;
    PUCR |= 1;   // PUPAE =1 (enable pull-up on all PORTA inputs)
}

char getkey(void){
    PORTA = 0xe0;       // selects row 0
    if ((PORTA & 1) == 0){
    cmdwrt(0x01);
      delay(20);
      if ((PORTA & 1) == 0) return('L');//true if '1' key still active after 20 ms
    }
    PORTA = 0xd0;
    if ((PORTA & 1) == 0){
    cmdwrt(0x01);
      delay(20);
      if ((PORTA & 1) == 0) return('S');//true if '1' key still active after 20 ms
    }
    PORTA = 0xb0;
    if ((PORTA & 1) == 0){
    cmdwrt(0x01);
      delay(20);
      if ((PORTA & 1) == 0) return('R');//true if '1' key still active after 20 ms
    }

最佳答案

假设您已将PORTA的输入读入变量,我们将其命名为input

在这种情况下,测试input的各个位看起来像:

if (input & 1) {
   // bit 0 was set
}
if (input & 2) {
   // bit 1 was set
}
if (input & 4) {
   // bit 2 was set
}

关于c++ - ASM I/O引脚HCS12微 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15891936/

10-09 19:18