Programmation 16F877A + LCD (C)

ult1m4tum Messages postés 17 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 1 février 2012 - 5 déc. 2011 à 16:58
ult1m4tum Messages postés 17 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 1 février 2012 - 5 déc. 2011 à 21:12
Messieurs, mesdames (bien qu'elles se fassent rare sur ce genre de forum)

Je cherche a créer un code en C me permettant d'afficher un simple caractère sur un afficheur LCD HD44780 a l'aide d'un PIC 16F877A

J'ai trouvé quelques bases sur le net pour l'initialisation de l'afficheur;
Mais je n'ai aucune idée de la démarche a suivre pour afficher un simple caractère dessus, en lisant la DOC, j'ai vu qu'il y avait une histoire de "trame" a respecter, hors étant débutant en programmation je ne sais pas du tout comment transformer tout cela en C ...

Pourriez vous m'aider sur les démarches a suivre pour me permettre d'afficher un simple caractère en choisissant l'adressage (le positionnement du caractère sur l'afficheur)

tout lien, toute aide me sera utile, je ne demande pas de code, (bien que cela me serait util) mais simplement la démarche !

Merci d'avance a vous tous.

Ult1m4tum

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 déc. 2011 à 17:11
Bonjour.

Je n'ai malheureusement pas la réponse à ta question, mais en tapant "Programmation 16F877A + LCD" dans Google, j'ai obtenu quelques résultats. Notamment: http://forums.futura-sciences.com/electronique/377902-programmer-un-lcd-pic-16f877.html

Ces résultats sont peut être de mauvaise qualités (je ne puis en juger), ce qui expliquerait la raison de ton post. Mais on ne sait jamais :).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
ult1m4tum Messages postés 17 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 1 février 2012
5 déc. 2011 à 17:29
Merci beaucoup pour ton post, effecitvement, cela m'a pas mal aidé,

mais je n'ai pas d'infos sur le compilateur du code donné dans le lien, je boss actuellement sous CC5X pour des réponses plus "précises".
J'ai déja essayé de retoucher un tant soit peu ce code, mais zsans succés !

pour infos nous parlons de CE code :

///////////////////////////////////////////////////////////////////////////
////                             LCD.C                                 ////
////                 Driver for common LCD modules                     ////
////                                                                   ////
////  lcd_init()   Must be called before any other function.           ////
////  lcd_display(c)  Will display c on the LCD.                       ////
////  lcd_clear ()  clear lcd display                                  ////
////  lcd_instruction(instruct)  send an instruction to lcd display    ////
////  lcd_data(data)  send a data to lcd display                       ////
////  void lcd_nl(); go to the next line                               ////
////  void lcd_home(); cursor back to home                             ////
///////////////////////////////////////////////////////////////////////////

// As defined in the following structure the pin connection is as follows:
//     E0 enable
//     E2  rs
//     E1  rw  
//     D0  DATA0
//     D1  DATA1
//     D2  DATA2
//     D3  DATA3
//     D4  DATA4
//     D5  DATA5
//     D6  DATA6
//     D7  DATA7
//   To modify data pin connection, replace output_d by output_x

//----------------------------------PIN------------------------
#define rs PIN_E2
#define rw PIN_E1
#define e  PIN_E0


void lcd_init();
void lcd_clear ();
void lcd_display(char*);
void lcd_data(char);
void lcd_instruction (char);
void lcd_nl();
void lcd_home();

void lcd_init() {
    delay_ms(30);//le lcd se reveille
    output_low(rs);//command
    output_low(rw);//write
    output_low(e);//disable
    lcd_instruction(0x33);//LCD en mode 8 bits
    lcd_instruction(0x38);//mode 8 bits, 2 lignes, caractères 5x7
    lcd_instruction(0x0c);//pas de curseur
    lcd_instruction(0x06);//ecriture de gauche vers la droite
    lcd_instruction(0x01);//clear lcd
    delay_ms(10);
}

void lcd_display(char *data)
{
   while(*data !='\0')
   {
   if(*data=='\n') lcd_nl();
   else lcd_data(*data);
   data++;
   }
}

void lcd_instruction (char x)
{
   output_low(rs);                         //command. 
   output_low(rw);                         //write not read.  
   output_d(x);                      //data to bus.    
   output_high(e);                          //enable.
   delay_us(1);
   output_low(e);                         //disable. 
   delay_ms(10); //lcd busy protect
}

void lcd_data (char x)
{  
   output_high(rs);                        //data  
   output_low(rw);                        //write not read.   
   output_d(x);                     //data to bus.       
   output_high(e);                         //enable. 
   delay_us(1);
   output_low(e);                         //disable. 
   delay_ms(10); //lcd busy protect
}

void lcd_clear ()
{
   output_low(rs);                         //command. 
   output_low(rw);                         //write not read.  
   output_d(0x01);                      //data to bus.    
   output_high(e);                          //enable. 
   delay_us(1);
   output_low(e);                         //disable. 
   delay_ms(5); //lcd busy protect
}

void lcd_nl()
{
lcd_instruction(0xC0); //command to write to the second line
}

void lcd_home()
{
lcd_instruction(0x02);//comand to go back to home
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
5 déc. 2011 à 17:37
Je ne connais pas CC5X (c'est le cc contenu dans l'ensemble d'outil de gcc ou un autre compilateur ?).
En revanche, si tu as des erreurs de compilations, essaie de les poster ici. Si c'est une erreur d'exécution, mes connaissances superficielles sur ce sujet ne me permettront pas de t'aider davantage.

(PS: Pour la coloration, c'est [code=cpp] et non [code])

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 déc. 2011 à 18:44
Salut

il y a régulièrement des articles sur GNU Linux Magasine France, qui traitent de ce genre de sujets. Ils ont même sorti un nouveau mag (qui n'est pas aussi facilement accessible, tant niveau contenu que niveau point de ventes)

Sinon, ce hacker semble être plein de ressources : http://lefinnois.blogspot.com/search/label/Electronique

Bref, je n'ai pas de solution, mais quelques pistes qui peuvent t'ammener vers des gens passionés.

Cordialement,

Maxime
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ult1m4tum Messages postés 17 Date d'inscription lundi 23 mai 2011 Statut Membre Dernière intervention 1 février 2012
5 déc. 2011 à 21:12
Merci de vos réponses,

1°)le CC5X est un compilateur gratuit sous license freeciel je pense que c'est un developpeur indépendant, mais je ne pourrais pas l'affirmer.

2°) Merci pour la balise code, j'avoue ne pas avoir relu mon post une fois posté, désolé.

3°) Pour ce qui est du site, je viens d'y passer une heure, il est très interessant, ajouté a mes favoris, j'ai d'ailleurs été chercher quelques TP d'affichage sur bigonoff sans succés.

Je continue de chercher, si j'ai une solution je vous la transmet ici même mercredi !
0
Rejoignez-nous