'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

'*******************************************************************************