ok danke, es geht jetzt.
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(2000); //Gibt einem die moeglichckeit zu lesen was auf dem LCD steht
lcd_clear();
lcd_home();
lcd_string("Taste druecken");
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);
}
Nun möchte ich aus einem Taster einen Schalter Programmiren, ich habe keine Ahnung, wie ich das anstelle.
Ja meine Taster schalten nach GND, ich benutze das STK500.
Lesezeichen