Fehler im LCD bei der Verbindung mit ATmega 32

Ich versuche, eine normale Tastatur und ein LCD zu verbinden. Wenn ich zum Beispiel auf der Tastatur '1' drücke, wird auf dem Display 'Eins' angezeigt. Wenn ich '=' drücke, wird im Display 'EQUAL' angezeigt. Ich habe den folgenden Code entwickelt. aber nach der Simulation zeigt das LCD zufälligen Text wie das Bild unten. Ich kann mir nicht erklären, was hier passiert ist.

#include <mega32.h>
#include <alcd.h>
#include <delay.h>

#define keypad_ddr DDRC
#define keypad_port PORTC
#define keypad_input PINC

void main(void)
{
keypad_ddr=0xF0;
lcd_init(16);

while(1)
        {
        lcd_clear();
       keypad_port=0b11100000;
       lcd_gotoxy(0,0);
       if(keypad_input.0==0)
        lcd_putsf("Seven");
       if(keypad_input.1==0)
        lcd_putsf("Four");
       if(keypad_input.2==0)
        lcd_putsf("One");
       if(keypad_input.3==0)
        lcd_putsf("ON/C");
       keypad_port=0b11010000;
       lcd_gotoxy(0,0);
       if(keypad_input.0==0)
        lcd_putsf("Eight");
       if(keypad_input.1==0)
        lcd_putsf("Five");
       if(keypad_input.2==0)
        lcd_putsf("Two");
       if(keypad_input.3==0)
        lcd_putsf("Zero"); 
      keypad_port=0b10110000;
       lcd_gotoxy(0,0);
       if(keypad_input.0==0)
        lcd_putsf("Nine");
       if(keypad_input.1==0)
        lcd_putsf("Six");
       if(keypad_input.2==0)
        lcd_putsf("Three");
       if(keypad_input.3==0)
        lcd_putsf("Equal");
      keypad_port=0b01110000;
       lcd_gotoxy(0,0);
       if(keypad_input.0==0)
        lcd_putsf("Division");
       if(keypad_input.1==0)
        lcd_putsf("Multiplication");
       if(keypad_input.2==0)
        lcd_putsf("Minus");
       if(keypad_input.3==0)
        lcd_putsf("Plus");
        delay_ms(1000);
        }
}

Simulation: (Schauen Sie auf das LCD)

Bitte rücken Sie Ihren Code richtig ein

Antworten (1)

Sie zeigen in Ihrem Schaltplan keine Pullup-Widerstände, daher funktioniert dies nur, wenn Sie die internen Pullups des MEGA32 aktivieren. Dazu müssen Sie Einsen in die Eingangsbits schreiben. Mit anderen Worten, wenn Sie den Spaltenselektor ändern, sollten die niederwertigen Bits 1111 sein, nicht 0000.

Zum Beispiel:

  keypad_port = 0b11101111;