Il existe une methode qui permet de ne pas gaspiller des
ports pour creer une matrice clavier. Elle demande un peu plus de soft, mais on
peut cabler davantage de touches pour un meme nombre de ports.
Pour exemple, on va comparer le
nombre de touches que l'on peut cabler sur 8 ports. Les
ports doivent etre bidirectionnels. Pour les matrices carree et triangulaire
simple, les ports peuvent etre du type 8051 ou il n'existe pas de registre de
direction, et ou seul la mise a 0 est possible -- la mise a l'etat 1 est
effectuee par les pull-up.
matrice
carree classique Une
matrice carree cablee sur 8 ports ne permet que la gestion de 16 touches.

Pour
scanner les touches, P0..P3 sont configures en entree, P4..P7 en sortie. P4 est
mis a 0, P5..P7 sont mis a 1. La lecture de P0..P3 renseigne immediatement sur
l'etat de la 1ere ligne des touches. Ensuite c'est P5 qui est mis seul a 0 et
une nouvelle lecture donne l'etat des 4 touches de la ligne suivante. Et ainsi
de suite. Si plus d'une
touche est active, alors la routine de lecture du clavier retourne l'etat
precedent. Si aucune touche
n'est active, la routine retourne un code special, par exemple 0. La
routine d'examen du clavier doit etre executee periodiquement par une tache de
fond dont la periode peut aller de 20 a 40 ms. L'anti-rebond est effectue par un
test/decision portant sur 2 lectures consecutives espacees par la duree de la récurrence
de la tache de fond. Si les 2 lectures sont identiques, le resulat apres
anti-rebond est cette lecture. Si les 2 lectures sont differentes, on retourne
la valeur la plus ancienne.
matrice
triangulaire simple

Cette
matrice triangulaire utilise les 8 ports du microcontroleur et permet la gestion
de 28 touches. On gagne ainsi 12 touches par rapport a la matrice carree
classique. La routine de
balayage doit s'effectuer de cette facon :
-
P0 en sortie a 0
P1..P7 en entree
si P1 est a 0 -> K1 actif
si P2 est a 0 -> K2 actif
si P3 est a 0 -> K3 actif
si P4 est a 0 -> K4 actif
si P5 est a 0 -> K5 actif
si P6 est a 0 -> K6 actif
si P7 est a 0 -> K7 actif
-
P1 en sortie a 0
P0, P2..P7 en entree
si P2 est a 0 -> K8 actif
si P3 est a 0 -> K9 actif
si P4 est a 0 -> K10 actif
si P5 est a 0 -> K11 actif
si P6 est a 0 -> K12 actif
si P7 est a 0 -> K13 actif
-
P2 en sortie a 0
P0, P1, P3..P7 en entree
si P3 est a 0 -> K14 actif
si P4 est a 0 -> K15 actif
si P5 est a 0 -> K16 actif
si P6 est a 0 -> K17 actif
si P7 est a 0 -> K18 actif
-
P3 en sortie a 0
P0..P2, P4..P7 en entree
si P4 est a 0 -> K19 actif
si P5 est a 0 -> K20 actif
si P6 est a 0 -> K21 actif
si P7 est a 0 -> K22 actif
-
P4 en sortie a 0
P0..P3, P5..P7 en entree
si P5 est a 0 -> K23 actif
si P6 est a 0 -> K24 actif
si P7 est a 0 -> K25 actif
-
P5 en sortie a 0
P0..P4, P6, P7 en entree
si P6 est a 0 -> K26 actif
si P7 est a 0 -> K27 actif
-
P6 en sortie a 0
P0..P5, P7 en entree
si P6 est a 0 -> K28 actif
-
Si plus d'une touche active
detectee -> etat memoire
matrice
triangulaire double Si on a
besoin de davantage de touches, il faut utiliser des diodes. On arrive alors a
un total de 84 !!! touches.
Methode de balayage de la matrice
:
- mettre P0 a 0
mettre P1..P7 en entree
lire P1..P7
- Si un port en lecture
retourne un 0, mettre ce port en sortie a 0 et mettre P0 en entree.
- Si P0 est a 0 alors c'est
la touche qui n'est pas sur la ligne avec diode qui est active
- Si P0 est a 1 alors c'est
la touche qui est sur la ligne avec diode qui est active
- Exemple :
- si durant le balayage,
on lit P1 a 0, alors soit la touche 14, soit la touche 21 est active
- on met P1 en sortie a
0, et P0 en entree.
- si on lit P0 a 0 alors
c'est la touche 14 qui est active
- si on lit P0 a 1 alors
c'est la touche 21 qui est active
- continuez ainsi de suite en
mettant a tour de role P2 a P7 a 0.
utilisation
de la masse Il y a encore
une possibilite d'augmenter un peu le nombre de touches en cablant des touches
entre les lignes de port et la masse. Cette solution n'est possible en toute
securite uniquement si les ports peuvent etre configures dans un mode
"drain ouvert". Si les ports n'existent qu'en mode "totem pole"
alors il est dangereux de cabler des touches a la masse car on cree un courant
important inacceptable pour une solution professionnelle. Si
on decide de completer une de ces 3 matrices par une ligne supplementaire de
touches reliees a la masse, alors il faut completer la routine de balayage en
mettant toutes les lignes en entree ; si on lit un port a 0 alors c'est qu'une
touche de la ligne de masse est active. Avec
ce complement on obtient jusqu'a 92 touches pour 8 ports.
nombre
maximal de touches
nombre
de ports
utilises |
matrice
carree |
matrice
carree
+ masse |
matrice
triangulaire
simple |
matrice
triangulaire
simple + masse |
matrice
triangulaire
double |
matrice
triangulaire
double + masse |
4 |
4 |
8 |
6 |
10 |
18 |
22 |
5 |
6 |
11 |
10 |
15 |
30 |
35 |
6 |
9 |
15 |
15 |
21 |
45 |
51 |
7 |
12 |
19 |
21 |
28 |
63 |
70 |
8 |
16 |
24 |
28 |
36 |
84 |
92 |
|