Ob das besser zu lesen ist? Deine Taster schalten doch nach GND, oder?Code:// // ATMega644 // lcd-routines.c, lcd-routines.h // #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <stdlib.h> #include "lcd-routines.h" uint8_t temp; int main(void) { DDRD = 0x00; // Pins sind Eingang PORTD = 0x0f; // mit aktiviertem PullUp, Taster schalten nach GND // Initialisierung des LCD // Nach der Initialisierung müssen auf dem LCD vorhandene schwarze Balken // verschwunden sein lcd_init(); lcd_string("LCD Start !!!"); _delay_ms(100); //Gibt einem die moeglichckeit zu lesen was auf dem LCD steht temp = PIND & ((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0)) ; // Status der Tasten einlesen while(1) { if((PIND & ((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0))) != temp) // Hat sich was geändert? { temp = PIND & ((1<<PD3) | (1<<PD2) | (1<<PD1) | (1<<PD0)); // Ja, deshalb neuen Status merken ... lcd_clear(); // ... und ausgeben lcd_home(); switch(~temp & 0x0f) // Achtung! temp wird mit ~ invertiert! { case (1<<PD0): lcd_string("Das ist Taste 0"); break; case (1<<PD1): lcd_string("Das ist Taste 1"); break; case (1<<PD2): lcd_string("Das ist Taste 2"); break; case (1<<PD3): lcd_string("Das ist Taste 3"); break; default:lcd_string("Taste druecken"); } } } return(0); }
Lesezeichen