' Micro-Info asbl ' --------------- ' Programme TERMINAL1 ' ------------------- ' Utilisation de l'écran et du clavier Hexadécimal. ' - Effacement de l'écran LCD ' - Ensuite chaque touche appuyée sur le clavier est affichée sur le LCD ' - Lorsque la première ligne est pleine, passer à la deuxième ligne. ' - Lorsque la deuxième ligne est pleine, elle est recopiée sur la première ' ligne, puis éfffacée afin d'afficher les charactères suivants. ' - etc, etc.. ' ' Description du matériel utilisé : ' --------------------------------- ' Pour cet exercice, nous utilisons la carte alimentation, la carte ' AT-Mega16 et la petite carte RS232-LCD-Clavier sur laquelle seront ' raccordés l'écran LCD et le clavier Hexadécimal. Comme le clavier ' que nous avons n'est pas réellement hexadécimal, nous attribuerons ' le E au signe "#", et le F au signe "*". ' ' Le clavier est lu par un polling ligne/colonne, et renvoie un code compris ' entre 0 et 15. Il sera nécessaire de faire un test pour vérifier la ' correpondance entre les touches et le code envoyé par le polling. ' ' Principe de fonctionnement du programme : ' ----------------------------------------- ' En ce qui concerne l'affichage sur l'écran LCD nous n'utiliserons ' pas les fonctions standard. En fait, nous contruirons les deux ' lignes dans des variables, puis nous les afficherons. ' ' Description des tâches : ' ------------------------ ' - Effacer l'écran ' - Afficher un message d'acceuil ' - Construire la deuxième ligne avec les 16 charactères générés ' par la lecture clavier. ' - Lorsque la ligne est remplie, la recopier sur la ligne 1, ' et éffacer la ligne 2. ' - et ainsi de suite.... ' ' Programmation structurée : ' -------------------------- BEGIN ' Définition des variables ' ------------------------ DECLARE i AS Byte ' variable de travail DECLARE j AS BYTE ' variable de travail DECLARE Entree AS BYTE ' Valeur lue sur le clavier DECLARE Entreec$ AS ALPHA ' Valeur ascii de l'entrée (1 Char) DECLARE Ligne$ AS ALPHA ' variable de travail pour la ligne (16 Chars) DECLARE Ligne1$ AS ALPHA ' première ligne d'affichage du LCD (16 Chars) DECLARE Ligne2$ AS ALPHA ' deuxième ligne d'affichage du LCD (16 Chars) DECLARE Key$(16) AS ALPHA ' Matrice contenant les codes du clavier ' Initialisation des variables ' ---------------------------- LET i=0 LET j=0 LET Entree=0 LET Entreec$=" " LET Ligne$=" " LET Ligne1$=" " LET Ligne2$=" " LET Key$(0) = "0" ' Code à vérifier avec le hardware utilisé LET Key$(1) = "1" ' Code à vérifier avec le hardware utilisé LET Key$(2) = "2" ' Code à vérifier avec le hardware utilisé LET Key$(3) = "3" ' Code à vérifier avec le hardware utilisé LET Key$(4) = "4" ' Code à vérifier avec le hardware utilisé LET Key$(5) = "5" ' Code à vérifier avec le hardware utilisé LET Key$(6) = "6" ' Code à vérifier avec le hardware utilisé LET Key$(7) = "7" ' Code à vérifier avec le hardware utilisé LET Key$(8) = "8" ' Code à vérifier avec le hardware utilisé LET Key$(9) = "9" ' Code à vérifier avec le hardware utilisé LET Key$(10) = "A" ' Code à vérifier avec le hardware utilisé LET Key$(11) = "B" ' Code à vérifier avec le hardware utilisé LET Key$(12) = "C" ' Code à vérifier avec le hardware utilisé LET Key$(13) = "D" ' Code à vérifier avec le hardware utilisé LET Key$(14) = "E" ' Code à vérifier avec le hardware utilisé LET Key$(15) = "F" ' Code à vérifier avec le hardware utilisé ' Initialisation ' -------------- ' LET Ligne1$ = "Micro-Info asbl " ' Définition de la première ligne LET Ligne2$ = " Terminal v 1 " ' Définition de la seconde ligne ' Effacement de l'écran GOSUB Affilcd ' Affichage des 2 lignes ' Petite pause LET Ligne1$ = " " ' Première ligne à 16 blancs LET Ligne2$ = " " ' Deuxième ligne à 16 blancs ' Effacement de l'écran GOSUB Affilcd ' Affichage des 2 lignes ' ' Début du programme principal ' ---------------------------- DO WHILE i=i ' Début de la boucle infinie LET i=1 ' Initialisation de l'index de boucle DO ' Bouclage sur les 16 chars à afficher DO ' Bouclage de la lecture du clavier LET Entree = ' Lecture du clavier LOOP UNTIL Entree<> ' Bouclage si lecture=16 (pas de touche) LET Entreec$ = Key$(Entree) ' Définition du charactère de la touche LET Ligne$ = Ligne2$ ' Mise à jour de la ligne de travail LET j = i - 1 ' Calcul de l'index de position dans ' la ligne LET Ligne2$ = LEFT$(ligne$ , j) + Entreec$ ' prise des j premiers chars de ligne$ ' + le char appuyé LET j = 16 - i ' Calcul des positions restantes ' sur la ligne LET Ligne2$ = Ligne2$ + LEFT$(" ",j) ' ajout des blancs pour terminer la ligne ' Effacement de l'écran GOSUB Affilcd ' Affichage des 2 lignes LET i=i+1 LOOP UNTIL i=17 LET Ligne1$ = Ligne2$ ' Décalage de la ligne vers le haut LET Ligne2$ = " " ' et éffacement de la ligne du bas. Gosub Affilcd ' Affichage des 2 lignes ENDDO ' Fin de la boucle infinie END '************************************************************************** ' Sous routines ' ------------- ' AffiLCD : Affichage de deux lignes '----------------------------------- SUB Affilcd ' Début de la routine ' Affichage de la première ligne Lcd Ligne2 ' Affichage de la seconde ligne ENDSUB '**************************************************************************