Afficheur LCD sous 16F887

RENTMEESTERS Messages postés 3 Date d'inscription samedi 24 septembre 2011 Statut Membre Dernière intervention 3 octobre 2011 - 1 oct. 2011 à 08:55
BunoCS Messages postés 15480 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 juillet 2024 - 3 oct. 2011 à 08:56
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

eclems Messages postés 104 Date d'inscription samedi 23 décembre 2000 Statut Membre Dernière intervention 9 mai 2013
1 oct. 2011 à 21:50
Salut ceci est un forum pour Delphi et non cPP peut tu posez ta question sur cppfrance.fr


cordialement et bonne continuation
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
1 oct. 2011 à 23:03
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++
0
RENTMEESTERS Messages postés 3 Date d'inscription samedi 24 septembre 2011 Statut Membre Dernière intervention 3 octobre 2011
2 oct. 2011 à 08:16
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
0
BunoCS Messages postés 15480 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 juillet 2024 103
3 oct. 2011 à 08:49
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...
0

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

Posez votre question
BunoCS Messages postés 15480 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 26 juillet 2024 103
3 oct. 2011 à 08:56
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...
0
Rejoignez-nous