Conversione di un numero float in cifre per display

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Conversione di un numero float in cifre per display

Postby alieno75 » 16 Nov 2014, 21:29

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 ?
alieno75
 
Posts: 135
Joined: 21 Apr 2013, 19:39

Re: Conversione di un numero float in cifre per display

Postby js-bascom » 16 Nov 2014, 22:14

Perche' non usi il printf con float? (devi aggiungere la libreria float naturalmente libm.a??)
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Conversione di un numero float in cifre per display

Postby alieno75 » 17 Nov 2014, 09:05

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.
alieno75
 
Posts: 135
Joined: 21 Apr 2013, 19:39

Re: Conversione di un numero float in cifre per display

Postby legacy » 17 Nov 2014, 10:02

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
Last edited by legacy on 18 Nov 2014, 14:59, edited 2 times in total.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Conversione di un numero float in cifre per display

Postby deluca » 17 Nov 2014, 20:25

@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?
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)


Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 9 guests

cron