' Micro-Info asbl ' --------------- ' Programme TERMINAL2 ' ------------------- ' Utilisation du Clavier, de L'écran et du port série. ' Et en plus, il faudra utiliser un cable série entre le PC et la carte. ' En plus du matériel, il faudra utiliser le programme hyperterminal sur ' le PC. Ne pas oublier de configurer le programme hyperterminal pour que ' les caractéristiques du port série correpondent aux définition ' de la communication série dans Bascom. ' ' Cet exercice ressemble au précédent, mais cette fois, l'affichage devra ' se faire sous la forme de l'affichage d'octets affichés en Hexadécimal. ' L'écran 2X16 devra donc afficher quelque chose comme ceci : ' +----------------+ ' | Hh Hh Hh Hh Hh | ' | Hh Hh | ' +----------------+ ' Chaque groupe de 2 chiffres Hexa sera séparé par un espace. ' Ensuite, l'octet ainsi généré (H*16+h) sera envoyé sur le port ' RS232 sous la forme d'un code ascii dont la valeur sera l'octet généré. ' Et l'octet envoyé devrait s'afficher dans la fenêtre hyperterminal ' du PC. ' ' 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 5 charactères générés ' par la lecture clavier et affichés sous format hexadécimal. ' - Envoyer le code ascii par le port RS232. ' - 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 Entreea$ AS ALPHA ' Valeur ascii de l'entrée (1 Char) DECLARE Entreeh$ AS ALPHA ' Valeur hexa de l'entrée (1 blanc + 2 Chars) 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 Keya$(16) AS ALPHA ' Matrice contenant les codes ascii du clavier DECLARE Keyh$(16) AS ALPHA ' Matrice contenant les codes hexa du clavier ' Initialisation des variables ' ---------------------------- LET i=0 LET j=0 LET Entree=0 LET Entreec$=" " LET Ligne$=" " LET Ligne1$=" " LET Ligne2$=" " LET Keya$(0) = "0" ' Code à vérifier avec le hardware utilisé LET Keya$(1) = "1" ' Code à vérifier avec le hardware utilisé LET Keya$(2) = "2" ' Code à vérifier avec le hardware utilisé LET Keya$(3) = "3" ' Code à vérifier avec le hardware utilisé LET Keya$(4) = "4" ' Code à vérifier avec le hardware utilisé LET Keya$(5) = "5" ' Code à vérifier avec le hardware utilisé LET Keya$(6) = "6" ' Code à vérifier avec le hardware utilisé LET Keya$(7) = "7" ' Code à vérifier avec le hardware utilisé LET Keya$(8) = "8" ' Code à vérifier avec le hardware utilisé LET Keya$(9) = "9" ' Code à vérifier avec le hardware utilisé LET Keya$(10) = "A" ' Code à vérifier avec le hardware utilisé LET Keya$(11) = "B" ' Code à vérifier avec le hardware utilisé LET Keya$(12) = "C" ' Code à vérifier avec le hardware utilisé LET Keya$(13) = "D" ' Code à vérifier avec le hardware utilisé LET Keya$(14) = "E" ' Code à vérifier avec le hardware utilisé LET Keya$(15) = "F" ' Code à vérifier avec le hardware utilisé LET Keyh$(0) = " 30" ' Code à vérifier avec le hardware utilisé LET Keyh$(1) = " 31" ' Code à vérifier avec le hardware utilisé LET Keyh$(2) = " 32" ' Code à vérifier avec le hardware utilisé LET Keyh$(3) = " 33" ' Code à vérifier avec le hardware utilisé LET Keyh$(4) = " 34" ' Code à vérifier avec le hardware utilisé LET Keyh$(5) = " 35" ' Code à vérifier avec le hardware utilisé LET Keyh$(6) = " 36" ' Code à vérifier avec le hardware utilisé LET Keyh$(7) = " 37" ' Code à vérifier avec le hardware utilisé LET Keyh$(8) = " 38" ' Code à vérifier avec le hardware utilisé LET Keyh$(9) = " 39" ' Code à vérifier avec le hardware utilisé LET Keyh$(10) = " 41" ' Code à vérifier avec le hardware utilisé LET Keyh$(11) = " 42" ' Code à vérifier avec le hardware utilisé LET Keyh$(12) = " 43" ' Code à vérifier avec le hardware utilisé LET Keyh$(13) = " 44" ' Code à vérifier avec le hardware utilisé LET Keyh$(14) = " 45" ' Code à vérifier avec le hardware utilisé LET Keyh$(15) = " 46" ' Code à vérifier avec le hardware utilisé ' Initialisation ' -------------- ' LET Ligne1$ = "Micro-Info asbl " ' Définition de la première ligne LET Ligne2$ = " Terminal V 2 " ' 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 Entreea$ = Keya$(Entree) ' Définition du code ascii de la touche LET Entreeh$ = Keyh$(Entree) ' Définition du code hexa de la touche ' Envoi vers le PC LET Ligne$ = Ligne2$ ' Mise à jour de la ligne de travail LET j = (i-1)*3 ' 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-j ' 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=6 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 '**************************************************************************