Overblog
Editer la page Suivre ce blog Administration + Créer mon blog

Minuterie compteuse décompteuse LCD 2X16c et picaxe 14M2

Suite à l'essai concluant de l'afficheur LCD économique DEM 16209 FGH-PW .

Retrouvez cette page
et toutes les mises à jour
sur

 

Je l'ai adapté à la minuterie à afficheur LED décrite dans ce blog.

En fait, tous les afficheurs LCD  de type HD 44780 (1602) conviennent. 

 

  Avantages:

 

Affichage plus riche,

Typon simplifié

 

Inconvénients:

 

Je n'en vois pas,  même pas le prix!

 

 

 

Voici le schéma: (cliquez dessus pour agrandir).

 

 

 

    Minuterie LCD 1602 Picaxe14M2 

   Quelques photos de la maquette:

 

On affiche par 2 potentiomètres le temps voulu, de 0 à 59mn 59 s, une valeur à changer dans le logiciel pour modifier ce temps max, jusqu'à 99mn 59 s.

 

Ce temps s'affiche sur la première ligne. 

 

 

Minuterie alpha Picaxe 14M2 001 

 

 

 

On appuie sur ON/OFF.

 

Le temps décompté apparait sur la seconde ligne.

 

La diode rouge s'allume

Lorsque le décompte passe à 0, la diode s'éteint, un beep, et retour à la photo ci dessus.

 

En affichant 00:00, nous avons un compteur. ON/OFF pour démarrer, la lumière s'allume, le temps s'affiche. ON/OFF, la lumière s'éteint.

 

 

 

Minuterie alpha Picaxe 14M2 002

 

 

Dans le noir complet:

 

Le rétroéclairage blanc est agréable et très efficace. Avec 4mA dans la diode, la lisibilité reste parfaite.

 

 

Minuterie alpha Picaxe 14M2 004 

 

  Voici le code:

 

Le fichier .bas original en téléchargement ICI est beaucoup plus lisible et mieux commenté.  A ouvrir dans le "Picaxe programming editor", c'est mieux, en couleurs! 

 

 

 

   ' MINUTERIE LCD ALPHANUMERIQUE ET PICAXE 14M2

 #picaxe14M2 'directive 14M2
 
 setfreq m16 '4 ou 16 MHz pour la variable time.
   'le LCD fonctionne sur les 2 fréquences !!
   
 dirsB=%111111 'défini les ports B en sorties
 dirsC=%000110 'idem I/O ports C
 
 SYMBOL  RS        = B.0         ; 0 = Command   1 = Data
 SYMBOL  E         = B.1         ; 0 = Idle      1 = Active
 SYMBOL  DB4       = B.2         ; LCD Data Line 4
 SYMBOL  DB5       = B.3         ; LCD Data Line 5
 SYMBOL  DB6       = B.4         ; LCD Data Line 6
 SYMBOL  DB7       = B.5         ; LCD Data Line 7
 SYMBOL  RSCMDmask = %00000000 ; Select Command register
 SYMBOL  RSDATmask = %00000001 ; Select Data register
 SYMBOL  cpt       = b1
 SYMBOL  car  = b2
 SYMBOL  rsbit     = b3

  
 'Nibble commands - To initialise 4-bit mode
 
 DATA 0,( $33 )    ; %0011---- %0011----   8-bit / 8-bit
 DATA 1,( $32 )    ; %0011---- %0010----   8-bit / 4-bit
 
 'Byte commands - To configure the LCD
  
 DATA 2,( %00101000 )    ;  %001LNF00   Display Format
 DATA 3,( %00001100 )    ;  %00001DCB   Display On
 DATA 4,( %00000110 )    ;  %000001IS   Cursor Move
 ‘                            ; L : 0 = 4-bit Mode    1 = 8-bit Mode
 ‘                            ; N : 0 = 1 Line        1 = 2 Lines
 ‘                            ; F : 0 = 5x7 Pixels    1 = N/A
 ‘                            ; D : 0 = Display Off   1 = Display On
 ‘                            ; C : 0 = Cursor Off    1 = Cursor On
 ‘                            ; B : 0 = Cursor Steady 1 = Cursor Flash
 ‘                            ; I : 0 = Dec Cursor    1 = Inc Cursor
  ‘                           ; S : 0 = Cursor Move   1 = Display Shift
 DATA 5,( $01 )    ; Clear Screen
  
 
PowerOnReset:

 FOR cpt = 0 TO 5
  READ cpt,car
  GOSUB SendInitCmdByte
 NEXT 
 
 
'*********************** DEBUT PROGRAMME PERSO ************

 DATA 6,("TOTAL: ") 'Texte sur l'afficheur
 DATA 13,("RESTE: ")
 
 symbol nmn  = b4
 symbol nsec  = b5
 symbol dsec  = b6
 symbol usec  = b7
 symbol ndmn  = b8

 symbol memOnOff  = b9
 symbol temps = w10
 symbol tsec  = w11
 symbol pousOnOff = pinC.3
 symbol lum  = C.1  'lum =1 :allumage fluos
 

 
