'Micro-Info asbl Mars - Avril 2009 '********************************* ' Exercice N° 6b - LecturePot + LCD '********************************** ' Description des tâches: ' Affichage d'un message sur le LCD au démarrage du programme. ' Lecture d'un Pot et affichage de la valeur sur un LCD 2*16. ' La ligne 1 doit comporter le texte suivant: <Valeur = (ADC)> où ' ADC est la valeur décimale du POT. ' La ligne 2 doit afficher un barre-graphe. ' - Note: Les chiffres ne doivent pas se déplacer latéralement. ' - Challenge: (Exercice n°2) ' Essayer de réaliser un barre-graphe sur toute la ligne 2 du LCD. ' Créer des caractères personnalisés pour cet usage. ' ' Beaucoup de plaisir à tous. '******************************************************************************* '* Programmation Strucutrée * '**************************** BEGIN <Configurer & initialiser le Micro> <Configurer & initialiser l'écran LCD> 'Définition des variables Declare I As WORD ' variable de travail Declare Valpot$ As ALPHA ' variable pour affichage valeur ADC (8 Chars) Declare Ligne$ As ALPHA ' variable de travail pour affichage (32 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 Analogue As WORD ' valeur lue par le convertisseur ADC 'Affichage du message d'acceuil <Effacer l'écran LCD> LET Ligne1$ = "Affi. Valeur Pot" ' Définition de la première ligne LET Ligne2$ = " --Micro-Info-- " ' Définition de la seconde ligne GOSUB Affilcd ' Appel de la routine d'affichage <Pause 2 secondes> ' Petite pause <Effacer l'écran LCD> 'Début du programme principal Do 'Début de la boucle infinie 'Formation de la première ligne d'affichage ' Le but est de former une variable alphanumérique ' qui fait toujours 4 caractères de long (Valpot$). ' Elle se termine par les 1, 2, 3 ou 4 chiffres ' qui forment la valeur de lecture du potentiomètre ' précédée du nombre d'espace nécessaire pour avoir ' une longeur fixe de 4 caractères. ' Cette variable sera affichée à la suite du message ' " Val. Pot = ". LET Analogue = <Valeur de lecture du Pot> LET Valpot$ = <Valeur Alphanumérique de Analogue> LET Valpot$ = Right$(" " + Valpot$,4) LET Ligne1$ = " Val. Pot = " + Valpot$ 'Formation de la deuxième ligne d'affichage ' Cette ligne affiche un nombre de barres à l'aide des ' charactères programmables. Pour cela, nous allons définir ' cinq charactères. Le premier(C1) sera constitué d'une barre ' verticale à gauche, le deuxième(C2) 2 barres et le dernier(C5) ' cinq barres. Le nombre de barres total est donc de 5 X 16 ' charactères sur la ligne, soit 80 barres. Les caractères ' spéciaux nécessaires à l'affichage seront définis en début ' du programme lors de l'initialisation de l'afficheur LCD. ' Le nombre max mesuré sur l'ADC est 1021. Ce qui nous donne ' 1021/80=12,76 points de mesures par barres. ' Comme il est difficile de faire une division par un nombre ' fractionnaire, nous allons choisir 13 pour le diviseur. ' Du coup, nous avons 1023/13=78,69 soit 78 barres à afficher. ' Le zéro sera donc représenté par 2 barres, puis, pour chaque ' 13 points de mesure supplémentaire, nous aurrons une barre ' de plus à afficher. ' Comme l'afficheur LCD travaille avec des charactères "entiers" ' nous allons déterminer le nombre de charactères "entiers" ' à afficher, puis le nombres de barres à ajouter que l'on affichera ' sous la forme d'un seul charactère. ' Soit <Analogue> qui représente la valeur analogique lue, ' Le nombre de barres à afficher est : I = <Analogue>/13 + 2 ' Le nombre de charactère "entier" à afficher est : J = I/5 ' et le nbre de barres en plus: K = I-J*5 ' La ligne à afficher sera donc contruite sous la forme : ' Ligne2$ = LEFT$("J*<C5>"+"C(K)"+"16*<espace>",16) ' Au final, nous aurrons le code suivant : Let I = Analogue / 13 + 2 Let J = I / 5 Let K = I - J * 5 Let Ligne2$ = LEFT$("J*<C5>"+"C(K)"+"16*<espace>",16) Gosub Affilcd 'Affichage des 2 lignes Loop 'Bouclage sur la boucle infinie End '****************************************************************************** '* Sous routines * '***************** ' AffiLCD : Affichage de deux lignes de 16 caractères ' --------------------------------------------------- SUB Affilcd <Positione Curseur en début de la première ligne> <Affiche Ligne1$ sur l'afficheur LCD> <Positione Curseur en début de la deuxième ligne> <Affiche Ligne2$ sur l'afficheur LCD> ENDSUB '*******************************************************************************