Display Multiplexado
Display Multiplexado
Display Multiplexado
+5V +5V VDD MCLR +5V 10K BOTON 2 RB5 +5V BOTON 1 10K RB4 20pF 4MHz 20pF PIC16F84 OSC1 OSC2 RB0 VSS RB3 2.7K RB2 RB1 2.7K 2.7K RA3 RA2 RA1 RA0 D C B A 16 g f e d 7448 c b a 3 8 200 g f e d c b a 2N3904 2N3904 2N3904 2N3904 Displays de ctodo comn dig3 dig2 dig1 dig0
2.7K
equ equ equ equ equ equ equ equ equ org goto
03h 05h 06h 85h 86h 20h 21h 22h 23h 00 inicio 0dh d110 0eh ;retardo de milisegundos cargado desde afuera
movwf movlw movwf nop nop nop nop nop nop decfsz goto decfsz goto return movlw movwf call decfsz goto return clrf movf movwf
retarboton masboton
display
;rutina que carga cada dato en su respectivo display ;activando el transistor correspondiente en cada caso
bsf movlw call bcf movf movwf bsf movlw call bcf movf movwf bsf movlw call bcf movf movwf bsf movlw call bcf return
ptob,0 d3 retarms ptob,0 dig1,0 ptoa ptob,1 d3 retarms ptob,1 dig2,0 ptoa ptob,2 d3 retarms ptob,2 dig3,0 ptoa ptob,3 d3 retarms ptob,3
inicio
bsf movlw movwf movlw movwf bcf clrf clrf clrf clrf call btfsc goto call btfsc goto
status,5 b10000 trisa b11110000 trisb status,5 dig0 dig1 dig2 dig3 display ptob,4 ciclo1 retarboton ptob,4 ciclo1
ciclo1
;siempre refresca los displays ;pregunta por botn 1 ;retardo de 150 ms con display activado ;confirma lectura de botn ; ****** Inicia incremento de displays ;incrementa digito 0 ;pasa digito 0 a W ;prueba si el contador llego a 10 ;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro ;incrementa digito 1 ;pasa digito 1 a W ;prueba si el contador llego a 10 ;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro ;incrementa digito 2 ;pasa digito 2 a W ;prueba si el contador llego a 10
incf movf xorlw btfss goto clrf incf movf xorlw btfss goto clrf incf movf xorlw
dig0,1 dig0,0 d10 status,2 ciclo1 dig0 dig1,1 dig1,0 d10 status,2 ciclo1 dig1 dig2,1 dig2,0 d10
btfss goto clrf incf movf xorlw btfss goto clrf goto end
status,2 ciclo1 dig2 dig3,1 dig3,0 d10 status,2 ciclo1 dig3 inicio
;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro ;incrementa digito 3 ;pasa digito 3 a W ;prueba si el contador llego a 10 ;pregunta si es cierto ;si no ha llegado a diez vuelve a ciclo1 ;si llego a diez lo pone en cero e incrementa al otro ;puede ser a ciclo 1
_________________________________________________ _________________________________________________ Forma alternativa para leer el botn seria reemplazando la parte llamada ciclo1 ciclo1 call btfsc goto call call btfss goto display ptob,4 ciclo1 retarbot display ptob,4 espera ;siempre refresca los displays ;pregunta si botn 1 est en cero (oprimido) ;retardo de 100 ms con display activo ;pregunta si boton 1 est en uno (suelto) ;si no est suelto sigue esperando con display activo ;si lo sueltan, entonces sigue con los incrementos
espera