taschenrechner

juliot66

Neues Mitglied
30. Juni 2010
3
0
0
Sprachen
Hallo
Ich bin neue im forum und ich wollte euch was fragen.
Ich soll als Projekt ein taschenrechner mit minimexle programmieren und komme ich irgendwie nicht klar.kann jemand mich helfen.
Danke
 
Hallo,
herzlich willkommen in diesem Forum.
Ein Taschenrechner ist sicherlich ein interessantes Projekt.
Ich habe mir mal das minimexle angesehen. Ist eigentlich das meiste an Bord, was du dafür brauchst. Nur die Tastatur fehlt noch.
Hast du dir denn schon die Funktionalität überlegt, die der Taschenrechner haben soll?
Erzähle mal etwas mehr, was du machen willst und was du evtl. schon geschafft hast.
Und dann ist immer auch interessant, was du schon für Erfahrungen mit den µCs hast.

HBA
 
Hallo juliot66 !

Ich schließe mich gern meinem "Vorredner" HBA an und begrüße dich auch im AVR-Praxis Forum. :ciao:

Tja und was deine Idee mit dem Taschenrechner betrifft....
Da kann ich mich auch nur HBA anschließen! ;)
Was soll der "Taschenrechner" denn alles können?
Welche Erfahrungen hast du bereits?
In welcher Sprache programmierst du zur Zeit?
Wie weit bist du inzwischen gekommen bzw. an welcher Stelle kommst du denn nicht weiter?
Welche Hardware verwendest du denn für alles?

Du siehst also....
Es sind noch einige Fragen offen, bevor dir Einer weiterhelfen kann. ;)

Schöne Grüße,
Cassio
 
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
 
ok kein problem.Kennst du jemandem der mir helfen kann?

Hallo!

Leider ist C auch nicht meine Sprache.... siehe Fußtext! ;)

Es gibt hier aber einige User die in C programmieren.
Hemi und Nomis3000, um nur zwei Beispiele zu nennen.

Vielleicht wird sich einer von denen hier mal zum Thema melden.
Oder du fragst sie mal per PN, ob sie sich den Thread mal sehen könnten.

Viel Spaß weiterhin,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)