begin process at 2012 05 28 22:55:03
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Conversion décimal


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Conversion décimal

vendredi 1 février 2008 à 17:38:33 | Conversion décimal

flothehacker

Bonjour,
Je vais essayer d'être le plus clair possible.
En fait j'ai un projet qui vise à récupérer une tension d'un capteur de rotation à envoyer sur un CAN d'une carte de développement de chez STelectronics (DK3300).
Après paramètres et autre initialisations, je met les contenus des registres ADAT0 et ADAT1 dans un buffer nommé : char nb_degre [3].
ensuite j'affiche ce buffer : printfLCD(nb_degre).
pas de souci, résultat : 100  -> c'est qui veut dire que je tourne le capteur de 360° , la valeur hexa vaut 0x100 donc 256 en décimal...

Maintenant, place au problème!
Je doit afficheur sur mon afficheur 2x16 la valeur en degré.
d'abord je passe ma valeur hexa (0x100) en décimal avec un petit algorithme trouvé sur le net ( nb_buffer[2] + (16* nb_buffer[2] + 16*( nb_buffer[0]*16) il me semble).
Pour finir je fait  (*360 / 256) pour me donner la valeur en degré. cette nouvelle variable s'appelle "new_degre" par exemple.
je devrai donc avoir 360 sur mon afficheur.

quand je lance un printfLCD("nombre en degré %w",new_degre), cela m'affiche 168 au lieu de 360. remarque : 0x168 est la valeur hexa de 360!

notes : la fonction printfLCD est toute faite dans le kit de développement et je n'ai à ma disposition lors des paramètres d'affichage que %d   %x  %w

J'ai fait pas mal de test, dont un avec Dev-C++ et là ca marche, miracle!
mais pas avec mon compilateur fourni avec le kit ( Uvision 3).

j'ai essayé d'autre chose, comme mettre ma valeur "new_degre" en int, mais rien l'affiche m'affiche lentement des '0' ou des '1'...

Voilà qu'en pensez vous?

Merci d'avance
samedi 2 février 2008 à 16:42:10 | Re : Conversion décimal

juju12

Ben c'est peut-être ta fonction printfLCD qui affiche en hexa; dans ce cas tu dois convertir ta valeur pour que, par exemple si tu souhaites afficher 360 (décimal), faudrais alors passer à printf la valeur 360 (hexa ce coup-ci).

samedi 2 février 2008 à 21:11:13 | Re : Conversion décimal

flothehacker

Oui, j'ai pensé aussi à cette solution, mais je ne me retrouve pas dans ce sous-programme "printfLCD" pour pouvoir afficher en décimal et non en hexa.
voici ce sous-programme, si vous trouver l'endroit où cela pose problème ca serait génial!

void printfLCD(unsigned char *ptr, ...)

{

unsigned char c1,c2;

unsigned int c3;

//unsigned char *var_ptr=&ptr+1;

unsigned char var;

unsigned char orig_buscon;

#ifdef __RC51__ //use ANSI stdarg

va_list var_ptr;

va_start(var_ptr,0);

#else

unsigned char *var_ptr=&ptr+1;

#endif

orig_buscon = BUSCON; // Save buscon value

BUSCON |= 0x3C; // Set Xdata Read/Write to max wait states

 

if(ulayer >3) //if page exceed the range 0 to 3,force it to 0.

ulayer = 0;

while (*ptr != NULL)

{

c1 = *ptr;

c2 = *(ptr+1);

c3 = c1;

c3 = (c3<<8)|c2;

if(c1 <= 128) // deal with asc code , if c1<=128 ,it will deal with asc code,otherwise Chinese word.

{

if ( *ptr == '\r')

{

ptr++;

ucol = 0;

}

else if( *ptr == '\n')

{

ptr++;

ucol = 0;

ulayer++;

}

else if( *ptr == '%')

{

ptr++;

if (*ptr == 'd')

{

ptr++;

#ifdef __RC51__ //use ANSI stdarg

var = *var_ptr--;

var_ptr--;

#else

var = *var_ptr++;

#endif

c1 = (var & 0x0F)+'0';

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

}

else if (*ptr == 'x')

{

#ifdef __RC51__ //use ANSI stdarg

var = *var_ptr--;

var_ptr--;

#else

var = *var_ptr++;

#endif

c1 = htoa_hi(var);

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

c1 = htoa_lo(var);

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

ptr++;

}

else if (*ptr == 'w')

{

ptr++;

#ifdef __RC51__ //use ANSI stdarg

var_ptr--;

var = *var_ptr;

#else

var = *var_ptr++;

#endif

c1 = htoa_hi(var);

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

c1 = htoa_lo(var);

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

#ifdef __RC51__ //use ANSI stdarg

var_ptr++;

var = *var_ptr;

var_ptr-=2;

#else

var = *var_ptr++;

#endif

c1 = htoa_hi(var);

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

c1 = htoa_lo(var);

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

}

else

{

c1 = *ptr;

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

ptr++;

}

}

else

{

disp_one_asc(ucol,ulayer,c1,mode);

ucol+=7;

ptr++; // one asc need one byte in computer system

}

}

#ifdef ENGLISH_CHINESE_FONT

else //deal with Chinese, if c1<=128 ,it will deal with asc code, otherwise Chinese word.

{

if(mode)

disp_one_ch(ucol,ulayer,c3,1);

else

disp_one_ch(ucol,ulayer,c3,0);

ucol+=16; //16*16 Chinese dot matrix

ptr += 2; //one Chinese word need two byte in computer system

}

#endif

}

BUSCON = orig_buscon; // Restore buscon value

}



