TP N°1 M1 Embarqué Microcontrôleur
TP N°1 M1 Embarqué Microcontrôleur
TP N°1 M1 Embarqué Microcontrôleur
On voudrait réaliser une petite calculatrice qui fait les opérations (+, -, x et /) en utilisant un microcontrôleur
PIC16F877A, un afficheur et un clavier.
Donner le programme qui gère cette calculatrice dans les trois cas suivants :
1ier cas :
- Afficheur : Afficheur 7 segments à 4 digits
- Clavier : On réalise un clavier avec 15 boutons poussoir indépendants (Ne sont pas reliés en matrices
comme dans un clavier matriciel) : 10 boutons poussoirs pour les chiffres de 0 à 9, 4 boutons
poussoirs pour les 4 opérateurs arithmétiques, et un bouton poussoir pour la touche =.
2 ième
cas :
- Afficheur : LCD alphanumérique 2x16
- Clavier : Même que dans 1ier cas.
3ième cas :
- Afficheur : LCD alphanumérique 2x16
- Clavier : Clavier matriciel 4x4 (voir schéma Proteus et schéma interne).
Schéma interne d’un clavier matriciel Branchement d’un clavier matriciel avec
un microcontrôleur
1) Le temps entre l’appui sur un bouton poussoir et son retour à l’état off dure quelques centaines de ms
alors qu’une instruction du programme peut être exécutée dans quelques us.
2) Les 4 digits du résultat à afficher sur le 7 segments peuvent être déduits en codant le résultat en BCD (voir
bibliothèque de conversion dans help de MikroC Pro) et en séparant les 4 bits de chaque digit par une
opération de masquage (utiliser ET logique).
3) Avec un afficheur 7 segments à 4 digits chaque chiffre entré doit apparaitre sur l’afficheur au fur et à
mesure qu’il est entré.
4) Avec un afficheur LCD affichez toute l’opération.
5) Dans le cas d’un clavier matriciel, pour 15 touches nous n’avons besoin que de 8 E/S du microcontrôleur.
Dans le cas d’un clavier constitué de boutons poussoir et n’ayant pas une configuration matricielle nous
avons besoin de 15 E/S. D’où l’intérêt des claviers matriciels (économie d’E/S du microcontrôleur).
Sortie = 0b0001
Non Oui
Entrée = 0b0001
Non Oui touche = "+"
Entrée = 0b0010
Non Oui touche = "-"
Entrée = 0b0100
Non Oui
Entrée = 0b1000 touche = "*"
touche = "/"
Sortie = 0b0010
Non Oui
Entrée = 0b0001
touche = "="