mikrocontroller.net

Forum: Compiler & IDEs Taster doppelt belegen


Autor: Daniel Schröder (natrium)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

für meine Nixieuhr benötige ich einige Taster zum einstellen der Uhrzeit 
usw.
Da ich aber nicht so viele Taster haben möchte, würde ich gerne einige 
Taster doppelt belegen. Bisher stelle ich die Uhrzeit mit 2 Tastern, 
einer für die Minuten, und einer für die Stunden, nun möchte ich gerne, 
dass wenn man beide Taster gleichzeitig betätigt der AVR die Alarmzeit 
anzeigt. Wenn man nun wieder einen der beiden Taster drückt soll er nun 
nicht die Zeit verstellen, sondern eben die Alarmzeit. Nach 30 Sek soll 
er nun wieder die normale Uhrzeit anzeigen.

Leider reichen meine C Kenntnisse dafür nicht aus, daher hoffe ich, dass 
mir hier jemand weiterhelfen kann. Ich benutze einen ATmega und 
programmiere mit C.

Gruß, Natrium

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if ((PINB & 0x03) == 0x03)
  state = STATE_SET_ALARMCLOCK;
...

switch (state)

case STATE_NORMAL:
 ....
break;

case STATE_SET_ALARMCLOCK:
 ....
break;


Soll heißen: Mit sowenig Angaben können wir Dir nicht helfen. Da musst 
Du schon deinen Code mit anhängen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch meine EiWoMiSa, da gibt es auch ne Lösung für 
Zweitastenerkennung:

Beitrag "Universelle Tastenabfrage mit 2 Tastenerkennung"


Peter

Autor: Daniel Schröder (natrium)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab hier die relvanten Teile mal angehängt.
  set_bit(taster_hour_port,taster_hour_pin);              //Pullup einschalten
  set_bit(taster_minute_port,taster_minute_pin);          //Pullup einschalten

    if (bit_is_clear(taster_hour_pin, taster_hour_bit)) {        
    if (h<23) h++;
    else h=0;
    _delay_ms(10);
    while (bit_is_clear(taster_hour_pin, taster_hour_bit));      
    _delay_ms(10);
    ds1307_setTime(h,m,s);                      
    } 

    if (bit_is_clear(taster_minute_pin, taster_minute_bit)) {    
    if (m<59) m++;
    else m=0;
    _delay_ms(10); 
    ds1307_setTime(h,m,s);                      
    while (bit_is_clear(taster_minute_pin, taster_minute_bit));    
    _delay_ms(10);
    } 


So sieht es bis jetzt aus, wo nur einfach die Stunden und Minuten 
hochgezählt werden. Der Teil steht in der Hauptschleife.

Gruß, Natrium


EDIT: Peters Code werde ich mir mal ansehen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.