Bonjour à tous,
J'ai le projet d'afficher sur un LCD des valeurs de capteur de temperature et de pression et avec un bouton passer d'un capteur à un autre.
Je travail donc avec MpLab V8.84 et MCC18. Mon Pic sera un 18f452 et un ecran alphanumérique 20*2.
Je lis donc les différents cours du site aix-mrs.fr qui sont très bien adaptés pour mon cas. Je compile avec MCC18 puis j'ai réalisé le picdem2+ avec ISIS de Proteus afin de testé.
J'ai donc compilé l'exemple "test fprintf" (que je comprend) sans modification dont voici le code :
Mais sur ISIS on voit bien sur l'ecran le 1er message avec "test printf", j'appui sur le bouton et le second message avec "caracteres..." s'affiche mais au bout de quelques secondes le 1er message revient. Comment cela ce fait il?Code:// CD 01/2005 // test printf sur PICDEM2+ et MCC18 v2.40 #include <p18f452.h> #include <stdio.h> // printf #include <xlcd.h> // pour OpenXLCD et putcXLCD unsigned char c; int i; unsigned char tampon[10]; rom const unsigned char chrom[]=" en ROM"; unsigned char chram[]=" en RAM"; unsigned char * pram; rom unsigned char *prom; float f; // dirige user_putc vers l'afficheur LCD du PD2+ int _user_putc (char c) { putcXLCD(c); } void touche(void) { while(PORTA & 0x10); while(!(PORTA & 0x10)); // efface l'afficheur LCD SetDDRamAddr(0); fprintf(_H_USER," "); SetDDRamAddr(0x40); fprintf(_H_USER," "); } void main(void) { TRISA=0b00010000; // PORTA en entrée pour S2 OpenXLCD(FOUR_BIT & LINES_5X7 ); //initialise PIC pour LCD sur PD2 SetDDRamAddr(0); //ligne 0 de l'afficheur f=5000.0/3.0; i=150-200; c='A'; pram=(unsigned char *)0x12AB ; prom=(rom unsigned char *)0xAB12; while(1) { SetDDRamAddr(0); //ligne 0 de l'afficheur fprintf(_H_USER,"TESTS PRINTF"); SetDDRamAddr(0x40); fprintf(_H_USER,"appuyez sur S2"); touche(); SetDDRamAddr(0); fprintf(_H_USER,"caracteres: %c ",c); SetDDRamAddr(0x40); fprintf(_H_USER,"%d %X %#X ",c,c,c); touche(); SetDDRamAddr(0); fprintf(_H_USER,"integers: %d",i); SetDDRamAddr(0x40); fprintf(_H_USER,"%u %#x",i,i); touche(); SetDDRamAddr(0); fprintf(_H_USER,"binaires: %b",0x1A); SetDDRamAddr(0x40); fprintf(_H_USER,"%010b",0x1A); touche(); SetDDRamAddr(0); fprintf(_H_USER,"Ptr RAM: %p",pram); SetDDRamAddr(0x40); fprintf(_H_USER,"%#010P",pram); touche(); SetDDRamAddr(0); fprintf(_H_USER,"Ptr ROM: %p",prom); SetDDRamAddr(0x40); fprintf(_H_USER,"%#010P",prom); touche(); SetDDRamAddr(0); fprintf(_H_USER,"RAM %s",chram); SetDDRamAddr(0x40); fprintf(_H_USER,"ROM %S",chrom); touche(); SetDDRamAddr(0); ftoa(f,tampon,3,'s'); fprintf(_H_USER,"Reel: %s",tampon); SetDDRamAddr(0x40); fprintf(_H_USER,"Reel: %s",ftoa(f,tampon,5,'f')); touche(); SetDDRamAddr(0); fprintf(_H_USER,"caract%cres perso",5); SetDDRamAddr(0x40); fprintf(_H_USER," %c%c%c%c%c%c%c%c ",0,1,2,3,4,5,6,7); touche(); } }
Du coup je ne peux pas changer de message et rester sur celui souhaité.
Que dois je faire?
Merci de votre aide,
Bonne soirée
-----