Ayuda!! Cargar números en displays

#1
Tengo que resolver un programa, lo que pasa soy incapaz de hacerlo, os enseño el esquema.


El caso es que tengo que cargar un nº en esos display, concretamente el 2048, el caso es que soy capaz de cargar un solo número, pongo las instrucciones adecuadas, la tabla con los segmentos a encender y ya, muy fácil pero ya no se como continuar desde ese punto.

He visto por San Google que tengo que poner las rutinas de retardo, darle a los displays una frecuencia determinada para que el ojo no capte el parpadeo de la frecuencia, etc... pero son todo variantes de este y la verdad es que estoy echo un lío.

A ver si podeís echarme una mano o mejor dicho, un brazo.

Gracias.
 

Adjuntos

#2
Es simple:

1.- Puerto B = dato display1
2.- BitA display1 = 1
3.- Esperas 8mS
4.- Puerto B = dato display2
5.- BitA display2 = 1
6.- Esperas 8mS
7.- .....
y asi sucesivamente, despues repites desde el inicio... a la tecnica se le conoce como "multiplexado de displays"
 
#3
Actualizo--> Ya lo tengo, os lo enseño.

Código:
;Diseña un programa que muestre el nº 2011 en cuatro displays conectados al puerto B (multiplexados)

LIST P=16F84A
INCLUDE<P16F84A.INC>

ORG	0


INICIO		;Configuracion de puertos

	bsf	STATUS,RP0	;entro en el banco 1
	clrf	TRISB	;configuro como salidas los puertos A y B
	clrf	TRISA

	bcf	STATUS,RP0	;vuelvo al banco 0
	clrf PORTA 		;pongo a 0 los puertos A y B por si no lo estuvieran
	clrf PORTB



PRINCIPAL

	bsf PORTA, 	RA0				;Activamos el transistor del primer display
	movlw .2 					;cargo el 2 en decimal
	call Conversion_7segmentos	;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
	movwf PORTB					;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
	call Retardo_20ms			;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
	bcf PORTA, RA0				;Desactivamos el transistor del primer display

	bsf PORTA, RA1				;Activamos el transistor del segundo display
	movlw .0 					;cargo el 0 en decimal
	call Conversion_7segmentos	;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
	movwf PORTB					;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
	call Retardo_20ms			;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
	bcf PORTA, RA1				;Desactivamos el transistor del segundo display

	bsf PORTA, RA2				;Activamos el transistor del tercer display
	movlw .4 					;cargo el 4 en decimal
	call Conversion_7segmentos	;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
	movwf PORTB					;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
	call Retardo_20ms			;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
	bcf PORTA, RA2				;Desactivamos el transistor del tercer display

	bsf PORTA, RA3				;Activamos el transistor del cuarto display
	movlw .8 					;cargo el 8 en decimal
	call Conversion_7segmentos	;Llamamos a la funcion o rutina que obtiene las salidas activas para el numero que queremos representar en el registro W
	movwf PORTB					;recupero el valor de W que contiene los puertos que tienen que estar activados y los carga en PORTB
	call Retardo_20ms			;Llamo a la funcion de retardo de 20 ms del fichero RETARDOS.INC
	bcf PORTA, RA3				;Desactivamos el transistor del cuarto display

	goto PRINCIPAL				;Volvemos a empezar a hacer el bucle

Conversion_7segmentos

	addwf PCL, F ; cargo a PCL, su valor actual y el del numero que quiero tener en el display
	
	retlw 3Fh	;Codigo 7 segmentos para el "0"
	retlw 06h	;Codigo 7 segmentos para el "1"
	retlw 5Bh	;Codigo 7 segmentos para el "2"
	retlw 4Fh	;Codigo 7 segmentos para el "3"
	retlw 66h	;Codigo 7 segmentos para el "4"
	retlw 6Dh	;Codigo 7 segmentos para el "5"
	retlw 7Dh	;Codigo 7 segmentos para el "6"
	retlw 07h	;Codigo 7 segmentos para el "7"
	retlw 7Fh	;Codigo 7 segmentos para el "8"
	retlw 67h	;Codigo 7 segmentos para el "9"


INCLUDE <RETARDOS.INC>

END
 
Última edición:
#4
Hola


No havia visto la modificacion hecha
Tienes que activar el transistor del display despues de tener el dato cargado en PORTB
Visualizaras el 2048

Un saludo
 
Última edición:

Temas similares

Arriba