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

Aide Langage C/C++



  1. #1
    Paulochon

    Aide Langage C/C++


    ------

    Bonsoir a tous,

    Voila je suis étudiatn en electronique est je voudrai réaliser depuis un moment un interface avc un LCD, mais mes connaisaince en C se limite trés vite, Voila pourquoi je vous apelle à l'aide et je vous solicite, Deja ma prof ma passé un petit bout de programme pour initialisé le LCD (il fonctionne en mode 4 bit) mais je n'ait pas vraiment d'exemple concré. Effectivemnt je dispose d'un afficheur 2ligne 16caractère et j'utilise un Atmega8535 mais j'aimerai savoir deja si vous avié quelque exemple à ma donné.Sachant que pour l'écriture je ne veux pas passé par des boucle d'attente mais je vous utiliser les timmers du micro, Si joint le petit bout de prog que j'ai deja.
    Je voudrai tout simplemnt savoir comment on écri sur une ligne et sur l'autre et comment faire changé le texte suivant des appuie sur des boutons.En vous remerciant d'avance de votre aide.
    Cordialement Paulochon.

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    JPL
    Responsable des forums

    Re : Aide Langage C/C++

    Ton programme aurait été plus facile à lire en utilisant la balise Code plutôt que de le joindre en txt.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    Paulochon

    Re : Aide Langage C/C++

    Merci JPL du conseil
    Alors voici danc le bout de code C dont je dispose.
    Code:
    .
    .
    .
    
    #define PORT_AFFICHEUR PORTA
    #define val_bit(bit) (1<<bit)
    #define set_bit(port,bit) port|=(1<<bit)
    #define clear_bit(port,bit) port&=(~(val_bit(bit)))
    
    /* Définitions utilisées pour gérer l'afficheur LCD (PORT_AFFICHEUR) */
    #define BIT_ENABLE 1
    #define BIT_RS 0
    .
    .
    .
    
    /********** Routines de gestion de l'afficheur ************************************/
    
    void lcd_delay (unsigned int t)
    {
    	unsigned int i;
    
    	for (i = 0;  i < t;  i++);
    }
    
    void lcd_ready (void)
    {
    	clear_bit (PORT_AFFICHEUR, BIT_RS);			/* Mode commande */
    	lcd_delay (1000);
    }
    
    /* Routine d'écriture d'un quartet (mode 4 bits) */
    void lcd_write_nibble (unsigned char data)
    {
    	PORT_AFFICHEUR = data;
    	set_bit (PORT_AFFICHEUR, BIT_ENABLE);			/* Impulsion sur le bit EN */
    	lcd_delay (5);
    	clear_bit (PORT_AFFICHEUR, BIT_ENABLE);
    	lcd_delay (5);
    }
    
    /* Routine d'écriture d'une donnée ou 
     * d'une commande. (Dépend du bit RS) */
    void lcd_write_data (unsigned char data)
    {
    	unsigned char d;
    	
    	d=PORT_AFFICHEUR & 3;
    	
    	/* Ecriture du quartet de poids fort */
    	lcd_write_nibble ((data & 0xF0) | d);
    	
    	/* Ecriture du quartet de poids faible */
    	data &= 0x0F;
    	data = data << 4;
    	lcd_write_nibble ((data & 0xF0) | d);
    }
    
    /* Positionnement du curseur à un emplacement donné */
    void lcd_gotoXY (unsigned char x, unsigned char y)
    {
    	unsigned char base_y[2] = { 0x80, 0xC0 };
    
    	lcd_ready ();
    	lcd_write_data (x + base_y[y]);
    	lcd_x = x;
    	lcd_y = y;
    }
    
    /* Effacement de l'afficheur */
    void lcd_clear (void)
    {
    	lcd_ready ();
    	lcd_write_data (0x0C);
    	lcd_ready ();
    	lcd_write_data (1);
    	lcd_ready ();
    	lcd_x = lcd_y = 0;
    }
    
    /* Ecriture d'un caractère */
    void lcd_putchar (unsigned char c)
    {
    	if (c == 10)
    		goto newline;
    	++lcd_x;
    	if (lcd_x > 16)
    	{
    newline:
    		++lcd_y;
    		lcd_gotoXY (0, lcd_y);
    		if (c == 10)
    			return;
    	}
    	lcd_ready ();
    	set_bit (PORT_AFFICHEUR, BIT_RS);	/* Mode donnée */
    	lcd_write_data (c);
    }
    
    /* Ecriture d'une chaîne de caractères */
    void lcd_puts (unsigned char * str)
    {
    	while (* str)
    	{
    		lcd_putchar (* str);
    		str++;
    	}
    }
    
    /* Initialisation de l'afficheur */
    void lcd_init (void)
    {
    	lcd_ready ();
    	lcd_write_data (0x28);	/* Bus de données 4 bits, 2 lignes valides */
    	lcd_ready ();
    	lcd_write_data (0x28);	/* Envoi de la commande une seconde fois (ne fonctionne pas toujours sinon ?) */
    	lcd_ready ();
    	lcd_write_data (6);		/* Déplacement du curseur vers la droite */
    	lcd_clear ();
    	lcd_ready ();
    }
    
    void delay_ms (unsigned int ms)
    {
    	unsigned int i, j, k;
    
    	for (i = 0;  i < ms;  i++)
    	{
    		for (j = 0;  j < 28;  j++)
    		{
    			for (k = 0;  k < 2500;  k++)
    				;	// Boucle de 36 us 
    		}
    	}
    }
    
    void aff_ligne0 (char * m)
    {
    		lcd_gotoXY (0, 0);
    		lcd_puts (m);
    }
    
    void aff_ligne1 (char * m)
    {
    		lcd_gotoXY (0, 1);
    		lcd_puts (m);
    }

Discussions similaires

  1. Langage C
    Par frue20 dans le forum Logiciel - Software - Open Source
    Réponses: 23
    Dernier message: 05/04/2007, 00h57
  2. Langage C
    Par lui dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 14/02/2007, 19h47
  3. langage c
    Par yannicklepaleo dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 31/08/2006, 21h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.