Compliant IEEE 754 Floating Point la zecimal

R

roykyn

Guest
Vreau să convertească pe 32 de biţi în virgulă mobilă, numărul de zecimale deci tat i posibilitatea de a afişa o pe 16X2 LCD .....Sunt folosind pic16f72 ..... Am nevoie de procedura sau de modul în care software-ul de lucrări ....

 
Puteţi găsi acest cod de util, dacă nu doriţi codul de marimea sprintf.Odată ce aţi luat în ASCII s [], ai putea avea ieşire că nu contează grafice pentru a afişa sau 2 * 20 LCD display.

Plin de proiect pentru a afişa valorile de temperatură şi RH în 1 zecimală, utilizând această funcţie de mai jos (pentru 65k color LCD display)

Dacă mai multe zecimale vrut, considera sprintf.

Cod:

/ *

************************************************** ************************************************** *****

* Convertiţi un virgulă mobilă, numărul de STRING cu 1 zecimală

*

* Descriere: Această funcţie transformă o virgulă mobilă, la un şir null oprite

* Cu 1 zecimală.

*

* Exemple:

*

* Float f = 9.567;

* Ftoa (& s [0], f); / / s []={' 9','.',' 5 ', 0)

* Float f = -0.189;

* Ftoa (& s [0], f); / / s []={'-','0 ','. ','1', 0)

* Argumentele: "nesemnate caracter * buf 'este pointer la string exploataţie de conversie rezultat

* 'Float f' este de intrare virgulă mobilă

* Livrare: None

* Note: Acest rutină modificate de la itoa10 () în .. \ eşantion \ misc dosar de HT-picc

* Daca mai multe zecimale necesare, modifica ultima secţiune a acestui cod

* Gama de f in (-3,276.7, 3,276.7)

* Această funcţie nu se imprimă ca rezultat 0.0.
În schimb, un singur'0 'am tipărit.

************************************************** ************************************************** *****

* /

nule ftoa (nesemnate caracter * buf, float f) (

nesemnate int real;

nesemnate caracter * S, lungime = 0;

int i;i = (int) ((float) f * 10);s = buf;

dacă (i == 0) (

* s ='0 ';

* S = 0; / / null rezilia string

) Else (

dacă (i <0) (

* buf = '-';

s = buf;

i =-i;

)

/ / în timp ce-buclă de a "descifra" de mult timp pentru a integer ASCII de adăuga'0 ', şir în mod revers

/ / Dacă este un număr întreg de 124 -> string = ('4 ','2','1 ')

în timp ce (i) (

lungime;

rem = i 10%;

* S rem ='0 ';

i / = 10;

)

/ / inversa în acest şir de-bucla, a devenit şir ('1 ','2','4 ') pentru această după-buclă

pentru (rem = 0; ((nesemnate caracter) rem) <Lungimea / 2; reale ) (

* (buf lungime) = * (buf ((nesemnate caracter) real));

* (buf ((nesemnate caracter) rem)) = * (buf (lungimea-((nesemnate caracter) rem) -1));

* (buf (lungimea-((nesemnate caracter) rem) -1)) = * (buf lungime);

)/ * Ai grija de cazul special al 0.x dacă lungime == 1 * /

dacă (lungime == 1) (

* (buf 2) = * buf;

* buf ='0 ';

* (buf 1) = ".";

* (e 2) = 0; / / null rezilia

) Else (

* (buf lungime) = * (buf lungime-1);

* (buf lungime-1 )='.';

* (i 1) = 0; / / null rezilia

)

)

)
 

Welcome to EDABoard.com

Sponsor

Back
Top