Académique Documents
Professionnel Documents
Culture Documents
TRAVAUX DIRIGES N° : 1
On veut maintenant réaliser plusieurs animations sur les LEDs commandées par les boutons
poussoirs B1 et B2 selon le tableau suivant :
N° B B Séquence
séquence 1 2
0 1 1 L0-L1-L2-L3-L4-L5-L6-
L7
1 1 0 L7-L6-L5-L4-L3-L2-L1-
L0
2 0 1 L7/L0-L6/L1-L5/L2-
L4/L3
3 0 0 L0/L1-L2/L3-L4/L5-
L6/L7
Exercice 1.2 :
Soit le montage suivant permettant de commander 8 diodes LED :
Mr Nizar TOUJENI 1
Question 1 :
- Si RA0 = 0, tous les LEDs clignotent avec une période d’une seconde.
- Si RA0 = 1, les LEDs doivent clignoter chaque 500 ms comme indiqué dans la figure ci-
dessous.
Exercice 1.3 :
On désire commander un afficheur à 7 segments afin de réaliser un compteur modulo 10 à l’aide d’un
microcontrôleur 16F84A.
Exercice 1.5 :
Soit le montage de la figure ci-après. Ecrire un programme en C qui répond au fonctionnement
suivant :
S1 A B C.B ,
S3 A B C.B
S4 A C.B ,
S5 B.C.A
On propose le schéma de simulation suivant :
Exercice 2.2 :
On désire commander une LED par plusieurs endroits à l’aide d’un microcontrôleur 16F84A via des
boutons poussoir BPi (BP1, BP2 et BP3).
Une impulsion sur l’un des boutons poussoir BPi, la LED D s’allume, une deuxième impulsion la
LED s’éteint.
Ecrire un programme C qui répond au cahier de charge.
Exercice 2.3 :
On désire réaliser une minuterie d’escalier à 3 temps réglable (1min, 3min, 5min) à l’aide d’un
microcontrôleur 16F84A.
Ecrire un programme qui lit un caractère à partir du clavier et l’affiche sur l’écran LCD.
Exercice 3.2 :
Exercice 3.3 :
Soit le circuit suivant composé d’un microcontrôleur PIC 16F877A muni d’un afficheur LCD et 16
boutons poussoirs jouant le rôle d’un clavier matriciel :
Ecrire un programme qui lit un caractère à partir du clavier et l’affiche sur l’écran LCD.
TRAVAUX DIRIGES N° : 4
Exercice 4.1
Soit le montage suivant :
On veut réaliser un comparateur entre les valeurs de deux tensions analogiques appliquées sur
chacune des pins RA0 et RA1 via deux potentiomètres.
Ecrire un programme en C qui répond au cahier des charges suivant :
- Si tension 0 > tension 1 alors afficher la lettre S.
- Si tension 0 = tension 1 alors afficher la lettre E.
- Si tension 0 < tension 1 alors afficher la lettre I.
L’affichage des résultats se fera sur un afficheur 7 segments comme le montre la figure ci-dessus.
Exercice 4.2
Soit le montage suivant :
Exercice 4.3 :
Soit le montage ci-après. Ecrire un programme en C qui répond au fonctionnement suivant :
- Si tension 0 > tension 1 alors afficher sur chaque afficheur 7 segments la lettre S.
- Si tension 0 = tension 1 alors afficher sur chaque afficheur 7 segments la lettre E.
- Si tension 0 < tension 1 alors afficher sur chaque afficheur 7 segments la lettre I.
Le programme doit afficher aussi sur le LCD 16x4 :
- Ligne 1 : le message « Comparateur »,
- Ligne 2 : la valeur de la tension 0,
- Ligne 3 : la valeur de la tension 1,
- Ligne 4 : la valeur de la tension maximale.
Exercice 4.3
TRAVAUX DIRIGES N° : 5
Ecrire un programme qui lit une valeur numérique sur le PORTB sous forme d’un nombre codé sur 8
bits. Ce nombre constituera le rapport du cyclique d'un signal PWM qui va être généré pour
commander un moteur à courant continu.
Exercice 5.2 :
Pour rendre les choses plus intéressantes, la durée d’impulsions à la sortie CCP1 (PORTC, 2) peut
être changée avec les touches symboliquement marqués comme "BRILLANT" et "NOIR", tandis que
la durée est considérée comme la combinaison binaire sur le PORTD.
La diode D1 signale que le module CCP1 est activé. Dans le montage réel son état corresponde à
l’état de la diode D2 pendant la simulation.
- Un appui sur le bouton BRILLANT fait augmenter le rapport cyclique,
- Un appui sur le bouton NOIR fait diminuer le rapport cyclique.
Microcontrôleurs Iset de Nabeul
Exercice 5.2 :
RA0_bit void }
main() else
{
TRISA=0xFF; TRISB=0x00; PORTB=0x00; {
while(1) PORTB=0x55;
Delay_ms(500);
{ PORTB=0xAA;
Delay_ms(500);
if(B1==0) }
{ }
PORTB=0xFF; Delay_ms(500); }
Question 2 :
TRISA=0xFF; else
TRISB=0x00; {
PORTB=0x00; PORTB=0x03; Delay_ms(1000);
while(1) PORTB=0x0C; Delay_ms(2000);
{ PORTB=0x30; Delay_ms(3000);
if(B1==0) PORTB=0xC0; Delay_ms(4000);
{ PORTB=0x00; Delay_ms(1000);
for(i=0; i<2; i++){
Mr Nizar TOUJENI 122
Microcontrôleurs Iset de Nabeul
}
}
void main()
int i, CHIFFRE[10] = {0x3F, 0x06, 0x51011, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
while(1)
if(RA0_Bit==1)
if(RA1_Bit==1)
2.
void main()
int i, CHIFFRE[10] = {0x3F, 0x06, 0x51011, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
while(1)
{
if(RA0_Bit==1)
if(RA1_Bit==1)
Exercice 1.5 :
#define B1 RB2_bit D1 = 0; D2 = 0; D3 = 0;
#define B2 RB1_bit while(1)
#define B3 RB0_bit {
#define D1 RC0_bit if(B1==1&B2==0&B3==0)
#define D2 RC3_bit {
#define D3 RC6_bit Lcd_Out(1, 1, msg1);
sbit LCD_RS at RD2_bit; D1 = 1; delay_ms(500);
sbit LCD_EN at RD3_bit; D1 = 0; delay_ms(500);
sbit LCD_D4 at RD4_bit; }
sbit LCD_D5 at RD5_bit; else if(B1==0&B2==1&B3==0)
sbit LCD_D6 at RD6_bit; {
sbit LCD_D7 at RD7_bit; Lcd_Out(1, 1, msg2);
sbit LCD_RS_Direction at TRISD2_bit; D2=1;delay_ms(500);D2=0;delay_ms(500);
sbit LCD_EN_Direction at TRISD3_bit; }
sbit LCD_D4_Direction at TRISD4_bit; else if(B1==0&B2==0&B3==1)
sbit LCD_D5_Direction at TRISD5_bit; {
sbit LCD_D6_Direction at TRISD6_bit; Lcd_Out(1, 1, msg3);
sbit LCD_D7_Direction at TRISD7_bit; D3=1;delay_ms(500);D3=0;delay_ms(500);
char msg1[]="BONJOUR"; }
char msg2[]="BONSOIR"; else
char msg3[]="SALAM"; {
void main() Lcd_Cmd(_LCD_CLEAR);
{ D1 = 0; D2 = 0; D3 = 0;
Lcd_Init(); }
Lcd_Cmd(_LCD_CLEAR); }
Lcd_Cmd(_LCD_CURSOR_OFF); }
TRISB = 0xFF; TRISC = 0x00;
Correction TRAVAUX DIRIGES N° : 2
#define A if (A | B | !B & ! S1
#define C 0;
RA2_bit
#define S1 RB0_bit if(A & !B | B & !C | S2=
C) 1;
#define S2 RB1_bit else S2=
0;
#define S3 RB2_bit // Equation de S3
// Equation de S1 }
Exercice 2.3
#define C1 RB5_Bit
Led = 1;
delay_ms(60000);
Led = 0;
&
Led = 1;
delay_ms(120000);
Led = 0;
}
{ if(BP==1&C5==1)
TRISA=0x01; TRISB=0x07; {
if(BP==1&C1==1) }
{ }
Correction TRAVAUX DIRIGES N° : 3
Lcd_Chr (2,1,clavier);
delay_ms (500) ;} }
Correction TRAVAUX DIRIGES N° : 4
Exercice 5.1
{ ); while(1)
TRISB = 0xFF; {
PORTC = 0; }
delay_ms(2000); }
PWM1_Init(1000);
Exercice 5.2
void initMain () {
TRISD = 0; {
PORTD = 0; od = cd;
} }
{ }
initMain (); }
PWM1_Start
();