HCS12マイクロコントローラーを使用しています。私が持っている次のプログラムは、オンボードのキーパッドから入力を受け取り、押されたキーに応じてオンボードのLCDに文字を表示します(入力/出力を扱うコードの部分のみを添付しました。必要がありますが、この方法の方が目にやさしいです)。
私がやりたいことは、入力として使用されているキーパッドを取り除き、代わりに3つの別々のピンを介してアクティブロー信号を送信するセンサーを使用することです. そうすれば、毎回キーパッドを押す代わりに、センサーが読み取り値の 1 つ (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
}