0

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
    }
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 に答える