Ennoncé Exercice 2 Serie-LCD-Clavier - TERMINAL2_JP --------------------------------------------------- Utilisation du clavier, de l'écran et du port série. Puis il faudra utiliser aussi un câble 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 correspondent aux définitions 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 construirons les deux lignes dans des variables, puis nous les afficherons. Description des tâches : ------------------------ - Effacer l'écran. - Afficher un message d'accueil. - Construire la deuxième ligne avec les 5 caractè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 effacer la ligne 2 et ainsi de suite.... ************************************* Programmation Structurée ======================== BEGIN Définition des variables ------------------------ DECLARE J AS BYTE ' Valeur décodée de la touche appuyée 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 Touchea$ AS BYTE ' Définition ASCII de la touche appuyée DECLARE Toucheh$ AS BYTE ' Définition HEXA de la touche appuyée 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 Keya$(0) = "1" ' Code à vérifier avec le hardware utilisé LET Keya$(1) = "2" ' Idem LET Keya$(2) = "3" ' Idem LET Keya$(3) = "A" ' Idem LET Keya$(4) = "4" ' Idem LET Keya$(5) = "5" ' Idem LET Keya$(6) = "6" ' Idem LET Keya$(7) = "B" ' Idem LET Keya$(8) = "7" ' Idem LET Keya$(9) = "8" ' Idem LET Keya$(10) = "9" ' Idem LET Keya$(11) = "C" ' Idem LET Keya$(12) = "F" ' Idem LET Keya$(13) = "0" ' Idem LET Keya$(14) = "E" ' Idem LET Keya$(15) = "D" ' Idem LET Keyh$(0) = "31" ' Idem LET Keyh$(1) = "32" ' Idem LET Keyh$(2) = "33" ' Idem LET Keyh$(3) = "41" ' Idem LET Keyh$(4) = "34" ' Idem LET Keyh$(5) = "35" ' Idem LET Keyh$(6) = "36" ' Idem LET Keyh$(7) = "42" ' Idem LET Keyh$(8) = "37" ' Idem LET Keyh$(9) = "38" ' Idem LET Keyh$(10) = "39" ' Idem LET Keyh$(11) = "43" ' Idem LET Keyh$(12) = "70" ' Idem LET Keyh$(13) = "30" ' Idem LET Keyh$(14) = "69" ' Idem LET Keyh$(15) = "44" ' Idem Initialisation du programme =========================== LET Ligne1$ = " MICRO - INFO " ' Définition de la première ligne LET Ligne2$ = " Terminal 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 DO WHILE ' La ligne ne dépasse pas 16 caractères LET J = ' Lecture du clavier LET Touchea$ = Keya$(J) ' Définition ASCII de la touche LET Toucheh$ = Keyh$(J) ' Définition HEXA de la touche IF J <> 16 THEN ' Test si une touche, 16 = pas de touche LET Ligne2$ = Ligne2$ + Toucheh$ + " " ' Ajout valeur Hexa de Touche + un Espace ' Envoi vers le PC ENDIF ' Fin de test ENDDO ' Fin de boucle longueur de ligne2 LET Ligne1$ = Ligne2$ ' Copie de la ligne2 dans la ligne1 LET Ligne2$ = " " ' Remplacement des valeurs par des espaces GOSUB Affilcd LET Ligne2$ = "" ' Effacement de la deuxième ligne ENDDO ' Bouclage sur la boucle infinie END ' Fin du programme Sous routines ============= AffiLCD: Affichage de deux lignes de 16 caractères -------------------------------------------------- SUB Affilcd ' Sur ligne 1 du LCD ' Sur ligne 2 du LCD ENDSUB =========[ FIN ]==============================================================