Vous êtes sur la page 1sur 3

Gestion dun afficheur LCD et dun clavier avec le PIC 16F877

CI : Interface Homme Machine

Manip micro N3 (Vers :8) Centre dintrt : Interface homme machine (IHM) :
Grer un afficheur LCD et un clavier
Application : Systmes : Perceuse commande numrique (PCN), Serrure code (Digicode), Horloge microprogramme, Agitateur de microplaques, Respirateur artificiel, panneau solaire, turbidimtre Prsentation: Centre dintrt : Interface Homme Machine. De nombreux systmes ncessitent une interface homme machine (appele IHM) afin de permettre lintroduction de consignes et de visualiser les informations utiles pour lutilisateur. Ces IHM disposent frquemment de mini claviers (ou de quelques touches), associs de plus en plus un afficheur LCD, permettant laffichage sous forme de menus afin de simplifier lutilisation. Ainsi on dsire mettre en oeuvre un afficheur LCD (2 lignes de 16 caractres et un clavier 16 touches, sur une carte Millenium l'aide du PIC 16F877. I) Etape N1: On souhaite raliser dans un premier temps le cblage de lafficheur LCD et sa mise en uvre logicielle laide des fonctions proposes par lenvironnement MIKROELEKTRONIKA. On utilisera alors la documentation intgr au logiciel MikroC et celle de lafficheur LCD fourni, pour adapter le cblage et le programme, afin de relier lafficheur LCD au PORTC du PIC16F877. L'afficheur LCD est compatible avec le type dafficheur LCD alphanumrique "intelligent", rfrence LTN 211 (rfrence PHILIPS), comportant 2 lignes de 16 caractres et utilisant le contrleur Hitachi HD44780, utilis pour les afficheurs de 1 4 lignes de 16 40 caractres. Organigramme du programme principal de Gestion de l'afficheur LCD Utilisez le document source complter que vous trouverez sur le serveur F13AXP1, nomm TP3_PIC_IHM_V1.doc . Rpondez aux questions et suivez les consignes afin de raliser le cblage correct du LCD, en rapport avec les fonctions de gestion fournies par MikroC. Utilisez len-tte et la structure de programme fournies dans le compte rendu (par copi coll), et compltez le programme afin dobtenir laffichage des deux messages (1 et 2) correspondant vos prnoms (1 sur chaque ligne), conformment lorganigramme ci contre.
Programme principal

Dbut

Initialisations de la direction des ports


Initialisation Afficheur LCD

Init_Port

LCD_Init Lcd_Out

Affichage message 1 au dbut (1re ligne) Affichage message 2 au dbut (2me ligne)

Boucle infinie
PICLCD8_1.doc

Page 1 sur 3

Gestion dun afficheur LCD et dun clavier avec le PIC 16F877

CI : Interface Homme Machine

II) Etape N2: On dsire procder au cblage et la gestion du clavier sur la carte MILLENNIUM en saidant des consignes fournies. Les lignes du clavier (appeles Li1 Li4 sur le schma du clavier ci contre) seront directement gres logiciellement par le portB du pic, et les colonnes seront lues afin den dterminer la touche ventuellement enfonce. Lobjectif est de modifier le programme de ltape N1, afin d'afficher vers la fin de la deuxime ligne de lafficheur LCD (position 14 de la ligne 2), le caractre correspondant la touche enfonce sur le clavier. Les colonnes du clavier (Col1 Col4) seront lues par des broches de port configures en entres. Il est indispensable dutiliser des rsistances de tirage (ici pull up) pour distinguer ltat de repos (ici = 1), de ltat actif ou lon appuie sur un bouton (=> 0 en pensant mettre la ligne 0).
Intgr dans le PORT B du PIC
VCC = 5V

R1 10K Col1 1 2

R2 10K Col2 3

R3 10K Col3 F

R4 10K Col4

Li1 4 5 6 E

Li2 7 8 9 D

Li3 A 0 B C

Li4

