begin process at 2012 02 13 02:16:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > MISE EN OEUVRE DE L'ÉCRAN PICDEM 2 PLUS DEMO BOARD SUR 4 BITS - COMPILATEUR CCS

MISE EN OEUVRE DE L'ÉCRAN PICDEM 2 PLUS DEMO BOARD SUR 4 BITS - COMPILATEUR CCS


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caractères Classé sous :microcontrôleur, pic, écran, ccs, 4bits Niveau :Débutant Date de création :09/03/2007 Date de mise à jour :09/03/2007 17:12:52 Vu :12 199

Auteur : rompiflor

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

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

  • /***************************************************************|*|
  • \ 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;
  • }
/***************************************************************|*|
\ 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;	
}



 Historique

09 mars 2007 17:12:52 :
mots-clés changés

 Sources de la même categorie

Source avec Zip [C] WD_STRING V2.2 par cyberripper
Source avec Zip LES STRING EN C, AFFECTATION, CONCATÉNATION, SPLIT, ... par appranting
Source avec Zip [C] WD_STRING V1.9 par cyberripper
Source avec Zip LIBRAIRIE LANGUAGES par astro53
FONCTION : CHAR * AJUSTERTAILLECHAINE() par Rockanos

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ZOOMIT, UNE LOUPE SUIT VOTRE SOURIS... par ndubien
Source avec Zip Source avec une capture [WIN32]RÉCUPÉRER LA COULEUR D'UN PIXEL À L'ÉCRAN par rt15
Source avec Zip Source avec une capture USB : 8 ENTREES / 16 SORTIES AVEC UN PIC18F4550 (HID). (C++ ... par rylryl
Source avec Zip Source avec une capture DESSIN SUR ÉCRAN (TRÈS SIMPLE) par ordiman85
Source avec Zip Source avec une capture AFFICHAGE SUR ÉCRAN (OSD) (WIN32) par racpp

Commentaires et avis

Commentaire de eric1357 le 09/04/2007 09:26:20

Merci pour cette source , bien commentée et claire....

Commentaire de amine_hassini le 11/05/2007 16:32:35

Salut
J'ai fé une source mais les caractère s'affiche à l'envers, cad il faut retourner la carte pour voir les caractères correctement. T'aurai pas une idée de la cause du blem? Sachant que la source fournit chez microchip marche correctement.

Commentaire de rompiflor le 20/05/2007 11:34:19

Il me semble que j'avais eu ce problème. C'était l'initialisation de l'écran qui n'était pas bien faite

Commentaire de mallatmohamed le 20/11/2011 11:40:39

salut
dans le cadre d'un petit projet, je désire réalisé un système alarme à domicile comportant un afficheur LCD et un clavier 12 touches. l'activation et la désactivation de mon système se fait aprés la saisie d'un code de sécurité. le projet est basé sur le PIC 16F877 ou 18Fxxx qui gére les signaux des capteurs de contacts implantés au niveaux des portes puis il déclenche une sirène et allume une LED en cas de besoin . le probléme que j'arrive pas à trouver un code adéquat, je demande votre aide SVP merci tout le monde.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

programmation du microcontrôleur PIC 16F877 et mesure de temperature [ par aurelienkam ] Bonjour à tous je suis nouveau dans le site et je m'appelle aurelien Kameni. J’étudie cette année en licence le microcontrôleur PIC 16F877. J&# liaison rs232 avec PIC 16F877A [ par aspire1640r ] Salut tout le monde Dans le cadre de mon projet de fin d'étude une partie du travail consiste à réaliser une liaison série rs232 entre une carte élect utilisation simultanée de 2 fenêtres sur 2 écrans [ par sf4 ] Je vous expose mon problème. Je programme actuellement une application comprenant 2 Form, mon pc est branché à un rétroprojecteur et j'ai étendu le bu PIC et LCD 2*16 [ par caela ] Bonjour à tous svp est-ce que quequ'un peut me donner e nom de la librairie qu'il faut importer pour pouvoir gérer un LCD 2*16 en CPIC. MERCI control entre vers de C++ [ par bolix ] je recherche la ligne de commande qui puisse me faire appeler à partir du c++ des programme en asembleurs.je recherche aussi la ligne de commande pou Récupérer la couleur d'un pixel à la position x,y de l'écran [ par atao ] quelqu' un sait il comment peut on récupérer la couleur d'un pixel à la position x,y de l'écranmerciatao. API capte l'écran [ par Bin Laden ] Salut, Je cherche une fonction API qui capte le contenu de l'écran. Problème d'IHM [ par FLOX ] Bonjour à tous,Je vais construire 2 classes (avec C++ Builder) qui aurons pour fonctions de représenter deux écrans. La première représentera un écran Effacer l'écran [ par JosueClement ] Je ne réussi pas à utiliser la fonction "clrscr".les librairies que j'ai inclu sont:<iostream.h><stdlib.h><stdio.h><conio.h>&l Plein écran [ par Thanatos ] Bonjour,Comment fait-on pour mettre la fenêtre DOS en plein écran sous Borland C++ ?


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,747 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales