Вы находитесь на странице: 1из 10

Gestion dun afficheur avec un clavier

Introduction gnrale :
Dans un pass pas trs lointain, llectronique pour les amateurs (clairs) se rsumait essentiellement aux circuits analogiques et ventuellement en logique cble (portes logiques, compteurs, registres dcalage). Lusage des microprocesseurs tait plutt rserv un public averti dingnieurs sachant les interfacer avec diffrents circuits priphriques (eprom, ram) et programmer en assembleur. Au fil du temps on a vu apparatre de nouveaux circuits regroupant dans une seule puce le microprocesseur et ses circuits priphriques : les microcontrleurs. On en trouve maintenant partout : automobile, lave-vaisselle, rasoir, brosse dent lectrique Loffre en microcontrleurs sest dveloppe dautant : plus de priphriques intgrs, capacit de calcul accrue, plus de mmoire embarque. La technologie est aujourdhui prsente dans tous les domaines et ne constitue plus un mystre pour llve. A tout instant, il est amen utiliser un objet technologique. De la montre au portable et des moyens de transport aux moyens de tlcommunication, la technologie a envahi tous les secteurs de la vie

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
1

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). 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) Ralisatio de cblage du clavier sur le PORTB pour avoir la correspondance ci -dessous: RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 Col4 Col3 Col2 Col1 Li4 Li3 Li2 Li1

Adaptation du programme :
On modifient le programme daffichage prcdent en ajoutant un sous programme de gestion du clavierb sous forme de fonction.
#include "C:\clavier16touches\testclavier.h" #include "C:\clavier16touches\clavier16T.c" #include "C:\clavier16touches\lcd.c" void main() { char k; byte const t[10]={63,6,91,79,102,109,125,7,127,111}; setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); port_b_pullups(true); kbd_init(); lcd_init(); lcd_putc("\fApuiez...\n"); set_tris_c(0x00); output_c(0x00); DO { k=kbd_getc(); if(k!=0) if(k=='c') lcd_putc('\f'); else { lcd_putc(k); if (k>57){k=48;} if (k<48){k=48;} output_c(t[k-48]); output_A(k-48); } } while (true);

le programme principale en c :
#byte kbd = 0xF82 // portc 0xF82 et portD #byte kbd = 6 // portc 7 et portD 8 #define set_tris_kbd(x) set_tris_b(x) #define #define #define #define #define #define #define #define COL0 COL1 COL2 COL3 ROW0 ROW1 ROW2 ROW3 (1 (1 (1 (1 (1 (1 (1 (1 << << << << << << << << 4) 5) 6) 7) 0) 1) 2) 3) 0xF83

#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3) #define ALL_PINS (ALL_ROWS|COL0|COL1|COL2|COL3) // Keypad layout: char const KEYS[4][4] = {{'7','8','9','/'}, // caractres de votre clavier {'4','5','6','*'}, {'1','2','3','-'}, {'c','0','=','+'}}; #define KBD_DEBOUNCE_FACTOR 50 void kbd_init() { } char kbd_getc( ) { static BYTE kbd_call_count; static short int kbd_down; static char last_key; static BYTE col; BYTE kchar; BYTE row; kchar='\0'; if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) { switch (col) { case 0 : set_tris_kbd(ALL_PINS&~COL0); kbd=~COL0&ALL_PINS; break; case 1 : set_tris_kbd(ALL_PINS&~COL1); kbd=~COL1&ALL_PINS; break; case 2 : set_tris_kbd(ALL_PINS&~COL2); kbd=~COL2&ALL_PINS; break; case 3 : set_tris_kbd(ALL_PINS&~COL3); kbd=~COL3&ALL_PINS; break; } if(kbd_down) {

if((kbd & (ALL_ROWS))==(ALL_ROWS)) { kbd_down=FALSE; kchar=last_key; last_key='\0'; } } else { if((kbd & (ALL_ROWS))!=(ALL_ROWS)) { if((kbd & ROW0)==0) row=0; else if((kbd & ROW1)==0) row=1; else if((kbd & ROW2)==0) row=2; else if((kbd & ROW3)==0) row=3; last_key =KEYS[row][col]; kbd_down = TRUE; } else { ++col; if(col==4) col=0; } } kbd_call_count=0; } set_tris_kbd(ALL_PINS); return(kchar); }

Le circuit ralis en isis :

Les afficheurs LCD :


Les afficheurs cristaux liquides gnralement appels LCD (Liquide Crystal Display) sont des modules compacts qui ncessitent peu de composants pour leur mise en oeuvre. Plusieurs afficheurs sont disponibles sur le march, ils se diffrencient les uns des autres par leurs dimensions (de 1 4 lignes de 6 80 caractres). Certains sont galement dots de fonctions de rtroclairage. L'afficheur du kit PICDEM 2 Plus est un afficheur 16 2 c'est dire 2 lignes de 16 caractres avec des caractres de 58 pixels. Pour communiquer avec l'extrieur tout afficheur besoin d'un circuit spcialis de gestion appel contrleur d'affichage , il en existe diffrents modles sur le march mais ils ont tous le mme fonctionnement. La carte d'valuation est quipe du modle HD44780U de SHARP. Le contrleur sert donc d'interface entre le microcontrleur et l'afficheur (cf. figure 9). Le but du driver est de grer le bus CONTROL afin que le contrleur d'affichage comprenne le bus DATA et affiche ce que l'on souhaite sur l'cran LCD.

