Page 1 of 1

Conversione di un numero float in cifre per display

PostPosted: 16 Nov 2014, 21:29
by alieno75
Il mio obbiettivo è di convertire tramite codice in linguaggio C una cifra da float a 7 segmenti per la
calcolatrice z80 da me costruita ----> viewtopic.php?f=4&t=532 .
Ho scritto il seguente coedice ma non funziona provate voi stessi a compilarlo ed eseguirlo:

Code: Select all
#include <stdio.h>
#include <stdlib.h>

int cifre[8];

int n;

int main()
{
      converti_numero(42.42);
      for(n=7;n!=0;n--)
      {
           printf("%d", cifre[n]);
      }
  system("PAUSE");   
  return 0;
}



display.c
Code: Select all
#include "display.h"



extern int cifre[8];

//funzione di conversione da numero float a cifre a 7 seg.
void converti_numero(float numero)
{
    cifre[7]=0;
    do
    {
        if(numero>100000)   
        {
            cifre[7]++;
            numero=numero-100000;   
        }   
    }while(numero>=10);
   
    cifre[6]=0;
    do
    {
        if(numero>=10000)   
        {
            cifre[6]++;
            numero=numero-10000;
        }
    }while(numero>=10000);
   
    cifre[5]=0;
    do
    {
        if(numero>=1000)   
        {
            cifre[5]++;
            numero=numero-1000;
        }
    }while(numero>=1000);
   
    cifre[4]=0;
    do
    {
        if(numero>=100)   
        {
            cifre[4]++;
            numero=numero-100;
        }
    }while(numero>=100);
   
    cifre[3]=0;
    while(1)
    {
        if(numero>=10)   
        {
            cifre[3]++;
            numero=numero-10;
        }
    }
   
   
    cifre[2]=0;
    while(1)
    {
        if(numero>=1)   
        {
            cifre[2]++;
            numero=numero--;
        }
    }
   
   
    cifre[1]=0;
    while(1)
    {
        if(numero>=0.1)   
        {
            cifre[1]++;
            numero=numero-0.1;
        }
    }
   
    cifre[0]=0;
    while(1)
    {
        if(numero>=0.01)   
        {
            cifre[0]++;
            numero=numero-0.01;
        }
    }
}



display.h
Code: Select all
//file header dei drivers


void converti_numero(float numero);



Questo codice l' ho trovato su internet ma non funziona.
Nessuno mi puo' aiutare a trovare un codice alternativo funzionante che mi fa la converte un float in cifre numeriche decimali ?

Re: Conversione di un numero float in cifre per display

PostPosted: 16 Nov 2014, 22:14
by js-bascom
Perche' non usi il printf con float? (devi aggiungere la libreria float naturalmente libm.a??)

Re: Conversione di un numero float in cifre per display

PostPosted: 17 Nov 2014, 09:05
by alieno75
No forse non mi sono spiegato abbastanza bene: con la printf() non riesco a stanpare un float in tutte cifre integer.
Io devo far di che il la variabile float venga scomposta nelle sue cifre per poi visualizzarle nei display a sette segmenti led. E' più complicato di quello che sembra.

Re: Conversione di un numero float in cifre per display

PostPosted: 17 Nov 2014, 10:02
by legacy
quello che ti serve e' un float_to_string

Code: Select all
sprintf(value_string, "%f", value_float);


dopo di che cicli nella stringa
e per ogni char
- se e' virgola in qualche modo te la gestisci (1)
- altrimenti decodifichi char_num_to_7seg

(1) un LCD 7seg ha modo di visualizzare { '0','1','2',3','4','5','6','7'','8','9','.' }
la virgola o punto fa parte di cio' che si può visualizzare

Re: Conversione di un numero float in cifre per display

PostPosted: 17 Nov 2014, 20:25
by deluca
@alien75,
l'algoritmo te l'ha già dato legacy,
quante cifre devi visualizzare sul dislay 7seg, ovvero, quanti display 7seg hai disponibili sulla scheda?
visto che stai manipolando float, il punto decimale ovviamente deve spostarsi sui display.... dico bene?

Edit: Forse sono 8 i display... ;) confermi?