Mplab CC5X LCD [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
17 novembre 2009
-
Messages postés
4
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
17 novembre 2009
-
Bonjour,

Etant débutant en programmation C en Pic, je souhaiterai, si possible, à ce que quelqu'un m'aide au dévelopement et à la compréhension d'un simple programme d'affichage entre un Pic 16F872 et un LCD 16*2.

Merci.
Jspeaker

4 réponses

Messages postés
1
Date d'inscription
jeudi 13 mars 2008
Statut
Membre
Dernière intervention
4 novembre 2009
1
Messages postés
4
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
17 novembre 2009

Bonjour, je tiens a faire profiter de mon programme au cas ou ;)
qu'en pensé vous ?
Ps: je travail finalement avec un LCD 16*1.

/* ********************************************************** */
/* **************** Définition des sorties ****************** */
/* ********************************************************** */

// RS =1 Mode caractére, Rs = 0 mode commande.
// En > Front descendant = validation de la donnée.
// D7 à D4 Mode 4 bits données.

#define RS PORTC.4
#define EN PORTC.5
#define D7 PORTC.3
#define D6 PORTC.2
#define D5 PORTC.1
#define D4 PORTC.0

/* ********************************************************** */
/* ************** Définition des sous fonctions ************* */
/* ********************************************************** */

void delay( char ); // Temporisation en ms 0 < T < 255ms
void Mess( void ); // Sélection d'unmessage
void lcd_init( void ); // Initialisation LCD.
void lcd_send( char ); // Envoie des commandes ou caractéres ASC2 à l'afficheur.
bit text;

/* ********************************************************** */
/* ****************** Initialisation message **************** */
/* ********************************************************** */

const unsigned char texte[ ]="*****MESSA1*****+++++MESSA2+++++/////MESSA3/////Bonjour le monde-----MESSA5-----";

/* ********************************************************** */
/* ****************** Programme Principale ****************** */
/* ********************************************************** */

void main( void )
{
TRISC = TRISC & 0xC0; // D0 - D5 en Sortie on ne modifie pas D7 et D6.
lcd_init(); // Appel de la fonction lcd_init.
Mess(); // Message
}

/* ********************************************************** */
/* ************************* Message ************************ */
/* ********************************************************** */

void Mess( void )
{

/* ****************** Selection du Message ****************** */

char i; // Définition de i caractére de type ASC2.
i=48; // On commence au 48eme caractere du tableau "Bonjour le monde".

/* ********************************************************** */

RS = 0;
lcd_send( 0x01 );
RS = 1;
{
for(i=i; i+8; i++) lcd_send(texte[i]); i++; // envoi des 8 premier caractere

RS = 0; // LCD Mode Commande.
lcd_send( 0xC0 ); // Passage à la deuxiéme partie de l'afficheur
RS = 1; // LCD Mode Caractére.

for(i=i; i+8; i++) lcd_send(texte[i]); i++; // envoi des 8 seconds caractere
}
while(1) nop();

Break: //Boucle infini pour stopper le programme.
goto Break;

}

/* ********************************************************** */
/* ************************ INIT LCD ************************ */
/* ********************************************************** */

void lcd_init( void ) // Initialisation afficheur.
{
delay(40); // Attente de 40 ms appel de la fonction "delay".
RS = 0; // LCD Mode Commande.

// Envoie des caractéres de commande au LCD.

lcd_send(0x32); // LCD en Mode 4 Bits.
lcd_send(0x28); // Une Ligne d'affichage 2x8.
lcd_send(0x0F); // LCD ON + Clignotement + Curseur.
lcd_send(0x06); // Mode incrementation.
lcd_send(0x01); // LCD effacé.

RS = 1; // LCD Mode caractere.
}

/* ********************************************************** */
/* *********************** ENVOI LCD ************************ */
/* ********************************************************** */

void lcd_send( char data ) // Envoi du paramétre d'entrée "data" de type ASC2.
{

// Envoi du MSB.

D7 = data.7; // MSB sur PORTC0 - PORTC3
D6 = data.6;
D5 = data.5;
D4 = data.4;

EN = 1; // Front descendant
nop();
EN = 0;

delay(10); // 10 ms.


// Envoi du LSB.

D7 = data.3; // LSB sur PORTC0 - PORTC3
D6 = data.2;
D5 = data.1;
D4 = data.0;

EN = 1; // Front descendant
nop();
EN = 0;

delay(10); // 10 ms.
}
/* ********************************************************** */
/* *********************** TEMPO **************************** */
/* ********************************************************** */

void delay( char millisec) // Pour un Quartz de 20MHz temporisation en ms.

{
char next = 0;
OPTION = 6; // 128
do {
next += 39;
TMR0 = 0;
clrwdt();
while ( TMR0 < 125) // 125 * 8 = 1000
;
} while ( -- millisec > 0);
}

/* ********************************************************** */
/* ********************************************************** */
/* ********************************************************** */
Messages postés
4
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
17 novembre 2009

à modifier pour selectionner le message dans le programme principale:


void main( void )
{
lcd_init(); // Appel de la fonction lcd_init.

/* ****************** Selection du Message ****************** */

Mess(48); // Message

/* ********************************************************** */

}

/* ********************************************************** */
/* ************************* Message ************************ */
/* ********************************************************** */

void Mess( char i )
{

RS = 0;
lcd_send( 0x01 );
RS = 1;
Messages postés
4
Date d'inscription
jeudi 25 mars 2004
Statut
Membre
Dernière intervention
17 novembre 2009

lol je suis désolé j'ai fais une erreur j'aurai du tester avac de le mettre sur le site ^^'



void Mess( char j )
{
char i;
RS = 0;
lcd_send( 0x01 );
RS = 1;
{
for(i=j; i <= j+7; i++) lcd_send(texte[i]);

RS = 0; // LCD Mode Commande.
lcd_send( 0xC0 ); // Passage à la deuxiéme partie de l'afficheur
RS = 1; // LCD Mode Caractére.

for(j=i; j < i+8; j++) lcd_send(texte[j]);
}
delay(100);
}