Hola a todos. Solicito su ayuda, por favor, con el siguiente problema. Estoy desplegando el contenido de las variables "Hour" y "Minute" en displays INDIVIDUALES de 7 segmentos . Divido ambas variables en dos variables cada una, de manera que tengo dos dígitos para la hora, a los que llamo "HRS_DER" y "HRS_IZQ"; también la variable de los minutos la separo en dos dígitos a los que he llamado "MIN_DER" y "MIN_IZQ". Cada una de estas últimas variables las envío a un display individual de 7 segmentos. Hasta ahí todo funciona bien, pero ahora deseo reducir los cuatro display individuales de 7 segmentos a DOS DISPLAYS DOBLES DE 7 SEGMENTOS, un display doble para la hora y el otro para los minutos. El problema es que las instrucciones que me sirven para desplegar cada dígito por separado en un display individual no funcionan para DISPLAYS DOBLES. Ya he probado las ideas que se me han ocurrido, pero no logro hacerlo. Por favor, ¿alguien puede decirme cuales son las instrucciones correctas? Anexo el código en PBP que funciona para cuatro displays individuales. De antemano, mil gracias.
Código:
; EL SIGUIENTE PROYECTO ES UN RELOJ DIGITAL CON PIC 16F628A, DISPLAYS DE 7 SEGMENTOS Y BOTONES PARA
; AJUSTE DE HORAS Y MINUTOS
CMCON=7
define OSC 4
Symbol Hrs_button = PORTA.0 ; BOTON DE AJUSTE PARA HORAS
Symbol Mins_button = PORTA.1 ; BOTON DE AJUSTE PARA MINUTOS
Ticks VAR byte ; 61 ticks = 1 sec
Hour VAR byte
Minute VAR byte
Second VAR byte
Disp VAR byte ; Disp = 1 to ACTULIZA DISPLAYS
Delay VAR byte
TRISB = 0 ; PORTB is SALIDA
TRISA = 3 ; RA0,RA1 SON ENTRADAS
;VARIABLES A DESPLEGAR
MIN_DER VAR BYTE ;VARIABLE PARA DESPLEGAR EL MINUTO DEL LADO DERECHO
MIN_IZQ VAR BYTE ;VARIABLE PARA DESPLEGAR EL MINUTO DEL LADO IZQUIERDO
HRS_DER VAR BYTE ;VARIABLE PARA DESPLEGAR LA HORA DEL LADO DERECHO
HRS_IZQ VAR BYTE ;VARIABLE PARA DESPLEGAR LA HORA DEL LADO IZQUIERDO
; INICIALIZAR VARIABLES
Hour = 0
Minute = 0
Second = 0
Ticks = 0
MIN_DER = 0
MIN_IZQ = 0
HRS_DER = 0
HRS_IZQ = 0
OPTION_REG = $05 ; prescaler = 64
ON INTERRUPT GOTO ISR ; IR A RUTINA ISR
INTCON = $A0
;INICIO DEL PROGRAMA
PROG:
;RUTINA PARA CHEQUEAR EL INCREMENTO DEL BOTÓN HORA CUANDO ES ACCIONADO
IF Hrs_button = 0 THEN
Hour = Hour + 1
IF Hour = 24 THEN Hour = 0
Gosub Antirrebote
ENDIF
;RUTINA PARA CHEQUEAR EL INCREMENTO DEL BOTON MINUTO CUANDO ES ACCIONADO
IF Mins_button = 0 THEN
Minute = Minute + 1
IF Minute = 60 THEN Minute = 0
Gosub Antirrebote
ENDIF
;RUTINA PARA MOSTRAR VALORES DE H:M:S
IF Disp = 1 THEN
MIN_DER = Minute DIG 0
MIN_IZQ = Minute DIG 1
HRS_DER = Hour DIG 0
HRS_IZQ = Hour DIG 1
PORTB=224+MIN_DER
PAUSE 50
PORTB=208+MIN_izq
PAUSE 50
PORTB=176+HRS_DER
PAUSE 50
PORTB=112+HRS_IZQ
PAUSE 50
Disp = 0
ENDIF
GOTO PROG
;RUTINA ANTIRREBOTE
Antirrebote:
FOR Delay = 1 To 200
Pause 1
NEXT Delay
Disp = 1
RETURN
;RUTINA PARA EJECUCION DE UN SEGUNDO
DISABLE
ISR:
Ticks = Ticks + 1
IF Ticks < 61 THEN NoUpdate
;RUTINA DE TIEMPO SEGUNDO , MINUTO Y HORAS
Ticks = 0
Second = Second + 1
IF Second = 60 THEN
Second = 0
Minute = Minute + 1
IF Minute = 60 THEN
Minute = 0
Hour = Hour + 1
IF Hour = 24 THEN
Hour = 0
ENDIF
ENDIF
ENDIF
Disp = 1
; RUTINA DE LA CULMINACION DEL TIEMPO DE ACTIVACION
NoUpdate:
INTCON.2 = 0
Resume
ENABLE
END
END