Mplab CC5X LCD

Résolu
ojejeo Messages postés 4 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 17 novembre 2009 - 17 oct. 2009 à 15:15
ojejeo Messages postés 4 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 17 novembre 2009 - 17 nov. 2009 à 18:20
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

mekhalayin Messages postés 1 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 4 novembre 2009 1
4 nov. 2009 à 13:53
1
ojejeo Messages postés 4 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 17 novembre 2009
16 nov. 2009 à 20:23
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);
}

/* ********************************************************** */
/* ********************************************************** */
/* ********************************************************** */
0
ojejeo Messages postés 4 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 08:44
à 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;
0
ojejeo Messages postés 4 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 17 novembre 2009
17 nov. 2009 à 18:20
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);
}
0
Rejoignez-nous