Anda di halaman 1dari 3

Display multiplexado - Ejemplo de contador ascendente de 0000 a 9999

+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

status ptoa ptob trisa trisb dig0 dig1 dig2 dig3

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

retarms otro2 otro

movwf movlw movwf nop nop nop nop nop nop decfsz goto decfsz goto return movlw movwf call decfsz goto return clrf movf movwf

0eh,1 otro 0dh,1 otro2

retarboton masboton

d10 0ch display 0ch,1 masboton

;retardo de 100 milisegundos con display activo

display

ptob dig0,0 ptoa

;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

; ****** Programa Principal

;inicio con displays en ceros

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

Anda mungkin juga menyukai