我使用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
}
答案 0 :(得分: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
}
答案 1 :(得分: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
恰好定义为1
,PORTA_BIT1_MASK
定义为2
,PORTA_BIT2_MASK
定义为4
。