Le clavier est ici volontairement connect au PORTB afin de bnficier des rsistances de pull up intgres sur le portB des PIC 16Fxxx. Attention : Pour le PORTB uniquement les sorties peuvent tre configures avec les rsistances de pull up, en mettant dans un registre appel OPTION , le bit 7 nomm /RBPU (= poRtB Pull Up bar) 0 (car ce bit est actif ltat bas). Voir commande ci-dessous. OPTION_REG.F7=0; //Car il faut /RBPU = OPTION_REG.F7 0

II.1) Ralisez le cblage du clavier sur le PORTB pour avoir la correspondance ci -dessous: RB7 Col4 RB6 Col3 RB5 Col2 RB4 Col1 RB3 Li4 RB2 Li3 RB1 Li2 RB0 Li1

II.2) Adaptation du programme. Modifiez le programme daffichage prcdent en ajoutant un sous programme de gestion du clavier sous forme de fonction. Un sous programme appel (fonction) nomm scrut_clav , assurera la scrutation du clavier, et fournira le code ASCII de la touche enfonce sur le clavier. Si aucune touche nest enfonce on devra renvoyer le code ASCII du caractre ?. Pour utiliser un sous programme en tant que fonction il suffit de renvoyer une valeur en dfinissant cette valeur par son type au dbut de la ligne de dclaration de la fonction. Ainsi au lieu davoir : void scrut_clav (void) char scrut_clav (void) Nous aurons : Pour ainsi indiquer que le rsultat sera de type char. Il faudra alors placer le rsultat dans une variable (Ex : variable touche ) et utiliser linstruction : return touche ; la fin de la fonction scrut_clav, avant laccolade finale. Lutilisation des fonctions se fait comme des variables. Ex : si lon a cr une variable appele caract de mme type que le rsultat de la fonction (ici : char),
PICLCD8_1.doc

Page 2 sur 3

Gestion dun afficheur LCD et dun clavier avec le PIC 16F877

CI : Interface Homme Machine

il suffit dcrire : caract = scrut_clav( ) ; pour rcuprer dans caract la valeur de la touche dtecte et dcode par la fonction scrut_clav.

Remarque importante : Pour mettre le code ASCII dun caractre dans la variable touche, il suffit dutiliser lune des syntaxes suivantes (Exemple pour les caractres 0, 3, 9, A, F, ?): a) Soit chercher la valeur du caractre en hexadcimal ou en dcimal laide dune table de correspondance caractres <=>hexa ou dcimal. touche = 0x30 ; touche = 0x33 ; touche = 0x39 ;

b) Pour les chiffres il suffit dajouter 0x30 ou le caractre 0, qui correspond justement 0x30. touche = 0x30 ou 0 touche = 0x33 ; ou 3 + 0 touche = 0x39 ; ou 9 + 0 c) utiliser le caractre entre apostrophe touche = 0x30 ou 0 touche = 0x33 ; ou 3 touche = 0x41 ; ou A touche = F

touche = 0x39 ; ou 9 touche = ?

ALGORITHME respecter pour la fonction gestion clavier : scrut_clav : a) Mettre le code par dfaut dans touche : touche = ? (si aucune touche nest enfonce). b) Slectionner la 1re ligne (remarque la ligne slectionne est mise 0, les autres 1). c) Lire les colonnes (quartet de poids fort du port B). Rem : Si une touche est enfonce, la colonne correspondante passe 0, autrement elle est maintenue 1 par sa rsistance de pull up). d) Pour chaque colonne, si la colonne est 0, attribuer la variable touche la valeur du code ASCII du caractre correspondant (1, 2, 3, F pour les touches 1,2,3,F de la premire ligne). e) Slectionner la 2me ligne. (ne pas slectionner les autres). f) Lire les colonnes (quartet de poids fort du port B). g) Pour chaque colonne, si la colonne est 0, attribuer la variable touche la valeur du code ASCII du caractre correspondant (4, 5, 6, E pour les touches 4,5,6,E de la deuxime ligne). h) Faire de mme avec la 3me ligne. i) Faire de mme avec la 4me ligne. j) Placer le rsultat de la fonction (= code de la touche, ou ? si aucune touche na t dtecte).

PICLCD8_1.doc

Page 3 sur 3

Vous aimerez peut-être aussi