0

我正在使用 HCS12 微控制器。我拥有的以下程序从板载键盘获取输入,并根据按下的键向板载 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
    }
4

2 回答 2

0

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

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

if (input & 1) { 
   // bit 0 was set
}
if (input & 2) {
   // bit 1 was set
}
if (input & 4) {
   // bit 2 was set
}
于 2013-04-09T02:14:08.460 回答
0

如果您使用 CodeWarrior IDE 之类的工具进行 HCS12 编程,您会注意到 HCS12 项目中包含一个头文件。它将是您要为其编译的芯片的名称,例如。mc9s12c32.h. 在该文件中,您可以看到地址的定义以及您可用的每个寄存器的内容。PORTA例如被定义为指向0x0内存中的变量。为了能够读取端口 A 上的特定引脚,可以使用以下内容来帮助减轻任何混淆。

if(PORTA & PORTA_BIT0_MASK)
{
    //Do something if bit 0 was set
}
if(PORTA & PORTA_BIT1_MASK)
{
    //Do something if bit 1 was set
}
if(PORTA & PORTA_BIT2_MASK)
{
    //Do something if bit 2 was set
}

上面所做的是测试端口 A 的全部内容,以及该端口上是否设置了每个单独的位。PORTA_BIT0_MASK恰好被定义为1PORTA_BIT1_MASKas2PORTA_BIT2_MASKas 4

于 2013-05-13T04:06:33.350 回答