Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Ereigniszähler mit Gabellichtschranke auf der Basis des "Pollin Spiel 1"
- # include <stdlib.h>
- # include <avr/interrupt.h> // Das ist vor allem für den Ton
- # include "display.h"
- # include "util/delay.h"
- # include "auslagerung.c"
- // Diese Werte werden von der Funktion ZahlZuString() benötigt:
- #define BASE_DEZ 10 // Dezimalzahlen verwenden
- #define STRING_LAENGE_utoa 6
- // Taster-Pins
- // Taster1: Hängt an Pin 0 vom Port D
- // Taster2: an Pin 1 vom Port D
- # define DELAY 20 // Millisekunden
- #define GABELLICHTSCHRANKE 5 // Hängt an Pin 5 von Port B
- // Zum Zahlen umwandeln und ausgeben:
- char* ZahlZuString(uint16_t Val, char* String)
- {
- uint8_t p;
- uint8_t i = STRING_LAENGE_utoa;
- String[i] = '\0';
- while(i>0)
- {
- i--;
- String[i] = '0' + Val % BASE_DEZ;
- Val /= BASE_DEZ;
- if(String[i]=='0' && Val==0)
- {
- p=i;
- while(p<=STRING_LAENGE_utoa)
- {
- String[p]=String[p+1];
- p++;
- }
- }
- }
- return String;
- }
- int main(void)
- {
- AVRInit();
- InitDisplay();
- DDRB &= ~((1<<GABELLICHTSCHRANKE)); // definiert Port-Pin als Eingang
- char OutputString[8]; // Wird für Umwanbdlung der Zahlen in Zeichen benötigt
- int Zaehlwert = 0;
- uint8_t LichtschrankeAlt=0;
- uint8_t LichtschrankeNeu=0;
- // Es wird auf Zeile 1 ausgegeben "Zaehler:"
- // Es wird auf Zeile 2 ausgegeben "0"
- ClearDisplay();
- SetDisplayCursor(1,0);
- WriteDisplayString("Zaehler:");
- SetDisplayCursor(2,0);
- WriteDisplayString("0");
- while(1)
- {
- // Der neue, aktuelle Zustand des Taster1 (links) wird abgefragt
- LichtschrankeNeu=(PINB & (1<<GABELLICHTSCHRANKE));
- // Bei steigender Schaltflanke wird gezählt (Taster gedrückt)
- if((LichtschrankeNeu)& ~(LichtschrankeAlt))
- {
- Zaehlwert++;
- SetDisplayCursor(2,0);
- ZahlZuString(Zaehlwert, OutputString);
- WriteDisplayString(OutputString);
- _delay_ms(DELAY); // Warten bis Tastenprellen zu Ende
- }
- // Bei fallender Schaltflanke wird nur das Prellen kompensiert
- if(~(LichtschrankeNeu)& (LichtschrankeAlt))
- {
- _delay_ms(DELAY); // Warten, bis Tastenprellen zu Ende
- }
- // Taster2 (rechts) setzt den Zähler auf 0 zurück
- if(PIND & (1<<TASTER2))
- {
- Zaehlwert=0;
- ClearDisplay();
- SetDisplayCursor(1,0);
- WriteDisplayString("Zaehler:");
- SetDisplayCursor(2,0);
- WriteDisplayString("0");
- }
- LichtschrankeAlt=LichtschrankeNeu;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement