Cours de microcontrôleurs en ITT2
Travaux dirigés N°2
Exercice 1 : Interfaçage d'un clavier 12 touches avec liaison PS2
Sur un PC, le clavier est complètement décodé, c'est-à-dire que lorsqu'une touche est
appuyée, sa position sur le clavier est envoyée sur la liaison PS2. Le fait d'envoyer la
position et non le code ASCII permet de gérer les claviers en divers langues.
Pour de petites applications, on utilise un clavier à 12 touches. Il est composé de
simples contacts et le décodage est réalisé par le système informatique. Avec
seulement 8 touches, un PORT de 8 bits en entrée suffit. Si le clavier possède plus de 8
touches, il faut :
- soit utiliser d'avantage d'entrées,
- soit multiplexer les entrées en deux étapes
En utilisant 4 fils pour les lignes et 4 fils pour les colonnes, on peut différencier par
croisement 16 touches. On utilise donc 8 fils reliés à 8 bits d'un PORT pour 16 touches.
Pour nos 12 touches on peut câbler comme indiqué ci-dessus.
Il s'agit ensuite de procéder en deux phases, une pour la détection de la colonne et une
autre pour la détection de ligne.
Hypothèse : On considère que :
- les broches du PORTB sont configurées en entrée (la programmation des
directions avec TRISB),
- les broches RB2-RB0 sont utilisées pour désigner les colonnes et
- les broches RB6-PB3 sont utilisées pour désigner les lignes,
- le bit RB7 peut servir autrement.
Question 1 : détermination du numéro de colonne
Ecrire un code permettant de tester si une touche est appuyée.
Si oui sauvegarder dans une variable la valeur lue sur PORTB puis transformer cette
valeur en numéro de colonne (0 à gauche et 2 à droite)
Ecrire la fonction correspondante à travers le sous-programme :
1
Cours de microcontrôleurs en ITT2
char lecture_numColonne()
Question 2 : détermination du numéro de ligne
Ecrire un code permettant de tester si une touche est appuyée.
Si oui sauvegarder dans une variable la valeur lue sur PORTB puis transformer cette
valeur en numéro de ligne (3 en haut à 6 à droite)
Ecrire la fonction correspondante à travers le sous-programme:
char lecture_numLigne ()
Question 3 : détermination du caractère
A partir des deux fonctions précédentes, proposer un code qui transforme le numéro de
colonne et le numéro de ligne en caractère correspondant sur le clavier : '1' ou '2' ou ...
ou '0' ou '#'
Exercice 2 : chenillards
Le PORTB est relié à un ensemble de LEDs permettant la réalisation de chenillards. Un
chenillard est donné par le programme suivant
// MikroC
main(){
int i;
TRISB=0x00;
for(;;) {
for(i=0;i<6;i++) {
PORTB=(0x03<<i|0xC0>>i);
Delay_ms(1000);
}
}
}
Question : Compléter la suite des états (en binaire et en hexadécimal) de ce chenillard
(ceux où une ou plusieurs leds sont allumées).