Laskin pic16f84

Mitenkähän pääsisin alkuun, kun pitäisi tehdä laskin ,-,*,/ käyttäen digitaalisia sisääntuloja ja 7-segmenttinäyttöä. Olisko joku sen verran viisas ja auttaisi minut alkuun. Ohjelmointi tapahtuisi tottakai C:llä?

Kiitos etukäteen
7883
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

PIC ja C

Äänestä
  • Olisi mukava kuulla jotain perusteluita että miksi C PIC olisi outo yhdistelmä..
    Assemblyllä voi tehdä jotain todella aikakriittisiä sovellutuksia, esimerkiksi televisioon kuvaa generoitaessa käytetään assemblyä..

    Mutta muulloin tuskin on hirveitä tarpeita siihen ellei satu olemaan guru ASM-koodaaja ja tykkää tehdä asiat vähän hankalammin ;)

    Äänestä

  • tenu kirjoitti:

    Olisi mukava kuulla jotain perusteluita että miksi C PIC olisi outo yhdistelmä..
    Assemblyllä voi tehdä jotain todella aikakriittisiä sovellutuksia, esimerkiksi televisioon kuvaa generoitaessa käytetään assemblyä..

    Mutta muulloin tuskin on hirveitä tarpeita siihen ellei satu olemaan guru ASM-koodaaja ja tykkää tehdä asiat vähän hankalammin ;)

    Olet oikeassa,
       C mikro-ohjain != outo yhdistelmä
    mutta
       C PIC          == outo yhdistelmä
    ymmärsitkö?

    PIC on alun perin suunniteltu johonkin aivan muuhun kuin C-ohjelmointiin ja rauta asettaa jopa merkittäviä rajoituksia sille, millaista koodia voin yleensäkään sille kirjoittaa.

    Maailmasta löytyy kasapäin parempia, PIC:iä vastaavia kontrollereita, joille C-koodaus on mielekästä ja ASMiin ei tarvitse turvautua.

    ANSI/ISO C Compiler for PIC == Joke!

    Äänestä

  • ??? kirjoitti:

    Olet oikeassa,
       C mikro-ohjain != outo yhdistelmä
    mutta
       C PIC          == outo yhdistelmä
    ymmärsitkö?

    PIC on alun perin suunniteltu johonkin aivan muuhun kuin C-ohjelmointiin ja rauta asettaa jopa merkittäviä rajoituksia sille, millaista koodia voin yleensäkään sille kirjoittaa.

    Maailmasta löytyy kasapäin parempia, PIC:iä vastaavia kontrollereita, joille C-koodaus on mielekästä ja ASMiin ei tarvitse turvautua.

    ANSI/ISO C Compiler for PIC == Joke!

    http://microcontroller.com/embeddedsystems.asp?c=9&p=1

    Äänestä

  • ??? kirjoitti:

    Olet oikeassa,
       C mikro-ohjain != outo yhdistelmä
    mutta
       C PIC          == outo yhdistelmä
    ymmärsitkö?

    PIC on alun perin suunniteltu johonkin aivan muuhun kuin C-ohjelmointiin ja rauta asettaa jopa merkittäviä rajoituksia sille, millaista koodia voin yleensäkään sille kirjoittaa.

    Maailmasta löytyy kasapäin parempia, PIC:iä vastaavia kontrollereita, joille C-koodaus on mielekästä ja ASMiin ei tarvitse turvautua.

    ANSI/ISO C Compiler for PIC == Joke!

    Kiitos oikaisusta, olen luullut toisin

    Äänestä

http://www.kolumbus.fi/technode/

Sylttyä mukaan:

/******************************************************************************
************ LABCENTER ELECTRONICS ************
************ Proteus VSM Sample Design Code ************
************ IAR 'C' Calculator ************
*******************************************************************************/

#include "calc.h"
#include "stdio.h"
#include "math.h"
#include "stdlib.h"

//Variables
static FLOAT lvalue;
static FLOAT rvalue;
static CHAR lastop;

VOID main (VOID)
// Initialise our variables and call the
// Assembly routine to initialise the LCD display.
{ lcd_init();
calc_evaluate();
}

VOID calc_evaluate()
{ CHAR number[MAX_DISPLAY_CHAR 1], key;
INT8 pos;
FLOAT tmp;

// Initialize static values:
lvalue = 0;
rvalue = 0;
lastop = 0;

// Display a Zero to start:
calc_format(0);

// Clear the buffer before we start.
pos = 0;

for (;;)
{ key = calc_getkey();
if (calc_testkey(key))
{ // Key test positive for digit so we read it into the
// buffer and then write the buffer to the screen/LCD.
// Size limit the number of digits - allow for termination
// and possible negative results.
if (pos != MAX_DISPLAY_CHAR - 2)
{ number[pos ] = key;
number[pos] = 0;
calc_display(number);
}
}
else
{ // If a number has been entered, then evaulate it.
// The number is stored to lvalue if we have no current operator,
// or else rvalue if we do.
if (pos != 0)
{ tmp = atof(number);
if (lastop == 0)
lvalue = tmp;
else
rvalue = tmp;
}

// Reset the input buffer.
pos = 0;

// Process the Command - LastOp holds the last actual operator;
if (lastop != 0)
calc_opfunctions(lastop);
if (key != '=')
lastop = key;
else
lastop = 0;
}
}
}

VOID calc_opfunctions (CHAR token)
// Handle the operations. Lvalue holds the result and we test for
// consecutive operator presses.
{ INT8 result = OK;
switch (token)
{ case ' ' : lvalue = rvalue; break;
case '-' : lvalue -= rvalue; break;
case '*' : lvalue *= rvalue; break;
case '/' :
if (rvalue != 0)
lvalue /= rvalue;
else
result = ERROR;
break;
}

if (result == OK)
calc_format(lvalue);
else if (result == ERROR)
calc_display("*ERROR*");
}


/************************************************************************
***** Utility Routines *****
***************************/

VOID calc_format (FLOAT f)
{ CHAR buf [MAX_DISPLAY_CHAR 1];
FLOAT divisor = 100000000;
FLOAT digit;
INT8 pad=0, p=0;

// Sort out minus sign:
if (f >= 0)
buf[p ] = ' ';
else
{ buf[p ] = '-';
f = -f;
}

if (f >= divisor)
buf[p ] = 'E';
else
while (p < MAX_DISPLAY_CHAR && (divisor > 1 || f >= 0.0000001))
{ divisor /= 10;
digit = floor(f/divisor);
if (divisor < 1 && divisor > 0.01)
buf[p ] = '.';
if (digit != 0 || divisor < 10)
{ buf[p ] = digit '0';
pad = TRUE;
}
else if (pad)
buf[p ] = '0';
f -= digit*divisor;
}
buf[p] = 0;
calc_display(buf);
}

BOOL calc_testkey (CHAR key)
// Test whether the key is a digit, a decimal point or an operator.
// Return 1 for digit or decimal point, 0 for op.
{ if ((key == '.')|| ((key >= '0') && (key

Äänestä

Kommentoi aloitusta


Kauko kirjoitti:

Mitenkähän pääsisin alkuun, kun pitäisi tehdä laskin ,-,*,/ käyttäen digitaalisia sisääntuloja ja 7-segmenttinäyttöä. Olisko joku sen verran viisas ja auttaisi minut alkuun. Ohjelmointi tapahtuisi tottakai C:llä?

Kiitos etukäteen

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu