Ce code permet de faire fonctionner l'écran qui est disponible sur LE DEMOBOARD Picdem 2 PLUS de Microchip. Il peut aussi servir à d'autres écran (changer les broches si ce ne sont pas celles choisies). Le compilateur utilisé est CCS. Ce code à été prévu pour un microcontrôleur PIC 16f877.
Source / Exemple :
/***************************************************************|*|
\ Nom du fichier : ecran.c |*|
/ affichage sur écran PICDEM 2 Plus |*|
\ Langage C compilateur CCS |*|
/ |*|
\ Sous-programmes pour utiliser l'ecran PICDEM 2 PLUS |*|
/ Pour pic 16F877 - Langage C - Compilateur CCS |*|
\ Conseils d'utilisation : |*|
/ -> mettre ce programme dans la rubrique Other Files |*|
\ -> metttre #include "[ecran.c]" après la déclaration |*|
/ #device [ref du PIC] |*|
\ pour envoyer afficher une donnée : envoiLCDd([donnée]) |*|
/ effacer : effaceLCD(); |*|
\ commencer sur la ligne 2 : LCD_ligne([0->ligne 1|*|
/ 1->ligne2) |*|
\_/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\_/*/
//#device *=16
#use delay (clock=4000000)
#byte PORTA=0x05
#byte PORTD=0x08
#byte ADCON1=0x9F
//---- Définition des broches pour l'écran --------------//
#bit LCD4=PORTD.0 // LCD data bits
#bit LCD5=PORTD.1
#bit LCD6=PORTD.2
#bit LCD7=PORTD.3
#bit LCD_E =PORTA.1 // LCD E clock
#bit LCD_RW=PORTA.2 // LCD read/write line
#bit LCD_RS=PORTA.3 // LCD register select line
//------------------------------------------------------//
//void initLCD(void);
void envoiLCDn(int donnee_n, int1 rs); //(rs=0 ->instruction rs=1 -> données)
void envoiLCD(int donnee, int1 rs);
int lectureLCD(int1);
void LCDoccupe(void);
void effaceLCD (void);
void envoiLCDd(int a);
void LCD_ligne(int1 ligne);
void initLCD(void) //initialisation de l'écran
{
SET_TRIS_A(0b11110001); // E/S port A
SET_TRIS_D(0xF0); // E/S port D
PORTA=0x00; //Port A à 0
LCD_E=0; //} tout à 0
LCD_RW=0;//} " "
LCD_RS=0;//} " "
ADCON1=0b00001110; // broches A/D
envoiLCDn(0b00110000,0);// -> 1ère séquence de contôle
delay_ms(4); //
envoiLCDn(0b00110000,0);// -> 2ème séquence de contôle
delay_us(100); //
envoiLCDn(0b00110000,0);// -> 3ème séquence de contôle
delay_us(100); //
envoiLCDn(0b00100000,0);// -> 4ème séquence de contôle
delay_ms(4); //
LCDoccupe();
envoiLCD(0b00101000,0);//5) Function set
delay_ms(2);
envoiLCD(0b00001101,0);//6) Display = ON
delay_ms(2);
envoiLCD(0b00000001,0);//7) Display Clear
envoiLCD(0b00000110,0);//8) Entry Mod
envoiLCD(0b10000000,0);//9) DDRAM addresss 0000
return;
}
void envoiLCDn(int donnee_n, int1 rs) //LCD write Nibble
{
LCD_RS=rs; //(rs=0 ->instruction rs=1 -> données)
LCD_RW=0; //on envoi
//TRIS D est déjà en sortie
delay_us(1);
LCD_E=1;
LCD7 = bit_test(donnee_n,7);
LCD6=bit_test(donnee_n,6);
LCD5=bit_test(donnee_n,5);
LCD4=bit_test(donnee_n,4);
delay_us(1);
LCD_E=0;
return;
}
void envoiLCD(int donnee, int1 rs) //
{
LCDoccupe();
envoiLCDn(donnee,rs);
swap(donnee);
envoiLCDn(donnee,rs);
swap(donnee);
return;
}
int lectureLCD(int1 rs)
{
int donnee_lue_a,tmp;
SET_TRIS_D(0xFF); // E/S port D données en entrée
LCD_RS=rs;
LCD_RW=1; //on fait une lecture
delay_ms(1);
LCD_E=1;
delay_ms(2);
donnee_lue_a=PORTD; //4 bits de poids fort
swap(donnee_lue_a); //remis sur les 4 bits de poids fort de l'octet
LCD_E=0;
delay_us(9);
LCD_E=1;
tmp=PORTD & 0b00001111; //on ne prend que les bits de poids faible
donnee_lue_a=donnee_lue_a | tmp; //on colle les bits de poids faible
LCD_E=0;
SET_TRIS_D(0xF0); // E/S port D
return donnee_lue_a;
}
void LCDoccupe(void)
{
int donnee_lue;
do {
donnee_lue=lectureLCD(0);
} while(bit_test(donnee_lue,7)==1);
return;
}
void effaceLCD (void)
{
envoiLCD(0b00000001,0);//7) Display Clear
envoiLCD(0b00000110,0);//8) Entry Mod
envoiLCD(0b10000000,0);//9) DDRAM addresss 0000
return;
}
void envoiLCDd(int a)
{
envoiLCD(a,1);
}
void LCD_ligne(int1 ligne)
{
if(!ligne) envoiLCD(0x80,0);
else envoiLCD(0xC0,0);
return;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.