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