CONFIG_LCD EQU 0x7F ; variable de stockage temporaire de l' tat des ports  LCD

CONFIG_LCD EQU 0x7F ; variable de stockage temporaire de l' tat des ports  LCD_LINE0 EQU 0x00 ; Constante de la premi re ligne  LCD_LINE1 EQU 0x40 ; Constante de la deuxi me ligne  LCD_LINE2 EQU 0x014 ; Constante de la troisi me ligne  LCD_LINE3 EQU 0x054 ; Constante de la quatri me ligne  IFDEF __16F628 MESSG "On utilise la MAQUETTE PIC16F628"  #DEFINE LCD_D4 PORTB,4 ; Donn es LCD sur Port B  #DEFINE LCD_D5 PORTB,5 ; Donn es LCD sur Port B  #DEFINE LCD_D6 PORTB,6 ; Donn es LCD sur Port B  #DEFINE LCD_D7 PORTB,7 ; Donn es LCD sur Port B  #DEFINE LCD_EN PORTB,0 ; LCD Enable sur RB0 #DEFINE LCD_RW PORTA,4 ; LCD Read/Write sur RA4 #DEFINE LCD_RS PORTA,6 ; LCD Register-Select sur RA6 ENDIF IFDEF __16F877 MESSG "On utilise la MAQUETTE PIC16F877"  #DEFINE LCD_D4 PORTB,4 ; Donn es LCD sur Port B  #DEFINE LCD_D5 PORTB,5 ; Donn es LCD sur Port B  #DEFINE LCD_D6 PORTB,6 ; Donn es LCD sur Port B  #DEFINE LCD_D7 PORTB,7 ; Donn es LCD sur Port B  #DEFINE LCD_EN PORTC,0 ; LCD Enable sur RB0 #DEFINE LCD_RW PORTC,1 ; LCD Read/Write sur RC1 #DEFINE LCD_RS PORTC,2 ; LCD Register-Select sur RC2 ENDIF ;***************************************************************************** ; Routines : ; LCD_Init : initialisation du module LCD ; LCD_Clear : Effa age de l' cran LCD TEMP0, TEMP1   ; LCD_Home : Retour gauche TEMP0, TEMP1  ; LCD_Offset(W) : Positionnement du curseur TEMP0, TEMP1 ; LCD_Affiche (String, Length) : Macro pour l'affichage TEMP0, TEMP1, TEMP2 ; LCD_Space : Ecriture d'un espace TEMP0, TEMP1 ; LCD_Txt(W) : Ecriture d'un carat re ASCII TEMP0, TEMP1  ; LCD_Dec(W) : Ecriture d'un carat re (d cimal) TEMP0, TEMP1, TEMP2,   TEMP3 ; LCD_Hex(W) : Ecriture d'un carat re hexad cimal) TEMP0, TEMP1, TEMP2   ; LCD_Bin(W) : Ecriture d'un carat re (binaire) TEMP0, TEMP1, TEMP2,  TEMP3 ; ; routines internes ; LCD_Busy : boucle tant que le module LCD est occup TEMP0  ; LCD_Cmd(W) : Ecriture d'une commande TEMP0, TEMP1 ; LCD_Nybble(W) : Envoi d'un digit (4 bits) au LCD TEMP0 ;***************************************************************************** ; Sous-Programmes ; ;============================================================================= ; LCD_Init ; Initialisation du module LCD ; appel des proc dures : Delay, LCD_Nybble, LCD_Clear et LCD_Cmd  ; registre modifi : TEMP0, TEMP1 (LCD_Cmd)  ;============================================================================= LCD_Init call LCD_Push bcf LCD_RS ; Choix des registres LCD movlw d'150' ; Attendre au moins 15 ms call Delay_100 s  movlw b'00110000' ; Function set call LCD_Nybble movlw d'41' ; Attendre au moins 4,1 ms call Delay_100 s  movlw b'00110000' ; Function set call LCD_Nybble movlw d'1' ; Attendre au moins 100 s  call Delay_100 s  movlw b'00110000' ; Function set call LCD_Nybble movlw d'1' ; Attendre au moins 100 s  call Delay_100 s  movlw b'00100000' ; S lection de l'interface 4 bits : -- 0 0 1 0 0 0  0 0 call LCD_Nybble movlw d'1' ; Attendre au moins 100 s  call Delay_100 s  call LCD_Pop movlw b'00101000' ; Fonction : -- 0 0 1 DL N F X X call LCD_Cmd movlw b'00001000' ; Turn off Display -- 0 0 0 0 1 0 0 0 call LCD_Cmd call LCD_Clear ; Effacement de l'afficheur movlw b'00000110' ; Mode "Entry" : -- 0 0 0 0 0 1 ID S call LCD_Cmd movlw b'00001100' ; Contr le Display On/Off : -- 0 0 0 0 1 D C B  call LCD_Cmd return ;============================================================================= ; LCD_Clear ; Effa age du LCD et retour du curseur l'origine   ; appel de la proc dure : LCD_Cmd  ; registres modifi s : TEMP0, TEMP1 (LCD_Cmd)  ;============================================================================= LCD_Clear MOVLW 0x001 CALL LCD_Cmd RETURN ;============================================================================= ; LCD_Home ; Retour du curseur l'origine  ; appel de la proc dure : LCD_Cmd  ; registres modifi s : TEMP0, TEMP1 (LCD_Cmd)  ;============================================================================= LCD_Home MOVLW 0x002 CALL LCD_Cmd RETURN ;============================================================================= ; LCD_Offset (W) ; D finition de l'adresse Display-Data-RAM  ; les donn es DDRAM sont lues apr s cette op ration    ; L'adresse DDRAM doit se trouver dans W : ; b0-6 : adresse DDRAM ; b7 : x ; appel de la proc dure : LCD_Cmd  ; registre modifi : TEMP0, TEMP1 (LCD_Cmd)  ;============================================================================= LCD_Offset IORLW 0x080 ; d finition de la fonction  CALL LCD_Cmd RETURN ;============================================================================= ; LCD_Txt (W) ; Affichage d'un caract re sur le LCD  ; Le caract re doit se trouver dans W  ; appel des proc dures : LCD_Busy et LCD_Nybble  ; registres modifi s : TEMP0 (LCD_Busy et LCD_Nybble) et TEMP1  ;============================================================================= LCD_Space MOVLW " " LCD_Txt call LCD_Push movwf TEMP1 ; Sauvergarde de W LCD_TxtLoop call LCD_Busy ; V rification de la disponibilit du LCD   andlw 0x80 btfss STATUS, Z goto LCD_TxtLoop ; boucle en cas de module LCD occup bsf LCD_RS ; S lection du registre de donn es   bcf LCD_RW ; C'est un ordre d' criture du LCD  movf TEMP1, w ; R cup ration de W   call LCD_Nybble ; Envoi des 4 bits MSB swapf TEMP1, w call LCD_Nybble ; Envoi des 4 bits LSB call LCD_Pop return ;============================================================================= ; LCD_Dec ; Affichage d'un caract re sur le LCD sous forme d cimale   ; Le caract re doit se trouver dans W  ; appel de la proc dure : LCD_Txt  ; registres modifi s : TEMP0, TEMP1 (LCD_Txt), TEMP2 et TEMP3  ;============================================================================= LCD_Dec movwf TEMP1 movlw d'8' ; 8 bits movwf TEMP0 ; compteur de bits clrf TEMP2 ; clear result area clrf TEMP3 bin2 movlw 0x33 addwf TEMP2,f ; ajout de 3 chaque digit  btfsc TEMP2,3 ; si le r sultat est sup rieur 7 (digit LSB),    andlw 0xf0 ; alors on enl ve 3 (digit LSB)  btfsc TEMP2,7 ; si le r sultat est sup rieur 7 (digit MSB),    andlw 0x0f ; alors on enl ve 3 (digit LSB)  subwf TEMP2,f ; On enl ve le trop plein  movlw 0x33 addwf TEMP3,f ; ajout de 3 chaque digit  btfsc TEMP3,3 ; si le r sultat est sup rieur 7 (digit LSB),    andlw 0xf0 ; alors on enl ve 3 (digit LSB)  btfsc TEMP3,7 ; si le r sultat est sup rieur 7 (digit MSB),    andlw 0x0f ; alors on enl ve 3 (digit LSB)  subwf TEMP3,f ; On enl ve le trop plein  rlf TEMP1,f ; On lit le bit suivant rlf TEMP3,f ; et on le range dans les registres BCD rlf TEMP2,f decfsz TEMP0,f ; a-t'on fini ? goto bin2 ; non, alors on boucle movfw TEMP2 call Hex_ASCII movfw TEMP3 call LCD_Hex return ; fin ;============================================================================= ; LCD_Hex ; Affichage d'un caract re sur le LCD sous forme hexad cimale   ; Le caract re doit se trouver dans W  ; appel de la proc dure : LCD_Txt  ; registres modifi s : TEMP0, TEMP1 (LCD_Txt) et TEMP2  ;============================================================================= LCD_Hex movwf TEMP2 ; Sauvergarde de W swapf TEMP2, w ; R cup ration des 4 bits MSB de W   call Hex_ASCII ; Conversion du MSB en ASCII et affichage movf TEMP2, w ; R cup ration des 4 bits LSB de W   call Hex_ASCII ; Conversion du LSB en ASCII et affichage return Hex_ASCII andlw 0x0F addlw 0xF6 ; conversion en ASCII du digit LSB btfsc STATUS, C ; addlw 0x07 addlw 0x3A call LCD_Txt ; Envoi de la donn e ASCII au LCD  return ;============================================================================= ; LCD_Bin : ; Affichage d'un caract re sur le LCD sous forme Binaire  ; Le caract re doit se trouver dans W  ; appel de la proc dure : LCD_Txt  ; registres modifi s : TEMP0, TEMP1 (LCD_Txt), TEMP2 et TEMP3  ;============================================================================= LCD_Bin movwf TEMP2 ; Sauvergarde de W movlw 0x08 ; Chargement du compteur (8 bits) movwf TEMP3 LCD_Bin1 movlw "0" ; Pr paration d'un "0"  btfsc TEMP2, 7 ; Test du bit movlw "1" ; Pr paration d'un "1" si le bit test est    '1' call LCD_Txt ; Envoi du r sultat sur le LCD  rlf TEMP2, f ; Obtention du bit suivant decfsz TEMP3, f goto LCD_Bin1 return ;============================================================================= ;LCD_Affiche: ;Cette macro permet d'afficher une cha ne de caract res sur le LCD   ;utilisation : ; LCD_Affiche "Bonjour !", 9 ; LCD_Affiche " a va ?", 7  ; appel de la proc dure : LCD_Txt  ; registres modifi s : TEMP0, TEMP1 (LCD_Txt) et TEMP2  ;============================================================================= LCD_Affiche macro String, Length local Loop, Table, Finish movlw Length movwf TEMP2 Loop call Table call LCD_Txt decfsz TEMP2, f goto Loop goto Finish if ((high Table) != (high (Table+Length+4))) ERROR "Probl me de saut de page uploads/Litterature/ lcd.pdf

  • 27
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager