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; }






Zitieren
Lesezeichen