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
Tags
littérature btfsc movlw ;============================================================================= #define returnDocuments similaires










-
27
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Apv 18, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.0325MB