Tastenabfrage an der halvedDisc2®



Die Tasten T1 und T2 der halvedDisc2® (im Bild unten) sind an PORT H0 und H1 angeschlossen.
Wir wollen sie externe Interrupts auslösen lassen.
Die Tastenbetätigungen sollen auf dem Display signalisiert werden.
 

halvedDisc2



/*
*  Programm: tastenabfrage.c
*  Author:   tux@mikrocontrollerspielwiese.de
*/


#include <avr/io.h> 
#include <avr/interrupt.h>
#include "oled.h" // Display


// Prototypen
void initialisierungen(void);


// globale Variablen
volatile int links=0, rechts=0;


int main(void) {
   
    initialisierungen();
   
    while(1) {
       
        if(links==1){
            oled_print(20, 10, "links", BIG);
            _delay_ms(255);
            oled_print(20, 10, "     ", BIG);
            links=0;
        }
       
        if(rechts==1){
            oled_print(200, 10, "rechts", BIG);
            _delay_ms(255);
            oled_print(200, 10, "      ", BIG);
            rechts=0;
        }   
    }
}


void initialisierungen(void) {
   
    oled_init(); //Display initialisieren

    cli(); //Interrupts deaktivieren, um in Ruhe diese zu konfigurieren
       
    PORTH_DIR &= ~0b00000011; //Port H0 und H1 als Eingänge

    PORTH_INT0MASK = 0b0000001;        //Taste 1 (links)
    PORTH_INT1MASK = 0b0000010;        //Taste 2 (rechts)
   
    PORTH.INTCTRL    = PORT_INT0LVL_LO_gc | PORT_INT1LVL_LO_gc; //LoLevel-Interrupts für INT0 und INT1 an PORTH
    PMIC.CTRL|=PMIC_HILVLEN_bm|PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm; //enable Interrupts global
   
    sei(); //Interrupts wieder zulassen
}


ISR(PORTH_INT0_vect) {
    links = 1;
}

ISR(PORTH_INT1_vect) {
    rechts = 1;
}




Links:

    Hochschule Mittweida

    halvedDisc

    halvedDisc2
   
    Datenblatt des ATxMega128A1