Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

afficher un caractère avec mikroC



  1. #1
    nanard

    afficher un caractère avec mikroC


    ------

    bonjour

    J'ai un problème je souhaite créer une horloge pour la partie heure et date c'est ok, mais pour la mise a l'heure j'ai un problème.

    voilà mon début de programme:

    char *nombre;

    void main (void)
    {
    nombre = 0;
    LCD_INIT (&PORTB);
    LCD_OUT (1,1,"nombre");
    delay_ms (1000);
    nombre ++;
    LCD_OUT (1,8,nombre);
    while (1)
    {
    if (portc.f0 ==0)
    {
    lcd_out (2,1,"essai");
    }
    }
    }


    la ligne que ne fonctonne pas ets:
    LCD_OUT (1,8,nombre);
    a la place de m'afficher 1 çà m'affiche un caractère bizare. où est le problème?

    merci

    -----

  2. Publicité
  3. #2
    HULK28

    Re : afficher un caractère avec mikroC

    Bonjour,

    normal tu déclares nombre comme étant un pointeur sur un char, un pointeur ne se manipule pas comme un simple char.

    Il faut écrire:

    par exemple:
    char *nombre="0123456789ABCDEF";

    nombre est un pointeur sur un char qui est en fait une chaine dans notre exemple.
    Cela suffit au compilateur les lignes suivantes que tu as introduites sont inutiles.

    Si tu écris:

    LCD8_OUT(1,1, nombre); // ne pas oublier le 8

    la chaine complete va s'afficher car la fonction LCD8_OUT(ligne, colonne, *text) attend un pointeur en argument et donc va le traiter comme tel.
    @+
    Dernière modification par HULK28 ; 09/08/2008 à 17h43.
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  4. #3
    nanard

    Re : afficher un caractère avec mikroC

    merci

    mais j'ai essayé:
    char nombre;
    char *nombre;
    char *nombre="12";
    char nombre [2];

    mais çà ne fonctionne pas, les lignes suivantes servent pour autre chose, je veux juste afficher ce que je met dans nombre et j'utilise lcd_out car je travaille sur 4bits.

    Autre chose est il possible de "donner" un nom au patte du µC (par exemple mettre inc à la place de portc.fo)?

    @+

  5. #4
    HULK28

    Re : afficher un caractère avec mikroC

    Tu peux aussi stocher tes textes en mémoire Flash (tu laisseras ainsi de la place libre en RAM en ne stockant que provisoirement le rapatriement de la chaine stockée en Flash lors de l'appel de LCD8_OUT).

    Exemple:

    const char *text_init = "Initialisation";

    pour récupérer cette chaine stockées en Flash il faut passer par la moulinette suivante:

    Code:
    void StringConstCopy(char ligne, char colonne, const char *text_source)
    
    {
    char *dest;
    char buf[17]; // buffer contient la taille maximum du texte source + 1
    
    dest = buf;
    while(*text_source)
    *dest++=*text_source++;
    *dest=0;
    lcd8_Out(ligne,colonne,buf);
    }
    Ainsi on utilise un buffer en RAM qui contiendra le contenu de la chaine de texte stockée en Flash et transmise dans ce tableau sous forme d'une chaine.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  6. #5
    HULK28

    Re : afficher un caractère avec mikroC

    Ah OK si tu travailles sur 4 bit c'est bien LCD_OUT qu'il faut prendre, mais le principe est identique.
    Ton problème doit venir de l'initialisation de ton afficheur.
    Poste moi ton code complet.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  7. A voir en vidéo sur Futura
  8. #6
    HULK28

    Re : afficher un caractère avec mikroC

    Dernière chose, en lisant ton code je vois que tu affectes le portB à ton afficheur, hors si tu utilises la fonction LCD_OUT tu dois obligatoirement affecter les bits E,RS,R/W à B3,B2,B0 si tel n'est pas le cas il faut au préalable utiliser la focntion LCD_Init telle que:

    void Lcd_Config(unsigned short *port, unsigned short RS, unsigned short EN, unsigned short WR, unsigned short B7, unsigned short B6, unsigned short B5, unsigned short B4);

    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  9. Publicité
  10. #7
    HULK28

    Re : afficher un caractère avec mikroC

    Citation Envoyé par nanard Voir le message
    Autre chose est il possible de "donner" un nom au patte du µC (par exemple mettre inc à la place de portc.fo)?
    Oui bien sûr:

    #define inc PORTC.F0 // maintenant inc est reconnu comme étant PORTC.F0
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  11. #8
    nanard

    Re : afficher un caractère avec mikroC

    ok merci

    Pour lcd_init j'ai un souci:
    RS -> RB2
    R/W -> gnd
    E -> RB3
    .
    .
    .
    je peux assigner toutes les pattes de l'afficheur sauf R/W.
    Je ne pense pas que le problème vienne de là puisque j'affiche se que je veux sauf se problène de "nombre".

    Tu es sur qu'il faut faire tout çà pour afficher un simple caractère? Quand je travaillais sur ATMEL il suffisait de faire:

    char nombre;
    void main (void)
    {
    nombre = 1;
    lcd_affiche (1,1,nombre);
    }

    et mon caractère était affiché s'il faut faire comme tu dis à chaque fois que l'on veux afficher un caractère on est pas couché.

  12. #9
    HULK28

    Re : afficher un caractère avec mikroC

    Citation Envoyé par nanard Voir le message
    merci

    mais j'ai essayé:
    char nombre;
    char *nombre;
    char *nombre="12";
    char nombre [2];
    Nanard, le C n'accepte pas le hasard comme variable.

    char nombre; défini "nombre" comme étant une variable de type char (0 à 255 ou 0 à 0xFF)

    char *nombre; défini "nombre" comme étant un pointeur sur un char.

    char *nombre="12" (nous allons voir après)
    char nombre[2]; défini un tableau contenant 2 variables de type char et le caractère de fin de chaine \0

    par exemple:

    char nombre[2]={3,5,\0}

    pour accéder au éléments du tableau:
    nombre[0] = '3';
    nombre[1] = '5';
    nombre[2] = '\0';

    ainsi si tu souhaites créer un tableau contenant une chaine de 16 caractères il faut créer un tableau tel que:

    char tableau[17];

    Alors qu'elle différence me dirais-tu entre pointeur et tableau finalement?

    char nombre[2] = "12"; et char *nombre = "12";

    Dans le premier cas, le compilateur alloue un tableau de 2 caractères qu'il initialise avec les caractères 1,2, et \0. Toute occurrence de nombre dans une expression sera convertie en type pointeur vers char.

    Dans le second cas, le compilateur alloue un tableau de 2 caractères qu'il initialise de la même manière que dans le premier cas, mais de surcroît, il alloue une variable de type pointeur (nombre) vers char qu'il initialise avec l'adresse du premier caractère de la chaîne.

    Ceci est un cas particulier des tableaux de caractères qui ne se reproduit pas avec les autres types. On peut déclarer un tableau d'entiers par int nombre[] = {1, 2, 3, 4, 5}, mais on ne peut pas déclarer un pointeur vers un tableau d'entiers par :
    int *nombre = {1, 2, 3, 4, 5};.


    C'est une subtilité qu'il vaut mieux ne pas ignorer quand on joue avec les pointeurs.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  13. #10
    HULK28

    Re : afficher un caractère avec mikroC

    Citation Envoyé par nanard Voir le message
    char nombre;
    void main (void)
    {
    nombre = 1;
    lcd_affiche (1,1,nombre);
    }

    et mon caractère était affiché s'il faut faire comme tu dis à chaque fois que l'on veux afficher un caractère on est pas couché.
    Non, c'est très simple également, désolé si je suis allé trop loin dans mes explications.

    si tu écris:

    LCD_OUT(1,1,0x30+0) tu afficheras "0"

    ou bien sûr simplement:
    LCD_OUT(1,1,0x30) ou encore LCD_OUT(1,1,48) (48 étant l'équivalent décimal de 0x30)

    0x30 est le début de la table ASCII en ROM (0-> 0x30, 1-> 0x31, etc) de ton afficheur.

    Si tu écris LCD_OUT(1,1,0) "0" n'apparaitra pas et pour cause.

    Par contre si tu écris:

    Code:
    LCD_OUT(1,1,'0')
    0 sera traité comme un caractère.

    Essaye tu verras bien.

    Il ne faut pas confondre les variables, les caractères, les chaines, etc...
    Dernière modification par HULK28 ; 09/08/2008 à 19h05.
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  14. #11
    HULK28

    Re : afficher un caractère avec mikroC

    Donc pour être complet dans ton exemple il faut que tu écrives:

    Code:
    LCD_OUT(1,1,0x30+nombre)
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  15. #12
    nanard

    Re : afficher un caractère avec mikroC

    Citation Envoyé par HULK28 Voir le message
    si tu écris:

    LCD_OUT(1,1,0x30+0) tu afficheras "0"

    ou bien sûr simplement:
    LCD_OUT(1,1,0x30) ou encore LCD_OUT(1,1,48) (48 étant l'équivalent décimal de 0x30)
    Bonjour,

    J'ai essayé LCD_OUT(1,1,0x30+0) et LCD_OUT(1,1,0x30) tu afficheras "0" mais çà n'affiche rien
    merci

  16. Publicité
  17. #13
    nanard

    Re : afficher un caractère avec mikroC

    Citation Envoyé par HULK28 Voir le message
    Donc pour être complet dans ton exemple il faut que tu écrives:

    Code:
    LCD_OUT(1,1,0x30+nombre)

    Sa ne fonctionne pas plus
    @+

  18. #14
    nanard

    Re : afficher un caractère avec mikroC

    re,

    Je réexplique mon problème:
    Je souhaite incrémenter ou décrémenter un nombre et l'afficher sur un afficheur 2x16 caractère.
    Par exemple:
    Je met en route l'appareil il m'affiche 5 j'appui sur un bouton "-" il m'affiche 4 puis sur le bouton "+" il m'affiche de nouveau 5, le problème est que je n'arrive pas à afficher le nombre 5 (à par en mettant LCD_OUT(1,1"5"); mais là je ne peut pas utiliser le nombre puisqu'il est pris en tant que caractère).
    Pouvez vous m'aider?
    merci @+

  19. #15
    HULK28

    Re : afficher un caractère avec mikroC

    Salut,

    pour gagner du temps poste moi ton programme actuel complet, je te le corrige et je te le reposte.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  20. #16
    HULK28

    Re : afficher un caractère avec mikroC

    Poste aussi ta schématique actuelle.
    @+
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  21. #17
    VIIV

    Re : afficher un caractère avec mikroC

    Ce tout con par ex. ta variable i de type int, faut la convertir en string avec la fonction IntToStr() puis ensuite tu peux afficher la valeur i sur le LCD.
    Appuie sur F1 dans mikroC et tape convert

  22. #18
    HULK28

    Re : afficher un caractère avec mikroC

    Bonjour aussi,

    Non c'est pas nécessaire ici, il ne s'agit pas d'afficher un "string" (chaine de caractères) mais un simple caractère, donc pas besoin de convertir quoique ce soit.
    La fonction Lcd_Chr() se suffit à elle même.
    Le génie est fait d'1 pour cent d'inspiration et de 99% pour cent de transpiration. Edison

  23. Publicité
  24. #19
    nanard

    Re : afficher un caractère avec mikroC

    Bonsoir et merci

    Voilà mon programme:
    char nombre;
    #define inc PORTC.F0
    #define dec PORTC.F1

    void main (void)
    {
    nombre = 0x35;
    LCD_INIT (&PORTB);
    LCD_OUT (1,1,0x30+nombre);
    delay_ms (1000);
    while (1)
    {
    if (inc == 0)
    {
    nombre++;
    lcd_out (2,1,0x30+nombre);
    }
    if (dec == 0)
    {
    nombre--;
    lcd_out (2,1,0x30+nombre);
    }
    }
    }

    merci @+

  25. #20
    nanard

    Re : afficher un caractère avec mikroC

    Pur la schematique j'utilise la plaque easyPic3 avec un 18f252 à 8MHz, un afficheur 2x16 en 4 bits sur le port B.
    voilà @+

  26. #21
    VIIV

    Re : afficher un caractère avec mikroC

    Citation Envoyé par HULK28 Voir le message
    Non c'est pas nécessaire ici, il ne s'agit pas d'afficher un "string" (chaine de caractères) mais un simple caractère, donc pas besoin de convertir quoique ce soit.
    Hé, Hulk chez toi les horloges ne montent pas jusqu'à 59?
    A mois que tu veuilles utiliser 4 variables (ou 6 avec les secondes), autrement je vois pas comment tu peux faire sans conversion...
    Bien sur, je peux me tromper.

Sur le même thème :

Discussions similaires

  1. Le PWM avec MikroC
    Par inoxxam dans le forum Électronique
    Réponses: 12
    Dernier message: 24/02/2013, 16h04
  2. Programmer un 16F628 avec MikroC
    Par inoxxam dans le forum Électronique
    Réponses: 30
    Dernier message: 16/10/2011, 01h00
  3. débogage InCircuit avec MikroC
    Par BastienBastien dans le forum Électronique
    Réponses: 5
    Dernier message: 06/04/2008, 19h30
  4. problème avec mikroC
    Par ABN84 dans le forum Électronique
    Réponses: 4
    Dernier message: 07/03/2007, 17h47
  5. Afficher me caractère "é" en C++
    Par LicenceXP dans le forum Logiciel - Software - Open Source
    Réponses: 12
    Dernier message: 11/10/2006, 07h57
Découvrez nos comparatifs produits sur l'informatique et les technologies.