Afficheur LCD sous 16F887

Signaler
Messages postés
3
Date d'inscription
samedi 24 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011
-
Messages postés
15191
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 décembre 2021
-
Bonjour à tous,

J'ai un projet réunissant un PIC 16F887 et un afficheur LCD.
J'ai donc un LCD.h que voici :

#define   RS           RB4
#define   E            RB5 
#define   LCD         PORTB  

// Clear Display  
#define  CLS     	    0x01 

// Display & Cursor Home 
#define  HOME  		      0x02 

// EntryMode   
#define  CURSOR_DEC            0x04 
#define  CURSOR_INC            0x06

#define  DISP_SHIFT_ON         0x05 
#define  DISP_SHIFT_OFF        0x04

// LCD_Display  
#define  DISPLAY_ON            0x0C
#define  DISPLAY_OFF                   0x08

#define  CURSOR_ON                      0x0A 
#define  CURSOR_OFF                     0x08 
 
#define  BLINK_ON                         0x09 
#define  BLINK_OFF                        0x08
 
// LCD_FonctionSet  
#define  MODE_8BIT                       0x30 
#define  MODE_4BIT                       0x20 
 
#define  MODE_2LINE                    0x28 
#define  MODE_1LINE                    0x20
 
#define  FONT_5x7                          0x20
#define  FONT_5x10                        0x24 

// LCD_ModeSelection 
#define  COMMAND_MODE           0 
#define  DATA_MODE                     1 
 
//===========================================================
void Set_Enable();
void Lcd_SendCommand(unsigned char Command);
void Lcd_SendData(unsigned char Data);

//===========================================================
void Lcd_SendCommand(unsigned char Command)
{
 RS = COMMAND_MODE ;
 LCD = Command;
 Set_Enable();
}
//===========================================================
void Lcd_SendData(unsigned char Data)
{	
  RS = DATA_MODE ;
  LCD = Data;
  Set_Enable();
}
//===========================================================
void Set_Enable()
{
 	 unsigned char i;

  	  E = 1;	for (i=0;i<200;i++);
  E = 0;	for (i=0;i<200;i++);
}
//===========================================================
void Lcd_Init()
{
Lcd_SendCommand (MODE_8BIT | MODE_2LINE | FONT_5x7); 
        Lcd_SendCommand (MODE_4BIT | MODE_2LINE | FONT_5x7); 
        Lcd_SendCommand(DISPLAY_ON | CURSOR_OFF | BLINK_OFF);
        Lcd_SendCommand(CURSOR_INC | DISP_SHIFT_OFF) ;
        Lcd_SendCommand(CLS );
}
//===========================================================
void Lcd_LigneColonne(unsigned char Ligne, unsigned char Colonne)
{
Lcd_SendCommand(DISPLAY_ON | CURSOR_OFF | BLINK_OFF);
     //  if(Ligne==1) 	Lcd_SendCommand (0x80+Colonne);
// if(Ligne==2)
 	Lcd_SendCommand (0xC0+Colonne);
}
//===========================================================


J'essaie donc d'afficher qqchose comme suit :

#include 
#include <LCD.h>


char T[]="Coucou";

void main() {

Set_Enable();
//Lcd_SendCommand ();	
Lcd_Init ();

Lcd_LigneColonne(1,1);
Lcd_SendData(T);
}


Cette merveille de programme à été réaliser pour tester l'afficheur, car mon programme complet n'affichait rien...

Mais rien ne fonctionne !

J'utilise pour test un EsyPic6 : l'afficheur est sur le port B (B0 à B4 en mode 4 bits), E en RB5 et RS en RB4...

Quelqu'un peut-il m'expliquer "la chose" que je n'ai pas vue ??

Merci pour vos bon conseils.

Geoffroy

5 réponses

Messages postés
104
Date d'inscription
samedi 23 décembre 2000
Statut
Membre
Dernière intervention
9 mai 2013

Salut ceci est un forum pour Delphi et non cPP peut tu posez ta question sur cppfrance.fr


cordialement et bonne continuation
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

@RENTMEESTERS : Je ne saurais pas te répondre précisément au sujet de ton problème, cependant je tient à te faire remarquer quelques choses importantes que tu devrais corriger :
- Mettre du code dans un .h est une mauvaise idée. Mettre des macros et des prototype, pas de soucis, c'est fait pour, mais pas de code.
- Les variables globales sont en général une très mauvaise idée, tu ne devrais pas en utiliser.
- Bien nommer ses variables avec un nom explicite est une bonne chose. Là tu as clairement des variables que tu devrais renommer si tu ne veux pas poser des problèmes de compréhension de ton code. Ceci est d'autant plus vrai quand la variable est globale...

@eclems : Non, ceci n'est pas le forum pour Delphi, c'est le bar et donc visible partout. Mais en effet tu as tout à fait raison de dire que ce sujet devrait se trouver sur cppfrance qui, lui, est spécifique au C/C++
Messages postés
3
Date d'inscription
samedi 24 septembre 2011
Statut
Membre
Dernière intervention
3 octobre 2011

Salut,

Merci pour tes remarques, je vais y prêter attention...

Je suis en seconde année de bach en électronique, et je dois bien avouer que je ne suis pas fortich en C/C++ !!

Merci quand même pour vos bons conseils !!


Geoffroy
Messages postés
15191
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 décembre 2021
101
Hello,
Je déplace dans la sectionC/C++


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
15191
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
6 décembre 2021
101
void Lcd_SendCommand(unsigned char Command)
{
 RS = COMMAND_MODE ;
 LCD = Command;
 Set_Enable();
}

A priori, ceci ne risque pas de compiler car RS et LCD sont des constantes définies pas #define au début de ton fichier...
De plus, d'après les nombreuses nombreuses concernant les PIC de ce site, je ne vois pas, dans ton code, de outputb()...
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...