Mplab CC5X LCD [Résolu]

ojejeo 4 Messages postés jeudi 25 mars 2004Date d'inscription 17 novembre 2009 Dernière intervention - 17 oct. 2009 à 15:15 - Dernière réponse : ojejeo 4 Messages postés jeudi 25 mars 2004Date d'inscription 17 novembre 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

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

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

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.