Dies ist eine alte Version des Dokuments!
- test |
-
/*============================================================================= Experiment 5: Programm-Menu ============= ============= Dateiname: Program_Menu.c Autoren: Peter Blinzinger Prof. G. Gruhler (Hochschule Heilbronn) D. Chilachava (Georgische Technische Universitaet) Version: 1.2 vom 29.04.2020 Hardware: MEXLE2020 Ver. 1.0 oder höher AVR-USB-PROGI Ver. 2.0 Software: Entwicklungsumgebung: AtmelStudio 7.0 C-Compiler: AVR/GNU C Compiler 5.4.0 Funktion: Unter einer gemeinsamen Programmoberflaeche werden vier Teil- programme verwaltet. Dies sind: P1: Blinking LED P2: Creating Sound P3: Logic Functions P4: Up/Down-Counter Der Start der Teilprogramme erfolgt den zugeordneten Funktions- tasten. Nach dem Abbruch eines Teilprogramms (immer mit S1) wird wieder die Programmauswahl gestartet. Displayanzeige: Start (fuer 2s): Betrieb (Hauptebene): +----------------+ +----------------+ |- Experiment 5 -| | Main Level | | Program Menu | | P1 P2 P3 P4 | +----------------+ +----------------+ Anzeige fuer Teilprogramme siehe bei einzelnen Programmen Tastenfunktion: Im Hauptprogramm rufen S1 .. S4 die 4 Teiprogramme auf. Im Teilprogramm ist die Funktion unterschiedlich (siehe dort) Jumperstellung: Auswirkung nur im Teilprogramm "Sound": Schalter muss fuer des Buzzer zwischen geschlossen sein Fuses im uC: CKDIV8: Aus (keine generelle Vorteilung des Takts) Header-Files: lcd_lib_de.h (Library zur Ansteuerung LCD-Display Ver. 1.3) =============================================================================*/ // Deklarationen ============================================================== // Festlegung der Quarzfrequenz #ifndef F_CPU // optional definieren #define F_CPU 12288000UL // MiniMEXLE mit 12,288 MHz Quarz #endif // Include von Header-Dateien #include <avr/io.h> // I/O-Konfiguration (intern weitere Dateien) #include <stdbool.h> // Bibliothek fuer Bit-Variable #include <avr/interrupt.h> // Definition von Interrupts #include <util/delay.h> // Definition von Delays (Wartezeiten) #include "lcd_lib_de.h" // Header-Datei fuer LCD-Anzeige // Makros #define SET_BIT(PORT, BIT) ((PORT) |= (1 << (BIT))) // Port-Bit Setzen #define CLR_BIT(PORT, BIT) ((PORT) &= ~(1 << (BIT))) // Port-Bit Loeschen #define TGL_BIT(PORT, BIT) ((PORT) ^= (1 << (BIT))) // Port-Bit Toggeln // Konstanten #define VORTEILER_WERT 60 // Faktor Vorteiler = 60 #define HUNDERTSTEL_WERT 10 // Faktor Hundertstel = 10 #define ZEHNTEL_WERT 10 // Faktor Zehntel = 10 #define ON_TIME 100 // "Ein-Zeit" in Inkrementen zu 100 ms #define OFF_TIME 100 // "Aus-Zeit" in Inkrementen zu 100 ms #define MIN_PER 59 // minimale Periodendauer in "Timerticks" #define MAX_PER 255 // maximale Periodendauer in "Timerticks" #define WAIT_TIME 2000 // Wartezeit zwischen Flanken in ms #define NULL 0x30 // ASCII-Zeichen '0' #define EINS 0x31 // ASCII-Zeichen '1' // Variable unsigned char vorteiler = VORTEILER_WERT; // Zaehlvariable Vorteiler unsigned char hundertstel = HUNDERTSTEL_WERT; // Zaehlvariable Hundertstel unsigned char modus = 0; // Programmmodus int counter = 0000; // Variable fuer Zaehler bool timertick; // Bit-Botschaft alle 0,111ms (Timer-Interrupt) bool takt10ms; // Bit-Botschaft alle 10ms bool takt100ms; // Bit-Botschaft alle 100ms bool sw1_neu = 1; // Bitspeicher fuer Taste 1 bool sw2_neu = 1; // Bitspeicher fuer Taste 2 bool sw3_neu = 1; // Bitspeicher fuer Taste 3 bool sw4_neu = 1; // Bitspeicher fuer Taste 4 bool sw1_alt = 1; // alter Wert von Taste 1 bool sw2_alt = 1; // alter Wert von Taste 2 bool sw3_alt = 1; // alter Wert von Taste 3 bool sw4_alt = 1; // alter Wert von Taste 4 bool sw1_slope = 0; // Flankenspeicher fuer Taste 1 bool sw2_slope = 0; // Flankenspeicher fuer Taste 2 bool sw3_slope = 0; // Flankenspeicher fuer Taste 3 bool sw4_slope = 0; // Flankenspeicher fuer Taste 4
test