Académique Documents
Professionnel Documents
Culture Documents
TP 3 Microcontrleur
Afficheur 7 segments
et interruption (TIMER0)
Licence SPI-2
Anne 2014
1. Objectifs
Manipuler les 4 afficheurs 7 segments de la platine EasyPic7. Dans un premier temps,
vous mettrez en uvre un seul afficheur afin de maitriser uniquement la gestion des
segments et l'utilisation d'un fichier de dfinition (.h1). Ensuite, vous devrez multiplexer
deux afficheurs selon 2 approches diffrentes, sans et avec gestion d'interruption.
Affichage
bit3 bit2
bit1
bit0
DP
Hexa
0x3F
Ce tableau reprsente une opration de masquage qui sera mise en uvre dans un
fichier de dfinition (.h). Autrement dit, chaque symbole (0, 1, 2 etc.) est remplac par
un mot binaire. Par exemple, le symbole 8 (0000 1000b) est remplac par le mot binaire
0111 1111b. Mais on pourrait sy prendre autrement et utiliser un tableau de 10 cases
pour mmoriser les valeurs hexadcimales.
Vous pouvez facilement contrler les valeurs hexadcimales obtenues grce lun des
utilitaires de mikroC. Pour lafficher : Tools > Seven Segment Editor.
Questions :
1. Quel port permet de slectionner l'afficheur actif?
2. Quelles valeurs faut-il envoyer pour slectionner :
a. l'afficheur DIS0? .................................................
b. L'afficheur DIS1?.................................................
c. L'afficheur DIS2?................................................
d. L'afficheur DIS3?................................................
3. Quel port permet d'afficher les segments?
4. Est-il possible d'activer 2 segments en mme temps?
5. Est-il possible d'afficher 2 symboles en mme temps?
6. Quelle est l'utilit du multiplexage?
0x3F;
Remarques :
-
Utilisation du format unsigned short, sur 8 bits (de 0 255), ce qui est
largement suffisant ici
il est galement possible de n'indiquer que le prototype de la fonction
dans le fichier .h (cd. seulement la ligne " unsigned short mask(unsigned
short num); ") et de coder la fonction dans un autre fichier .c.
2. Remplacer les lettres x et y par les bons ports dans fichier principal suivant :
// Fichier principal (DIS0.c)
#include "Display_utils.h"
void main () {
unsigned short i;
RCON. IPEN = 0; // Disable priority levels on interrupts
INTCON.GIE = 0; // Disable all interrupts
TRISx = 0; // Configure Portx as output
LATx = 0; // Turn off all 7seg displays
TRISy = 0; // Configure Porty as output
LATy = 0; // Clear port y
while (1) {
for (i = 0; i <= 9u; i++){
void main() {
ANSELA = 0;
ANSELD = 0;
TRISA = 0;
LATA = 0;
TRISD = 0;
LATD = 0;
T0CON = 0xC4;
TMR0L = 0;
digit = 0;
portd_index = 0;
shifter = 1;
number = 9981;
GIE_bit = 1;
TMR0IE_bit = 1;
do {
digit = number / 1000u ;
portd_array[3] = mask(digit);
digit = (number / 100u) % 10u;
portd_array[2] = mask(digit);
digit = (number / 10u) % 10u;
portd_array[1] = mask(digit);
digit = number % 10u;
portd_array[0] = mask(digit);
//
//
//
//
//
//
//
//
Delay_ms(1000);
number++ ;
if (number > 9999u)
number = 0;
// increment number
} while(1);
// endless loop
I.
Test du programme
Vrifier que le compteur dmarre bien 9981 et bascule 0000 aprs 9999. Vous
pouvez tout moment reseter la carte en appuyant sur le bouton reset situ en
haut droite de la carte Easypic7.
II.
Analyse du programme
10
bit6
bit5
bit4
bit3
bit2
Bit1
bit0
11