Compter en ascii de 0 à 100

Résolu/Fermé
messii57 - 7 févr. 2012 à 15:46
 messii57 - 7 févr. 2012 à 16:42
Bonjour,
Je suis étudiant en BTS et pour mon projet, je dois configurer un afficheur µOLED de trois façons différentes: afficher une valeur TTL (0-5V) sous dorme de barregraph, numérique et analogique (compteur a aiguille).
Pour afficher ma tension en numérique de 0% a 100%, l'afficheur ne prends que du caractère ASCII, j'ai essayé avec un printf("%c") mais il ne prends pas les caractères donc rien ne s'affiche. Mes valeurs devraient évoluer de la sorte suivante:
0x30=0
0x31=1
.
.
.0x39=9
0x3130=10
0.3131=11
.
.
0x3139=19
0x3230=20
.
.
.
0x313030=100
Je ne peux pas déclarer de variable car la suite logique 0x39 serait 0x40, mais le code ascii de 0x3A qui est la suite logique de 0x39 est est ":".
Voilà je programme avec CCS et j'utilise un PIC1845f80 si vous pourriez me donner au moins la methode a suivre s'il y en a une, je vous remercie d'avance.

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 févr. 2012 à 15:55
Tu comptes "normalement" de 0 à 100, mais en intercalant un '3' avant chaque chiffre.
42 --> 0x3432
1
merci beaucoup!
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
7 févr. 2012 à 16:31
Petit code vite fait :

int transformer(const unsigned byte n)
{
    if (n<10)
        return 30+n;
    
    if (n<100)
        return 3000+100*(n/10)+transformer(n%10);
    
    return 300000+10000*(n/100)+transformer(n%100);
}
0
mais le probleme est que pour mon afficheur je ne peux que mettre 1 caractère en hexadécimal en 0x30 ou 0x31... il faut que je fasse d'abord une conversion en decimal de la valeur ascii ou meme directement un caractere voila mon prog et c'est l'instruction graphic_voltage:
#include <18f4580.h>
#device ADC=8
#include <GSGCdef.h>
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
unsigned char conv;
unsigned char volt;


//-------------------------------------------------------
void OLED_rectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2, unsigned int16 color)
{
putc(GSGC_RECTANGLE);
putc(x1);
putc(y1);
putc(x2);
putc(y2);
putc(color/256);
putc(color%256);
}
//-------------------------------------------------------
void OLED_GRAPHICVOLTAGE(unsigned char x,unsigned char y,,unsigned char font,unsigned int16 color,unsigned char width,unsigned char height, unsigned char string, unsigned char terminator)
{
putc(GSGC_STRINGGFX);
putc(x);
putc(y);
putc(font);
putc(color/256);
putc(color%256);
putc(width);
putc(height);
putc(string);
putc(terminator);
}
//--------------------------------------------------------


//--------------------------------------------------------

void main(void)
{
SET_TRIS_B(0b00000000);
SET_TRIS_A(0b00000001);


setup_adc_ports(AN0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);

putc(0x55);

delay_ms(500);
while(true)
{


conv=READ_ADC();



putc(0x45);
while(!ADC_done())
{
}


volt=conv*0.396;




delay_ms(100);

OLED_graphicvoltage(0x05,0x05,0x02,0x00FF,0x01,volt,0x00);
//OLED_STRINGTXT(0x01,0x01,0x02,0xF800,0x41,0x00);
delay_ms(10);

//OLED_RECTANGLE(0x00,0x24,volt,0x31,0xFF00);



delay_ms(100);

}
}
0