1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
;Les routines liées à l'utilisation du LCD
;L'horloge du LCD (E)
LCD_Top
call Attente_2ms ;Attendre 2 ms
bcf LCD_E ;E = 0
call Attente_2ms ;Attendre 2 ms
bsf LCD_E ;E = 1 (Affichage actualisé)
return
;Initialisation du LCD
LCD_Init
bsf LCD_E ;E = 1
bcf LCD_RS ;RS = 0 -> Mode commande
;Ici on force l'afficheur 3 fois en mode 8 bits puis on bascule sur le mode 4 bits
movlw B'00000011' ;(0000 0010) Demande du mode 8 bit
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00000011' ;(0000 0010) Demande du mode 8 bit
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00000011' ;(0000 0010) Demande du mode 8 bit
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00000010' ;(0000 0010) Demande du mode 4 bit
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
;Fin de la routine de forçage au mode 4 bits
movlw B'00000010' ;(0000 0010) Demande du mode 4 bit
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00001000' ;(0000 1000) Affichage 5*7
movwf PORTB ;Dans le port B (Quartet le plus faible)
call LCD_Top ;Actualisation
movlw B'00000000' ;(0000 0000) Inutilisé
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00000001' ;(0000 0001) Efface l'écran
movwf PORTB ;Dans le port B (Quartet le plus faible)
call LCD_Top ;Actualisation
movlw B'00000000' ;(0000 0000) Inutilisé
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00001100' ;(0000 1110) Affichage ON, Curseur non visible et pas de clignotement
movwf PORTB ;Dans le port B (Quartet le plus faible)
call LCD_Top ;Actualisation
movlw B'00000000' ;(0000 0000) Inutilisé
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00000110' ;(0000 0110) Déplacement des caractères vers la droite
movwf PORTB ;Dans le port B (Quartet le plus faible)
call LCD_Top ;Actualisation
bsf LCD_RS ;RS = 1 -> Mode écriture
return
;Envoie une lettre sur le LCD
LCD_Write
movwf vartemp1 ;Charge dans vartemp1 le contenu de w qui est une lettre au format ASCII
movwf vartemp2 ;Charge dans vartemp2 le contenu de w qui est une lettre au format ASCII
swapf vartemp1, f ;On inverse les quartets dans vartemp1 et on les replace dans vartemp1
;B7 B6 B5 B4 | B3 B2 B1 B0 deviens B3 B2 B1 B0 | B7 B6 B5 B4
movlw B'00001111' ;Charge le masque B'00001111' dans w
andwf vartemp1, f ;Applique le masque (valeur dans w) sur vartemp1 et stock dans vartemp1 0000 | B7 B6 B5 B4
movf vartemp1, w ;Charge dans w le contenu de vartemp1
movwf PORTB ;Ecrit ce qui est dans w sur le port B
call LCD_Top ;Actualisation de l'affichage
movlw B'00001111' ;Charge le masque B'00001111' dans w
andwf vartemp2, f ;Applique le masque (valeur dans w) sur vartemp2 et stock dans vartemp2 0000 | B3 B2 B1 B0
movf vartemp2, w ;Charge dans w le contenu de vartemp1
movwf PORTB ;Ecrit ce qui est dans w sur le port B
call LCD_Top ;Actualisation de l'affichage
return
;Envoie une position sur le LCD
LCD_Position
bcf LCD_RS ;RS = 0, On passe en mode commande
movwf vartemp1 ;Charge dans vartemp1 le contenu de w qui est une position au format 8 bits
movwf vartemp2 ;Charge dans vartemp2 le contenu de w qui est une position au format 8 bits
swapf vartemp1, f ;On inverse les quartets dans vartemp1 et on les replace dans vartemp1
;B7 B6 B5 B4 | B3 B2 B1 B0 deviens B3 B2 B1 B0 | B7 B6 B5 B4
movlw B'00001111' ;Charge le masque B'00001111' dans w
andwf vartemp1, f ;Applique le masque (valeur dans w) sur vartemp1 et stock dans vartemp1 0000 | B7 B6 B5 B4
movf vartemp1, w ;Charge dans w le contenu de vartemp1
movwf PORTB ;Ecrit ce qui est dans w sur le port B
call LCD_Top ;Actualisation de l'affichage
movlw B'00001111' ;Charge le masque B'00001111' dans w
andwf vartemp2, f ;Applique le masque (valeur dans w) sur vartemp2 et stock dans vartemp2 0000 | B3 B2 B1 B0
movf vartemp2, w ;Charge dans w le contenu de vartemp1
movwf PORTB ;Ecrit ce qui est dans w sur le port B
call LCD_Top ;Actualisation de l'affichage
bsf LCD_RS ;RS = 1, On passe en mode écriture
return
;Efface l'écran
LCD_Clear
bcf LCD_RS ;RS = 0, On passe en mode commande
movlw B'00000000' ;(0000 0000) Inutilisé
movwf PORTB ;Dans le port B (Quartet le plus fort)
call LCD_Top ;Actualisation
movlw B'00000001' ;(0000 0001) Efface l'écran
movwf PORTB ;Dans le port B (Quartet le plus faible)
call LCD_Top ;Actualisation
bsf LCD_RS ;RS = 1, on passe en mode écriture
return |
Partager