;**************************** Librería "DISPLAY_7S.INC **********************************
;
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. wwww.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================
;
; Subrutinas para convertir un código ASCII en su valor equivalente en 7 segmentos y así
; poder activar displays.
;
; Si el código ASCII es menor que el signo más '+' o mayor que la letra zeta 'Z' obtiene
; el código erróneo b'10000000' para encender sólo el punto decimal del display.
;
; Si se trata de un número hay que ejecutar la subrutina "Numero_a_7Segmentos" que convierte
; un numero (de 0 a 9) en su equivalente en código de 7 segmentos.
;
; Entrada: En registro W, el dato en código ASCII a convertir.
; Salida : En registro W, el código 7 segmentos.
CBLOCK
Display7s_Dato ; Aquí se reservará el valor del dato de entrada.
ENDC
Numero_a_7Segmentos
andlw b'00001111' ; Se queda con el nibble bajo.
addlw '0' ; Se pasa a ASCII sumándole el valor ASCII
; del "0" y ejecuta "ASCII_7_Segmentos".
ASCII_a_7Segmentos
movwf Display7s_Dato ; Guarda el valor del carácter.
sublw ' ' ; Comprueba si es " " (espacio).
btfsc STATUS,Z ; ¿Es distinta de " " (espacio)?, ¿Z=0?
retlw 00h ; Es " ". Devuelve el código 7-Segmentos del " ".
movf Display7s_Dato,W ; Recupera el valor del dato de entrada.
sublw 'Ñ' ; Comprueba si es "Ñ".
btfsc STATUS,Z ; ¿Es distinta de "Ñ"?, ¿Z=0?
retlw 55h ; Es "Ñ". Devuelve el código 7-Segmentos de "Ñ".
movf Display7s_Dato,W ; Recupera el valor del dato de entrada.
sublw 'º' ; Comprueba si es "º".
btfsc STATUS,Z ; ¿Es distinta de "º"?, ¿Z=0?
retlw 63h ; Es "º". Devuelve el código 7-Segmentos de "º".
;
movf Display7s_Dato,W ; Comprueba si el código ASCII es mayor que la "Z".
sublw 'Z' ; (W)='Z'-(Display7s_Dato)
btfss STATUS,C ; ¿C=1?, ¿(W) positivo?, ¿'Z'>=(Display7s_Dato)?
retlw b'10000000' ; Si el código ASCII es mayor que 'Z' es un error.
movlw '+' ; Averigua en qué orden está el carácter leído
subwf Display7s_Dato,W ; dentro de la tabla de conversión, respecto del
btfss STATUS,C ; primero que es '+'.
retlw b'10000000' ; Si el código ASCII es menor que '+' es un error.
;
addwf PCL,F ; Obtiene el código 7 segmentos.
InicioTablaASCII
DT 46h, 04h, 40h, 80h, 00h, 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh ; Signos y
DT 7Dh, 07h, 7Fh, 67h, 41h, 88h, 00h, 48h, 00h, 00h, 00h ; números.
DT 77h, 7Ch, 39h, 5Eh, 79h, 71h, 6Fh, 76h, 19h, 1Eh, 7Ah, 38h, 37h ; Letras.
DT 54h, 3Fh, 73h, 67h, 50h, 6Dh, 78h, 1Ch, 3Eh, 1Dh, 70h, 6Eh, 49h
FinTablaASCII
;
; Esta es la tabla para la visualización en display de siete segmentos (Ver figura 11-3).
IF (FinTablaASCII > 0xFF)
ERROR "¡CUIDADO!: La tabla ha superado el tamaño de la página de los"
MESSG "primeros 256 bytes de memoria ROM. NO funcionará correctamente."
ENDIF
; ===================================================================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. www.pic16f84a.com
; Editorial Ra-Ma. www.ra-ma.es
; ===================================================================