Hier ist die aufgabe:"Über ein Menü soll die auswahl einer von vier mathematischen Operationen(Addition,substraktion,division,multiplikation),die eingabe der entsprechenden Operanden und die Ausführung der gewählten Operationen möglichst sein.Das Ergebnis wird am Display des minimexle angezeigt.
Bis jetzt habe ich geschafft nur der menü auf das bildschrim des minimexle anzuzeigen,aber wenn man dei addition um beispeil auwählt komm nichts mehr auf dem bildschrim.Wenn Sie mir helfen können wäre wirklich schön.Hier ist was ich schon geschrieben habe
// Festlegung der Quarzfrequenz
#ifndef F_CPU // optional definieren
#define F_CPU 18432000UL // MiniMEXLE mit 18,432 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 <util/delay.h> // Definition von Delays (Wartezeiten)
#include "lcd_lib_de.h" // Header-Datei fuer LCD-anzeige
/*#include <avr/interrupt.h> // Definition von Interrupts*/
void Startdisplay(void);
void select_operation_Display(void);
void X_Display(void);
void addition(void);
void subtraktion(void);
void multiplikation(void);
void division(void);
int X;
int Y;
int h;
int z;
int e;
// Hauptprogramm ===========================================
int main()
{
Startdisplay();
_delay_ms(2000);
while(1)
{
select_operation_Display();
if(PINC & (1 << PC0)) // wenn Taste 1 gedrückt
{
addition();
}
if(PINC & (1<<PC1)) // wenn Taste 2 gedrückt
{
subtraktion();
}
if(PINC & (1<<PC2)) // wenn Taste 3 gedrückt
{
multiplikation();
}
if(PINC & (1<<PC3)) // wenn Taste 4 gedrückt
{
division();
}
}
return 1;
}
/*// Interrupt-Routine ==========================================================
ISR (TIMER2_OVF_vect)
// In der Interrupt-Routine sind die Softwareteiler realisiert, durch die Takt-
// botschaften (10ms, 100ms) erzeugt werden. Die Interrupts werden von Timer 2
// ausgeloest.
{
timertick = 1; // Botschaft 0,111ms senden
--vorteiler; // Vorteiler dekrementieren
if (vorteiler==0) // wenn 0 erreicht: 10ms abgelaufen
{
vorteiler = VORTEILER_WERT; // Vorteiler auf Startwert
takt10ms = 1; // Botschaft 10ms senden
readButton();
--hundertstel; // Hunderstelzaehler dekrementieren
if (hundertstel==0) // wenn 0 erreicht: 100ms abgelaufen
{
hundertstel = HUNDERTSTEL_WERT; // Teiler auf Startwert
takt100ms = 1; // Botschaft 100ms senden
}
}
}*/
/*// Funktion Tasten einlesen ===================================================
void readButton(void)
{
// Umschaltung Port C, Bit 0..3 auf Eingang
CLR_BIT(PORTD, ENABLE); // Enable-Signal auf 0
DDRC = DDRC & 0xF0; // Port C auf Eingabe schalten
PORTC = 0x0F; // Pullup-Rs eingeschaltet
_delay_us(10); // Wartezeit Umstellung Hardware-Signal
// Einlesen der 4 Tastensignale
sw1_neu = (PINC & (1 << PC0));
sw2_neu = (PINC & (1 << PC1));
sw3_neu = (PINC & (1 << PC2));
sw4_neu = (PINC & (1 << PC3));
// Auswerten der Flanken beim Druecken
if ((sw1_neu==0)&(sw1_alt==1)) // wenn Taste 1 soeben gedrueckt wurde:
sw1_slope = 1; // Flankenbit Taste 1 setzen
if ((sw2_neu==0)&(sw2_alt==1)) // wenn Taste 2 eben gedrueckt wurde:
sw2_slope = 1; // Flankenbit Taste 2 setzen
if ((sw3_neu==0)&(sw3_alt==1)) // wenn Taste 3 eben gedrueckt wurde:
sw3_slope = 1; // Flankenbit Taste 3 setzen
if ((sw4_neu==0)&(sw4_alt==1)) // wenn Taste 4 eben gedrueckt wurde:
sw4_slope = 1; // Flankenbit Taste 4 setzen
// Zwischenspeichern aktuelle Tastenwerte
sw1_alt = sw1_neu; // aktuelle Tastenwerte speichern
sw2_alt = sw2_neu; // in Variable fuer alte Werte
sw3_alt = sw3_neu;
sw4_alt = sw4_neu;
DDRC = DDRC | 0x0F; // Port C auf Ausgabe schalten
}*/
// Unterfunktionen =========================================
void addition()
{
while(!(PINC & (1<<PC3))) // unendliche Schleife
{
X = 0;
h = 0;
z = 0;
e = 0;
X_Display();
_delay_ms(100);
if(PINC & (1<<PC0))
{
if(h==9)
{
h=0;
}
else
{
h++;
}
}
if(PINC & (1<<PC1))
{
if(z==9)
{
z=0;
}
else
{
z++;
}
}
if(PINC & (1<<PC2))
{
if(e==9)
{
e=0;
}
else
{
e++;
}
}
}
X = ((h*100)+(z*10)+e);
}
void subtraktion()
{
while(!(PINC & (1<<PC3))) // unendliche Schleife
{
X = 0;
h = 0;
z = 0;
e = 0;
X_Display();
_delay_ms(1000);
if(PINC & (1<<PC0))
{
if(h==9)
{
h=0;
}
else
{
h++;
}
}
if(PINC & (1<<PC1))
{
if(z==9)
{
z=0;
}
else
{
z++;
}
}
if(PINC & (1<<PC2))
{
if(e==9)
{
e=0;
}
else
{
e++;
}
}
}
X = ((h*100)+(z*10)+e);
}
void multiplikation()
{
while(!(PINC & (1<<PC3))) // unendliche Schleife
{
X = 0;
h = 0;
z = 0;
e = 0;
X_Display();
_delay_ms(000);
if(PINC & (1<<PC0))
{
if(h==9)
{
h=0;
}
else
{
h++;
}
}
if(PINC & (1<<PC1))
{
if(z==9)
{
z=0;
}
else
{
z++;
}
}
if(PINC & (1<<PC2))
{
if(e==9)
{
e=0;
}
else
{
e++;
}
}
}
X = ((h*100)+(z*10)+e);
}
void division()
{
while(!(PINC & (1<<PC3))) // unendliche Schleife
{
X = 0;
h = 0;
z = 0;
e = 0;
X_Display();
_delay_ms(1000);
if(PINC & (1<<PC0))
{
if(h==9)
{
h=0;
}
else
{
h++;
}
}
if(PINC & (1<<PC1))
{
if(z==9)
{
z=0;
}
else
{
z++;
}
}
if(PINC & (1<<PC2))
{
if(e==9)
{
e=0;
}
else
{
e++;
}
}
}
X = ((h*100)+(z*10)+e);
}
void Startdisplay()
{
lcd_init(); // Initialisierungsroutine aus der lcd_lib
lcd_gotoxy(0,0); //
lcd_putstr(" - Projekt 22 - "); //
lcd_gotoxy(1,0); //
lcd_putstr(" Taschenrechner "); //
DDRC &= 0xF0;
PORTC |= 0x0F;
}
void select_operation_Display()
{
lcd_init(); // Initialisierungsroutine aus der lcd_lib
lcd_gotoxy(0,0); //
lcd_putstr("select operation"); //
lcd_gotoxy(1,0); //
lcd_putstr(" + - * / "); //
DDRC &= 0xF0;
PORTC |= 0x0F;
}
void X_Display()
{
lcd_init(); // Initialisierungsroutine aus der lcd_lib
lcd_gotoxy(0,0); //
lcd_putstr(" X = "); //
lcd_gotoxy(1,0); //
lcd_putstr(" Enter"); //
lcd_gotoxy(1,1);
lcd_putc(h+0x30);
lcd_gotoxy(1,5);
lcd_putc(z+0x30);
lcd_gotoxy(1,9);
lcd_putc(e+0x30);
DDRC &= 0xF0;
PORTC |= 0x0F;
}
Danke für Ihre Hilfe