Hallo inka,
nicht so ganz, aber fast. So könnte es vielleicht gehen. Ich kann das aber erst heute abend testen.
Code:
#include "asuro.h"
#include "lcd.h"
#include "i2c.h"
//makrodefinitionen der taster
#define LCD_KEY_YELLOW (1<<PD6)
#define LCD_KEY_RED (1<<PD2)
#define LCD_KEY_BLUE (1<<PB3)
int LCDPollSwitch (void)
{
int key = 0;
//taster pins auf input schalten
TCCR2 = (1 << WGM21) | (1 << CS20); // OC2 PIN deaktivieren, aber 36kHz Timer weiterlaufen lassen (z.B. für Sleep(void) )
DDRD &= ~((1<<PD2)|(1<<PD6)); // roten und gelben Taster als Eingang definieren
DDRB &= ~(1<<PB3); // blauen Taster als Eingang definieren
//taster abfragen
key |= (PIND&LCD_KEY_YELLOW);
key |= (PINB&LCD_KEY_RED);
key |= (PINB&LCD_KEY_BLUE);
//taster pins auf output schalten
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
DDRD &= ~((1<<PD2)|(0<<PD6)); // roten und gelben Taster als ausgang definieren
DDRB &= ~(1<<PB3); // blauen Taster als ausgang definieren
//tasterwert zurückgeben
return key;
}
int main(void)
{
int keys;
Init();
InitI2C();
InitLCD();
while(1)
{
keys = LCDPollSwitch();
if (keys & LCD_KEY_YELLOW)
{
PrintSetLCD(0,0,"Yellow");
}
else if (keys & LCD_KEY_RED)
{
PrintSetLCD(0,0,"Red");
}
else if (keys & LCD_KEY_BLUE)
{
PrintSetLCD(0,0,"Blue");
}
Msleep(1000);
}
return 0;
}
Lesezeichen