125268753 La Programmation en Mikropascal
-
Upload
haythemalaya -
Category
Documents
-
view
13 -
download
1
Transcript of 125268753 La Programmation en Mikropascal
République tunisienne
Ministère de l'éducation et de la formation
Direction générale des programmes et de la formation continue
Module de formation
Technologie (génie électrique)
3ème et 4ème années secondaire
Section sciences techniques
La programmation AVEC
La programmation en mikropascal . Page 1/20
Fenêtre des erreurs
Analyseur statistique
Présentation du Mikropascal
I) Introduction : Conçu par la société Mikroelektronika™, le compilateur PASCAL nouvelle génération
"MikroPASCAL" pour microcontrôleurs PIC bénéficie d'une prise en main très intuitive et d'une ergonomie sans faille. Ces très nombreux outils intégrés (mode simulateur, terminal de communication, gestionnaire 7 segments, analyseur statistique, correcteur d'erreur, explorateur de code...) associé à sa capacité à pouvoir gérer la plupart des périphériques rencontrés dans l'industrie (Bus I2C™, 1Wire™, SPI™, RS485, Bus CAN™, cartes compact Flash, signaux PWM, afficheurs LCD et 7 segments...) on font un outils de développement
II) Description du logiciel Mikropascal :
Le compilateur Mikropascal nous permet de développer rapidement des applications
complexes :
• Écrivez votre code source de Pascal en utilisant le rédacteur intégré de code (les aides de code et de paramètre, Accentuer de syntaxe, correction automatique, etc.…)
• Employez les bibliothèques Mikropascal incluses pour accélérer nettement le développement : acquisition de données, mémoire, affichages, conversions.
• Surveillez votre structure de programme, variables, et fonctions dans l'explorateur de code.
• Inspectez l'écoulement de programme et corrigez la logique exécutable avec le programme de mise au point intégré.
• Obtenez les rapports et les graphiques détaillés : Carte de RAM et de ROM, codez les statistiques, impression d'assemblage, etc.…
La programmation en mikropascal . Page 2/20
Gestionnaire 7 segmentsAssistant de code
Fenêtre des erreurs
Analyseur statistique
Explorateur de code
Editeur de code
I II) Les barres d’outils
VI) Manipulation :Sur votre PC lancer le compilateur mikropascal.
Première étape Création d’un nouveau projet : Project New Project
Deuxième étape Choix des paramètres du projet :
La programmation en mikropascal . Page 3/20
nouveau projetSauvegarder le programme
en coursCharger un projet existant et changer ses paramètres (ex : horloge, son nom,
(.…Annuler le dernière action
Ouvrir un projet Rétablir la dernière action
Fermer un programme Imprimer
Sauvegarder les programmes en cours Une nouvelle page
Sauvegarder un fichier existant sous un autre nom.
compilation
Afficher le fichier .asm après compilation
1- Taper le nom de votre projet
2- choisir un dossier pour l'enregistrement
3- CIP el risiohC
ed ecneuqérf al repat -4egolroh'l
6- KO rus reuqilc
CSO_TX te FFO_TDW sesac sel rehcoC -5
Troisième étape Saisi du programme Comme application saisir le programme ci-dessous (faire attention aux symboles de
ponctuation et d'égalité (Program led_clignotantes;Begin TRISB :=$ 00; PORTB :=$ 00; While true do
Begin PORTB := 0; Delay_ms(1000); PORTB :=$04; Delay_ms(1000);
End; End.
Quatrième étape : Compilation: Project ----- build (ou cliquer sur )
La barre de progrès semblera vous informer au sujet du statut de compilation. S'il y a des erreurs, on vous annoncera dans la fenêtre d’erreur.Si aucune erreur n'est produite,
Cinquième étape : Simulation
La simulation du programme peut se faire facilement avec le logiciel ISIS.
La programmation en mikropascal . Page 4/20
Charger le programme dans le microcontrôleur
Sixième étape : Chargement du programme dans le PIC16F84A
Avec le logiciel Icprog
La programmation en mikropascal . Page 5/20
La programmation en langage évolué :Que ce soit par la méthode graphique ou en langage évolué, l’écriture du programme ainsi que sa mise au point doivent suivre le diagramme suivant :Il faut traduire le cahier des charges en une suite ordonnée d’actions que doit réaliser le processus de commande, cette suite d’opérations sera décomposée en actions élémentaires ou instructions c’est l’Algorithme. Par la suite il suffit de transformer cet algorithme en un langage évolué tel que le langage PASCAL ou le langage C.Dans la suite de ce module on s’intéressera au langage MIKROPASCAL. I-1- Structure d’un programme :Un programme est un texte que le compilateur va traduire en fichier hexadécimal. Alors il doit avoir une structure particulière.Le texte d'un programme contient au moins trois parties.
L'entête Ne contient qu'une ligne; commence par le mot réservé « Program » et donne un nom au programme.
Les déclarations Elles permettent de définir les éléments utilisés dans le programme. En effet on devra déclarer les variables utilisées pour permettre au compilateur d'effectuer les réservations de mémoire ainsi que les sous-programmes (Procédures et fonctions).
Le corps du programme Commence par le mot réservé « Begin » et se termine par le mot réservé "End " suivi d'un point final. Ce qui suit ce "End" n'est pas pris en compte par le compilateur. Entre "Begin" et "End" se trouvent les instructions à effectuer par le programme.Algorithmique Langage PASCALAlgorithme NomAlgorithme ;Variables Nomvariable : type ; Constantes Nomconstante :Type=valeur ; Début…….……Fin.
Program NomProgramme ; Var Nomvariable : Type ;Const Nomconstante : Type := valeur ; Begin…….…….End.
I-2- Les Règles de bases :* Toutes instructions ou actions se terminent par un point virgule ;* Une ligne de commentaires doit commencer par "{" et se terminer par "}" ou commence par "//". * Un bloc d’instructions commence par "Begin" et se termine par "End;"
I-3- Les types de variables utilisées en Mikropascal :
Type taille Plage Array ... Gestion de tableau
String ... Gestion de chaîne de caractères
Byte (octet) 8 bits 0 .. 255
Char (caractère) 8 bits 0 .. 255
Word (mot) 16 bits 0 .. 65535
Short (Octet signé) 8 bits -128 .. 127
Integer (Entier) 16 bits -32768 .. 32767
longint (Entier long) 32 bits -2147483648 .. 2147483647
La programmation en mikropascal . Page 6/20
I-4- Les bases du compilateur Mikropascal :Le décimal : A=26 ;L’hexadécimal A=$1A ; ou A=0x1A ;Le binaire A=%00011010 ;
Vous pouvez utiliser la commande QConvertor pour convertir un entier décimal en binaire ou en hexadécimal
I-5 Configuration des registres en entrées/ sorties Pour configurer les broches d'un port en sorties ou en entrées on utilise la commande TrisExemple Trisa=5 =Trisa= (00101)2 donne les broches RA0 et RA2 sont des entrées et les autres broches sont en sortiesTrisb=0 Trisb(00000000)2 toutes les broches du port B sont en sorties Trisb=240 Trisb=(F0)16 Trisb=(11110000)2 les broches RB0,RB1,RB2 et RB3 sont en sorties et les autres broches ( RB4,RB5,RB6 et RB7) en entréesLes zéros configurent les broches en sorties et les uns les configurent en entréesI-6- les opérateurs arithmétiques et logiques :
Opérateurs arithmétiques Opérateurs de comparaison Opérateurs logiquesOpérateur Opération Opérateur Opération Opérateur Opération
+ Addition = Egalité AND ET- Soustraction <> Différent OR OU* Multiplication > Supérieur XOR OU exclusif/ Division < Inférieur NOT NON
div Division entière <= Inférieur ou égale SHL Décalage à gauchemod Reste de la
division entière>= Supérieur ou égale SHR Décalage à droite
I-7- Les structures usuelles :a) L’affectation :C’est l’action d’attribuer une valeur à une variable.Langage algorithmique Langage PASCALa<== b+c a :=b+c
b) Les structures alternatives :Langage algorithmique Langage PASCALSI condition ALORS DEBUT Traitement ;……………FINSI ;
IF condition THEN BEGINTraitement ;………….END;
SI condition ALORS DEBUT
IF condition THEN BEGIN
La programmation en mikropascal . Page 7/20
Traitement 1; …………… FIN SINON DEBUT Traitement 2; …………… FINSI ;
Traitement 1; …………. ENDELSE BEGIN Traitement 2; …………. END;
SELON expression Valeur_1 : action_ 1 ; ……………... Valeur_n : action_n ; autrement : action_0 ;FINSELON ;
CASE expression OF Valeur_1 :action_1;……………… Valeur_n : action _n ; ELSE action_0 ;END;
c) Les structures itératives ou répétitives :Langage algorithmique Langage PASCALI : entier ;…………POUR I <variant de Valeur initiale> JUSQU'A valeur finale FAIRE DEBUT Traitement ;……………FINFAIRE ;
I: integer;………..FOR I:= <valeur initiale> TO <Valeur finale> DO BEGINTraitement ;………….END;
TANQUE condition FAIRE DEBUT Traitement ; …………… FINTANQUE ;
WHILE condition DO BEGIN Traitement ; …………. END;
d) Les procédures et les fonctions Une suite d'instructions peut être rassemblée en un bloc qui peut être appelé depuis plusieurs endroits d'un programme. Ceci donne lieu aux notions de sous programme appelé aussi procédures ou fonctions. * ProcéduresCe sont des groupes d'instructions qui vont former une nouvelle instruction simple utilisable dans un programme. En Pascal il faut les définir avant de les utiliser. Ceci se fait en utilisant une structure similaire à celle d'un programme.
Entête Procedure Identificateur (Param1:Type1, Param2:Type2,...);Identificateur est le nom de la procédure; Param1, Param2 ... sont des paramètres que le programme fournit à la procédure sous forme de constantes, de variables ou d'expressions; Type1, Type2 ... sont les types de ces paramètres.
DéclarationsDéclarations de constantes, types, variables utilisés à l'intérieur de la procédure
La programmation en mikropascal . Page 8/20
Corps de la procédure Begin Instruction1; Instruction2;…….. End;Il s'agit des instructions exécutées par le programme à l'appel de la procédure. Une procédure peut appeler d'autres procédures définies avant elle. L'appel d'une procédure se fait en écrivant son nom suivi des paramètres nécessaires entre parenthèses.
* FonctionsUne fonction est une procédure qui devra fournir un résultat de type numérique ou chaîne de caractères. La définition se fait en utilisant une structure similaire à celle de la procédure.
EntêteFunction Identificateur (Param1:Type1, Param2:Type2,...):Type_R;Identificateur est le nom de la procédure; Param1, Param2 ... sont des paramètres que le programme fournit à la fonction sous forme de constantes, de variables ou d'expressions; Type1, Type2 ... sont les types de ces paramètres; Type_R est le type du résultat fourni par la fonction.
DéclarationsDéclarations de constantes, types, variables utilisés à l'intérieur de la fonction.
Corps de la fonction Begin Instruction1; Instruction2;…….. Identificateur:=résultat; End;
I-7- Les fonctions adaptées aux microcontrôleurs PIC :Le compilateur mikropascal apporte une large bibliothèque de procédures et fonctions adaptées aux microcontrôleurs de la famille PIC de MICROCHIP. Ces fonctions sont accessibles dans l’aide du logiciel néanmoins on va citer quelque une.Fonctions / Procédures ExempleSetbit(port , bit) ; Setbit(portB,2) ; mettre la broche RB2 à 1Clearbit(port , bit) ; Clearbit(portB,5) ; mettre la broche RB5 à 0Testbit(port , bit) A :=testbit(portB,7) ;affecter à la variable A l’état de RB7
Button(port,bit,temps d’appui ,état logique actif)
If Button(portA,2,10,1) then <Action 1> ;On teste l’appui sur un bouton poussoir relié à la broche RA2 pendant 10 ms pour faire l’Action 1
La programmation en mikropascal . Page 9/20
Applications
Application 1:Clignotement d'un voyant tous le 1 s
AffectationEntrées/Sorties Broche du µ contrôleur
H1 RA3
H1
1ére méthode ( notion de la pause ) MikroPascal fournit une procédure pour créer des temporisations.Delay_us Delay_us(const time_in_us :
word); Crée un retard dont la durée en microsecondes
Delay_us(10); Dix microsecondes
Delay_ms Delay_ms(const time_in_ms : word);
Crée un retard dont la durée en millisecondes
Delay_ms(1000) une seconde
Vdelay_ms Vdelay_ms(time_in_ms : word);
Crée un retard dont la durée en millisecondes est time_in_ms (une variable)
Delay_Cyc Delay_Cyc(cycles_div_by_10 : byte);
Crée un retard dont la durée est fonction de l'horloge du microcontrôleur
Delay_Cyc(10);
La programmation en mikropascal . Page 10/20
Algorithme Programme commentaireProgramme EX1aDébutTrisa0;
Porta0;Tant que vrai faireDébut porta.30 Pause d'une secondePorta.31;Pause d'une secondeFin tant que Fin programme
program EX1a;begin trisa:=0; porta:=0;while true do begin porta.3=0 delay_ms(1000); porta.3:=1 ; delay_ms(1000); end;end.
nom du programmedébut du programmetoutes les broches du port A sont configurées en sortiesToutes les broches du port A sont à zéroboucle répétitive sans limite
instructions à exécuter durant la boucle
2éme méthode ( notion du test ) Algorithme Programme commentaireProgramme EX1bDébutTrisa0;
Porta0;
Tant que vrai faireDébut Si porta.3=0 alorsPorta.31 si non porta.30;Pause d'une secondeFin tant que;Fin programme
program EX1b;begin trisa:=0; porta:=0;
while true do begin if porta.3=0 then porta.3:=1 else porta.3:=0; delay_ms(1000); end;end.
nom du programmedébut du programmetoutes les broches du port A sont configurées en sortiesToutes les broches du port A sont à zéroboucle répétitive sans limite
// instructions à exécuter durant la boucle
Application 2L'action sur un bouton poussoir S1 entraîne l'allumage d'une lampe H
H1
S1
AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 RA0Sortie: H RA3
Dans le programme de l'EX1b - Remplacer l'instruction trisa:=0 par trisa:=1 pour configurer la broche RA0 en entrée et les autres broches en sortie- Remplacer if porta.3=0 then porta.3:=1 else porta.3:=0; par if porta.0=0 then porta.3:=1 else porta.3:=0; pour faire un test sur RA0 au lieu de RA3- Supprimer delay_ms(1000) . On ne plus besoin d'une pause- Compiler et simuler en ajoutant une entrée sur la broche RA0
Application 3
H1
S1S2
AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 RA0Entrée: S2 RA1Sortie: H RA2
La programmation en mikropascal . Page 11/20
1ère méthodeAlgorithme Programme mikropascalAlgorithme EX3;Début Trisa $03;Porta 0;Tan que vrai faireSi porta.0=1 alors porta.2:=0 sinonDébut Si porta.1=0 alors porta.2:=0 sinon porta.2:=1;Fin sinon;Fin du programme
program EX3;begintrisa:=$03;porta:=0;while true doif porta.0=1 then porta.2:=0 elsebeginif porta.1=0 then porta.2:=0 else porta.3:=1;end;end.
2ème méthode (notion des variables) On utilise une variable X qui prend l'état logique 1 si et seulement si (S1=0 ET S2=1)Cette variable commande la sortie H1Algorithme Programme mikropascalAlgorithme EX3a;Variable X de type octetDébut X0;Trisa $03;Porta 0;Tan que vrai fairedébutSi (porta.0= 0 ET porta.1) =1 alors X:=1 sinonX:=0;Si X=0 alors porta.2:=0 si non porta.2:=1;Fin tant que Fin du programme
program EX3a;var X:byte;beginX:=0;trisa:=$03;porta:=0;while true dobeginif ((porta.0=0) and (porta.1:=1)) then X:=1 else X:=0;if X=0 then porta.2:=0 else porta.2:=1;end;end.
Application 4: commande d'un moteur avec deux boutons poussoirs ( 1 seul sens de rotation)
S1S2
KM1KM1
AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 (arrêt) RA0Entrée: S2 (marche) RA1Sortie: KM 1 RA3On va associe à KM1 une variable X dont l'équation est )1.(0 XRARAX +=
La programmation en mikropascal . Page 12/20
L'instruction if ((porta.0=0) and (porta.1=1)) then X:=1 else X:=0; devint if ((porta.0=0) and ((porta.1:=1) or (X=1))) then X:=1 else X:=0;
Application 5 (notion de procédure) Commande d'un moteur (2 sens de rotation) avec verrouillage électrique
S1S2
KM1
S3
KM2
KM1
KM1KM2
KM2
AffectationEntrées /sorties Broches du microcontrôleurEntrée: S1 (arrêt) RA0Entrée: S2 (marche sens horaire ou gauche) RA1Entrée: S3 (marche sens trigonométrique ou droite) RA2Sortie: KM 1 (rotation sens horaire ou gauche) RA3Sortie : KM2 (rotation sens trigonométrique ou droite) RA4 On associe une variable d à KM1 et un autre g à KM2
Programme mikropascal Commentaire program EX5; Nom du prgrammevar d,g:byte; Déclaration des variablesprocedure droite;begin if ((porta.0=0)and((porta.1=1)or (d=1)) and (g=0)) then d:=1 else d:=0;
if d=1 then porta.3:=1 else porta.3:=0; end;
Procédure droite
procedure gauche; begin if ((porta.0=0)and((porta.2=1)or (g=1)) and (d=0)) then g:=1 else g:=0; if g=1 then porta.4:=1 else porta.4:=0; end;
Procédure gauche
begin trisa:=%00111; while true do
begin droite; gauche; end; end.
Programme principal
Appel de la procédure droiteAppel de la procédure gauche
La programmation en mikropascal . Page 13/20
Nous voulons signal l'état du moteur par un afficher 7 segment à cathode commun branché sur les broches du port B Etat du moteur Etat de l'afficheur Valeur affectée au port BMoteur à l'arrêt En décimal119
En hexadécimal=Rotation sens horaire En décimal:
En hexadécimalRotation sens trigonométrique
En décimal:En hexadécimal
Pour retrouver les codes correspondants aux différents états de l'afficheur dans le menu tools choisir la commande seven segment convertor
Ajouter au programme la procédure suivanteprocedure affichage; begin if ((d=0) or (g=0)) then portb:=119; if d=1 then portb:=……;
if g=1 then portb:=……;; end;Appeler la procédure affichage dans le programme principal
Nous voulons remplacer l'afficheur 7 segments par un afficheur LCD 2x16 (2 lignes et 16 colonnes) Le compilateur MikroPascal fournit une bibliothèque pour communiquer avec l'afficheur LCD utilisé généralement en mode 4-bit
Syntaxe Description Exemple
Lcd_Config Lcd_Config (var port : byte; const. RS, EN, WR, D7, D6, D5, D4 : byte);
Initialiser l'afficheur LCD et définir les broches du microcontrôleur à relier à l'LCD
Lcd_Config (PORTB,1,2,0,3,5,4,6); .
Lcd_Out Lcd_Out (row, col : byte; var text : array[255] of char);
Ecrire un Texte sur l'afficheur LCD en indiquant sa position (ligne et colonne).
Ecrire "Ali" sur LCD sur la ligne 1, colonne 3:Lcd_Out(1, 3, 'Ali');
Lcd_Out_Cp :
Lcd_Out_Cp(var text : array[255] of char);
Ecrire le texte sur l'afficheur LCD à la position actuelle
Afficher " salut " à la position actuelle de curseur :
La programmation en mikropascal . Page 14/20
de curseur Lcd_Out_Cp('salut');Lcd_Chr : Lcd_Chr(row, col, character :
byte); Ecrire un Caractère sur l'LCD en indiquant sa position (ligne et colonne).
Ecrire "i" sur LCD sur la ligne 2, colonne 3:Lcd_Chr(2, 3, 'i');
Lcd_Chr_Cp Lcd_Chr_Cp(character : byte); Ecrire un caractère sur l'afficheur LCD à la position actuelle de curseur.
Lcd_Chr_Cp('e');Ecrire "e" à la position actuelle du curseur.
Lcd_Cmd : Lcd_Cmd (command : byte); Liste de commande:LCD_FIRST_ROW LCD_SECOND_ ROWLCD_THIRD_ROW LCD_FOURTH_ROW LCD_CLEAR LCD_RETURN_HOME LCD_CURSOR_OFF LCD_MOVE_CURSOR_LEFT LCD_MOVE_CURSOR_RIGHT LCD_TURN_ON LCD_TURN_OFF LCD_SHIFT_LEFT LCD_SHIFT_RIGHT
Envoie une commande à l'afficheur LCD
Déplacer le curseur à la 1ère ligne Déplacer le curseur à la 2 ème ligne Déplacer le curseur à la 3 ème ligne Déplacer le curseur à la 4 ème ligne Effacer le contenu de l'afficheur LCD Retour du Curseur à la position initiale Arrêter le curseur Déplacer le curseur à gauche Déplacer le curseur à droite Activer l'affichage sur l'afficheur LCD Arrêter l'affichage sur l'afficheur LCD Décalage de l'affichage à gauche Décalage de l'affichage à droite
Remplace la procédure affichage par celui-ci procedure affichage; begin
if d=1 then begin lcd_out(1,1,'Rotation sens ') ; //afficher sur la 1ere ligne et la 1ere colonne de l'LCD lcd_out(2,1,'trigonometrique'); end;if g=1 thenbegin lcd_out(1,1,'Rotation sens ') ; lcd_out(2,1,'horaire ');end;if ((g=0) and (d=0)) thenbeginlcd_out(1,1,'Moteur a l arret ');lcd_out(2,1,' ');end; end;ajouter le 4 lignes suivant dans le programme principal
trisb:=$00; portb:=0; lcd_config(portb,1,3,2,7,6,5,4); // lcd_config(le port, RS, E, RW, D7, D6, D5, D4)
La programmation en mikropascal . Page 15/20
lcd_cmd(lcd_cursor_off); // éteindre le curseur
Application 6La cabine étant initialement au 1ère étage,
L'action sur un bouton m0 entraîne la descente de la cabine au rez-de-chaussée puis sa monté au 1ère étage après une pause de 2s
L'action sur un bouton m2 entraîne la monté de la cabine au 2ème étage puis sa descente au 1ère étage après une pause de 2s
S 2
S 1
S 0
M o t e u r à C C 2 4 VK M 1 : M o n t éK M 1 e t K M 2 : D e s c e n t e
m 2
m 0
Affectation Broche
m 2
K M 1
K M 1
S 2
S 1
0
1
2 T = 2 st / 2 s / 2
S 0
t / 2 s / 5
m 0
3 6
5
4
S 1
K M 2
K M 2K M 1
T = 2 s
K M 1
Entrée : s0 RA0Entrée : s1 RA1Entrée : s2 RA2 Entrée : m0 RA3Entrée : m2 RA4Sortie : KM1 RB0Sortie : KM2 RB1
On associe à chaque étape une variable Xi
Le programme : program graf3;var x0,x1,x2,x3,x4,x5,x6,t2,t5 : byte;const pause:word =5000 ;beginx0:=1; x1:=0; x2:=0; x3:=0 ;x4:=0; x5:=0; x6:=0;
//Initialement seule l'étape initiale est activé
trisa:=$ff; //Le port A est configuré en entrées trisb:=$00; //Le port B est configuré en sorties portb:=0; //Initialement toutes les sorties sont à 0while true dobegin if ((x0=1) and (porta.3=1)and (porta.4=0)) then begin x0:=0; x1:=1;
//Activation de l'étape 1 et désactivation de l'étape 0
La programmation en mikropascal . Page 16/20
endif ((x1=1) and (porta.2=1)) then begin x2:=1; x1:=0; end;
//Activation de l'étape 2et désactivation de l'étape 1
if ((x2=1) and (t2=1)) then begin x2:=0; x3:=1; end;
//Activation de l'étape 3 et désactivation de l'étape 2
if ((x3=1) and (porta.1=1)) then begin x3:=0; x0:=1; end;
//Activation de l'étape 0 et désactivation de l'étape 2
if ((x0=1) and (porta.3=0)and (porta.4=1)) then begin x0:=0; x4:=1; end ;
//Activation de l'étape 4 et désactivation de l'étape 0
if ((x4=1) and (porta.0=1)) then begin x5:=1; x4:=0; end;
//Activation de l'étape 5 et désactivation de l'étape 4
if ((x5=1) and (t5=1)) then begin x5:=0; x6:=1; end;
//Activation de l'étape 6 et désactivation de l'étape 5
if ((x6=1) and (porta.1=1)) then begin x6:=0; x0:=1; end;
//Activation de l'étape 0 et désactivation de l'étape 6
if ((x1=1)or(x3=1)or(x4=1)or(x6=1)) then portb.0:=1 else portb.0:=0;
//Programmation de la sortie KM1
if ((x3=1) or (x4=1)) then portb.1:=1 else portb.1:=0;
//Programmation de la sortie KM2
if x2=0 then t2:=0 else begin t2:=0; vdelay_ms(pause); t2:=1; end;
//Programmation du temporisateur T2
if x5=0 then t5:=0 else begin t5:=0; vdelay_ms(pause); t5:=1; end;
// Programmation du temporisateur T5
end; //fin tant queend. //Fin du programme
La programmation en mikropascal . Page 17/20
Application 7: Gestion d'un clavier matriciel par le microcontrôleur PIC16F84A.
A
B
C
D
E 1 E 2 E 3T 1 T 2 T 3
T 4 T 5 T 6
T 7 T 8 T 9
T * T 0 T #
Schéma de simulation avec ISIS Schéma structurel d'un clavier 12 touchesDans un premier lieu on s'intéressera au clavier.
Le principe de ce type de clavier est simple en effet l'appui sur une touche réalise un contact direct entre la ligne et la colonne de cette touche. Pour pouvoir lire une touche appuyée par le microcontrôleur on procède comme suit:On fait un balayage sur les colonnes c'est-à-dire on envoie les séquences suivantes (100, 010, 001).On lit l'état des lignes sur 4 bits (A, B, C, D)
On aura le tableau de correspondance suivant :
RB0-RB1-RB2 RB3-RB4-RB5-RB6 PORTB(en décimal) Touche appuyée
1 0 0
1 0 0 0 (00001001)2=9 T110 1 0 0 (00010001)2=17 T220 0 1 00 0 0 1
0 1 0
1 0 0 0 (00001010)2=100 1 0 0 (00010010)2=180 0 1 00 0 0 1
0 0 1
1 0 0 00 1 0 00 0 1 00 0 0 1 (01000100)2=68 T#-0
On désire afficher le code binaire correspondant à la touche appuyée sur le portA
program clavier; Var T,X : byte ;begin
T:= 0 ;X:=0;TRISA := $F0 ;
La programmation en mikropascal . Page 18/20
portA:=0;TRISB :=$F8 ;
while (1=1) do begin
PortB := 1 ; delay_ms(10) ; T := PortB ; if T=9 then x:= 1; if T=17 then x:= 4; if T=33 then x:= 7; if t=65 then x:= 10; PortA:=x ;
PortB :=2 ; delay_ms(10) ; T := PortB ; if T=10 then x := 2 ; if T=18 then x := 5 ; if T=34 then x := 8 ; if T=66 then x := 0 ; PortA := x ;
PortB := 4 ; delay_ms(10) ; T := PortB ; if T=12 then x := 3 ; if T=20 then x := 6 ; if T=36 then x := 9 ; if T=68 then x := 11 ; PortA := x ; end ;end.
On peut utiliser aussi les commandes de la librairie KeypadSyntaxe Description Exemple
Keypad_Init Keypad_Init(var port : word);
Initialiser et préciser le port sur le quel est branché le clavier
Keypad_Init(PORTB);
Keypad_Read : Keypad_Read : byte;
Vérifier si une touche est appuyée. La fonction renvoie 1 à 15, selon la touche appuyée, ou 0 si aucune touche n'est actionnée. Exemple
kp := Keypad_Read;
Keypad_Released Keypad_Released : byte
L'appel de Keypad_Released génère une attente jusqu'à ce qu'une touche soit appuyée
kp := Keypad_Released;
La programmation en mikropascal . Page 19/20
et libérée. Une fois libérée, la fonction renvoie 1 à 16, selon la touche
program clavier4x4; var kp,x,y : byte; procedure clavier; begin kp := 0; while kp=0 do begin kp := Keypad_Read(); end; x:=kp; end;
begin Keypad_Init(PORTb); trisa:=0; repeat clavier; porta:=x; until false end.
La programmation en mikropascal . Page 20/20