debut:
 low lum  'sortie lum=0
 readadc C.0,nmn 'lecture position minutes 
 nmn=59*nmn/255 'calcul nbre minutes: 59=minutes max affichables
 readadc C.4,nsec 'lectuere position secondes
 nsec=59*nsec/255 'calcul secondes
 tsec=60*nmn+nsec 'temps total en secondes  
 temps=tsec
 
 gosub conver
 gosub ligne1
 gosub ecrit  
 pause 10

'Les lignes en rouges sont maladroites et peuvent être remplacées par celles en vert dans le programme téléchargé.
 if pousOnOff=1 and tsec <>0 then  'temps <>0 ->départ décompte
   pause 10
stb:   if pousOnOff =0 then decompt 'attente relachement bouton
   goto stb  
 end if
        
 if pousOnOff=1 and tsec =0 then   'temps =0 ->départ comptage
   pause 10
stb2:   if pousOnOff=0 then compt 'attente relachement bouton 
   goto stb2
 end if 

 

#rem

 

If poussOnOff=1 then  'Ah!, on a appuyer sur le poussoir

   Do: Loop while pousOnOff=1 'Attente relachement poussoir

   pause 10 'antirebond 

   If tsec=0 then goto compt  'temps=0, on compte

              else goto decompt   'temps<>0, on décompte

endif

#endrem 

  

 
decompt: 
 high lum  'allumage lumière
 time=0   
   
 do while temps<>0
 
  temps=tsec-time
  gosub ligne2  
  gosub conver  
  gosub ecrit 
     
 loop     'boucle tant que temps <>0
 
 low lum   'extinction lumière
 sound C.2,(119,80) 'beep (119 à 16Mz, 125 à 4Mz) suivant buzzer
 gosub efface
 
 goto debut   'retour
 
compt: 
 high lum   'allumage lumière
 tsec=3600
 time=0
 
 do while tsec>time 'arret au bout de 1 heure ou RAZ
 
  temps=time
  gosub ligne1  
  gosub conver  
  gosub ecrit

   
 loop    'fin boucle

 
 low lum   'extinction lumière
 sound C.2 ,(119,80) 'beep (119 à 16Mz, 125 à 4Mz) suivant buzzer
 
 goto debut
 
conver: 'Ici, on décompose en diz de mn,mn,diz de sec et sec

         'puis +48 pour le code ascii 
   
 gosub raz   'Pour arrêter
 nmn=temps/60  'Min  décomposition du temps total en Minutes
 ndmn=nmn/10+48  'diz de minutes
 nmn=nmn//10+48  'minutes
    
 nsec=temps//60  'secondes restantes  
 dsec=nsec/10+48  'DSec  Dizaines de secondes
 usec=nsec//10+48  'USec  Unités de secondes
    
 return 
 
ligne1: 'position du curceur ligne 1 et ecriture du label

 car= $80 | $00 'curseur début ligne1
 gosub SendCmdByte
   
 FOR cpt = 6 TO 12 'lecture texte ligne1 "TOTAL"
  READ cpt,car
  GOSUB SendDataByte
 NEXT
 
 return
 
 
ligne2: 'idem ligne 1

 car= $80 | $40 'curseur début ligne2 
 gosub SendCmdByte
 
 FOR cpt =13 TO 19 'lecture texte ligne2 "RESTE"
  READ cpt,car
  GOSUB SendDataByte
 NEXT
 
 return
  
 
ecrit:  'on écrit de gauche à droite
 
 car=ndmn  'affichage diz de minutes 
 GOSUB SendDataByte
 
 car=nmn  'affichage minutes
 GOSUB SendDataByte
 
 car=":"  'position separateur
 GOSUB SendDataByte
 
 car=dsec  'affichage diz de secondes 
 GOSUB SendDataByte
 
 car=usec  'affichage secondes 
 GOSUB SendDataByte
 
 return
 
Raz: 'Ne fonctionne qu'au relachement du poussoir
 if pousOnOff=1 then  
  memOnOff=1 'memo appui
  return
 endif

 
 if pousOnOff=0 and memOnOff=1 then 'RAZ seulement si appui
  memOnOff=0
  gosub efface
  goto debut  
 end if 
 return

 
efface:
 READ 5,car 'effacement écran
 GOSUB SendInitCmdByte
 return     
  
 
 '******************************* FIN PROGRAMME PERSO **************

 
SendInitCmdByte:
 
 PAUSE 15                        ; Delay 15mS 
 
SendCmdByte:
 
 rsbit = RSCMDmask               ; Send to Command register
 
SendDataByte:
 
 pinsB = car & $F0 / 4 | rsbit   ; Put MSB out first
  PULSOUT E,1                     ; Give a 10uS pulse on E
 
 pinsB = car & $0F * 4 | rsbit   ; Put LSB out second
 PULSOUT E,1                     ; Give a 10uS pulse on E
   
 rsbit = RSDATmask               ; Send to Data register next
 
 RETURN

 

 

Partager cette page
Repost0
Pour être informé des derniers articles, inscrivez vous :