Le contrleur d'affichage peut recevoir deux types d'information sur le bus DATA, un ordre (ex: effacer l'cran) ou une donne (ex: le caractre A). Ordres ou donnes sont envoys sur le bus DATA sous forme d'octets (8 bits). Mais pour ne pas utiliser toutes les broches de sorties d'un microcontrleur pour communiquer avec un LCD, les contrleurs d'affichage fonctionnent galement en 4 bits, un nombre cod sur 4 bits s'appelle un quartet. En mode 4 bits, un octet est envoy en deux fois : le quartet de poids fort puis le quartet de poids faible. Le bus CONTROL est constitu de trois lignes : La ligne RS (Register Select) qui permet au contrleur d'affichage de savoir si le contenu du bus DATA est un ordre ou une donne. Un niveau bas indiquera un ordre et un niveau haut une donne. La ligne RW (Read Write) informe le contrleur si on vient lire ou crire dans sa mmoire, un niveau bas correspondant une action d'criture.
6

La ligne E (Enable) qui informe le contrleur d'affichage qu'un quartet (mode 4 bits) ou un octet (mode 8 bits) est disponible. Cette ligne est active sur front descendant. Elle ralise la syncronisation entre le microcontrleur et l'afficheur. Les connexions entre le contrleur d'affichage et le microcontrleur sont regroupes dans le tableau 1.

Tableau 1: Connexion entre le contrleur d'affichage et le microcontrleur

Fonctions de gestion
Transfert d'un octet

L'criture d'un ordre ou d'une donne en mode 4 bits se fait selon la squence reproduite en figure 10, l'octet transfrer tant b7b6b5 b4 b3b2b1b0 avec b7 bit de poids fort.

Figure 10: Transfert d'un octet en mode 4 bits

Phase I : RW=0 et E=0. RS et DB7...4 sont positionns la valeur souhaite : quartet de poids fort (MSB) Phase II : E=1.
7

Phase III : E=0, le quartet transfr (poids fort) est pris en compte par le contrleur lors du front descendant. Phase IV : DB7...4 sont positionns la valeur souhaite : quartet de poids faible (LSB) Phase V : E=1. Phase VI : E=0, le quartet transfr (poids faible) est pris en compte par le contrleur lors du front descendant. Commande dafficheurs alphanumrique cristaux liquides : Soit le shma de commande directe de lafficheur alphanumrique a cristaux liquide suivant : figure(5.2)

figure(5.2)

Choix dun PIC : le 16F877


Pour apprendre, la meilleurs solution est de se faire la main sur du concret. On va donc tudier un vrai microcontrleur, sachant que ce qui aura t vu sera assez facilement transposable dautres PIC. Le 16F877 est un PIC de la srie Midrange qui se prte particulirement bien la programmation en C. Les PIC de la srie infrieure sont un peu justes en performance et en capacit mmoire pour accueillir un programme issu dun compilateur C ; mieux vaut les programmer en assembleur. Les gammes suprieures (16 ou 32 bits) supportent sans problme la programmation en C, mais comme se sont des circuits plus complexes (et plus chers), commenons par quelque chose de plus simple et de plus didactique. Le 16F877 (F comme Flash ) convient parfaitement : mmoire programme de taille suffisante (8K), nombreux priphriques intgrs, frquence de fonctionnement jusqu 20 MHz. Tout ce quil faut pour crer des applications sympa en samusant !
8

Les Ports dEntres/Sorties gnraux : (PORTA, PORTB,


PORTC,PORTD, PORTE)

Le PIC 16F877 est gnreusement dot de 5 ports, ce qui est plutt confortable. Un examen plus attentif du schma ci-dessus nous montre cependant que les lignes dentres/sorties (les pattes du composant) correspondantes sont galement utilises par dautres modules du PIC. Ainsi, les pattes du PORTA servent galement au convertisseur Analogique/Numrique, les pattes du PORTD au Port Parallle Esclave, etc. Il faudra faire des choix au moment de la conception du schma lectronique ! On voit galement que les ports B, C et D ont 8 lignes dentre/sortie, alors que le port A nen a que 6 et le port E que 3. Ils sont tous connects au bus de donne (DATA BUS), on pourra donc librement les adresser pour y lire ou crire des donnes, et donc allumer des LED, commander des moteurs pas pas, des afficheurs LCD, lire les donnes envoyes par un clavier ou un bouton poussoir On peut configurer les entres/sorties de chaque port en entre ou en sortie, grce un registre spcial ddi chaque port. De plus, un des ports (le port B) possde des rsistances de pull-up internes qui peuvent tres valides ou non par logiciel.

10

Вам также может понравиться