c'est long je sais, et je vous en remercie si vous avez tout regardé.


F.Pierru
Etudiant Master 2 Electronique Instrumentation Photonique

samedi 2 février 2008 à 23:27:51 | Re : Conversion décimal

SAKingdom

Membre Club
Pour afficher en décimal, on utilise %d
printfLCD("nombre en degré %d",new_degre)

C++ (@++)

dimanche 3 février 2008 à 10:12:58 | Re : Conversion décimal

flothehacker

le problème est que %d m'affiche très lentement des "0". pourtant j'ai tenté de mettre ma variable en int, et autre.
Il n'y a qu'avec %w que je m'approche le mieux du résultat.
mon but est de comprendr le programme ci-dessus et ainsi tenter de déboger le truc et le refaire à ma sauce.


F.Pierru
Etudiant Master 2 Electronique Instrumentation Photonique



Cette discussion est classée dans : buffer, valeur, nb, décimal, degre


Répondre à ce message

Sujets en rapport avec ce message

base de registre : fonction gerenumvalue [ par Daimadoshi ] mo code : while (ERROR_NO_MORE_ITEMS!=RegEnumValue(//trouve le nombre de valeurs contenues dans la cle m_CleOuverte,//Handle de la cle ouverte ind lire un octet [ par th62d ] Bonjour,Je dois lire la valeur se trouvant dans buffer. char buffer[10]; printf("%x\r\n",buffer[1]); La ReadFile rs232 [ par ekinox17 ] Salut a tous, J'ai un petit problème, j'envoie un requête rs232 et ensuite je recupere son retour pour mesurer une valeur sur le periph ... enfin bref nb décimal [ par neo888 ] lut,j'utilise borland6 et je n'arrive pas à avoir simplement 2 chiffres apres la virgule.du type:tier=1/3=0.3333333333comment faire pour avoir que 0.3 [Win32] Problème Static / Scrollbar [ par Iphelias ] Bonjour,Voila j'ai un petit Soucis en fait dans mon application win32, j'ai une scrollbar et j'aimerais mettre à jour un champ correspondant à la vale Fonction / Tableau [ par zlatan40 ] Bonjour a tous J'ai des problème avec mes fonctions qui retourne ou prenne en paramètre un tableau. Dans le code je récupère le tableau Buffer et ensu Manipuler des caracteres un par un avec la fonction read... [ par ROW_PyRo ] Bonjour, Je suis actuellement sur un projet, BSQ. [quote] Il s'agit de trouver le plus grand carré possible sur un plateau en évitant des obstacles. 2octets --> 1 décimal [ par LaTatadu91 ] Bonjour,Je cherche un moyen pour décrypter un buffer contennat des octetsj'arrive parfaitement a le faire octet apr octet mais je me retrouve dans un Changer le type d'une variable [ par dayvid75014 ] Bonjour à tous,J'aimerais rechercher des octets dans un tableau : 0x47. MAIS, lorsque je définis "int valeur=47" et que je fais dans ma boucle Buffer[ Besoin d'aide [ par romainbisson ] Bonjour,j'ai besoin de faire un programme qui lit ligne par ligne un fichier en recuperant a certains emplacement de la ligne, la valeur :exemple de l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales