Está en la página 1de 42

PRACTICA 3

MULTIPLEXADO “MANEJO DE DISPLAYS DE MATRIZ DE PUNTOS”.


(ANIMACIÓN DE IMAGENES).

Equipo

• García de los Santos José Santiago

• González Sánchez Carlos David

• Vazquez Carrasco Fernando

6IM1
Objetivo

El alumno comprende la operación de los display matriciales así como su Manejo en el


despliegue de caracteres y animación de imágenes, esto por medio de barridos de una
frecuencia alta y con el control de la columnas y filas del display 5x7, esto para el efecto
de animación o movimiento del display.

Desarrollo Teórico

Animación de imágenes

El display matricial
consiste en una matriz de puntos luminosos arreglados en una configuración rectangular o
cuadrada en donde se pueden mostrar texto o gráficos encendiendo o apagando puntos
seleccionados de la matriz. El microcontrolador controla la matriz de puntos convirtiendo
las instrucciones de un procesador en señales que encienden o apagan los puntos de la
matriz de forma que se produce la visualización deseada.
Estos display según su tamaño puede variar el numero de columnas y filas, estas se
utilizan para controlar el display
el que utilizamos en la practica es un display matricial
5X7 por lo que tiene 5 columnas y 7 filas con un total
de 35 pixeles o puntos en toda la matriz.

Display físico

Diagrama del display


Creación de una imagen
Para crear una imagen debemos tomar en cuenta que se controla por filas y columnas, es
decir que para crear una letra o numero es imposible activando todos de una sola vez, por
lo que utilizamos un método de barrio.
El método consiste en activar una fila a la vez, una vez que la activemos procedemos a
seleccionar las filas que utilizaremos para el carácter, lo mantenemos por 2 ms y
procedemos a desactivar la columna 1, activamos la 2 y repetimos el proceso que
realizamos con las siguientes columnas y con ello realizaremos un ciclo.
En caso de este display tomaría 10 ms en que pasen todas las columnas por lo que el
display tendría una frecuencia de 100 Hz y eso hace que el ojo humano no note que los
pixeles se prenden y apagan constantemente dando la apariencia que el display siempre
se mantienen constantes.
Si durante el ciclo de un barrido completo o fotograma no existe algún cambio este dará el
efecto de una imagen, pero si este cambia contante entonces se convertirá en una
animación.

Codificación de los caracteres

Columnas

1 2 3 4 5
Para el siguiente ejemplo codificaremos el carácter “R” el cual será de la siguiente manera
Recordemos que las columnas se activan con 1, esto activa prende todos los leds, para
apagarlos solo debemos poner 1 en las filas que lo necesitemos.
Con esto en mente la fila para la activación de la columna una la salida de las filas
quedaría como:
00000000 (ya que todos se mantienen prendidos)
recordemos que los puertos B y C tienen 8 pines, además que solo utilizaremos 5 para las
columnas y 7 para las filas, así que no importa el valor que tenga los pines sobrantes.
Luego sacamos los valores de las siguientes columnas

1. 00000001

2. 01101111

3. 01100111

4. 01101011

5. 10011101

Con ello ya tenemos la salida del puerto que utilicemos para el control de las filas.

Como vemos es el circuito esquemático utilizaremos el puerto B para el control de las


columnas, y el puerto C para el control de las filas, por lo que solo usaremos dos puertos
de salida para el funcionamiento de este circuito.
Desarrollo práctico
“Mediciones con osciloscopio y multímetro de los puntos más
importantes de circuito”.

La salida de cada pin tiene un valor de “1” lógico que equivale a 5 volts, como lo
confirmamos en el voltímetro
Vemos el cambio de los valores de las columnas, como estas cambian
dependiendo que la columna que este seleccionada, ademas que se repite por un
periodo de tiempo

En las siguientes mediciones vemos como es el barrido de las columnas, como lo


habíamos mencionado en el desarrollo teórico de la práctica.
Diagrama Esquemático del Circuito
Imágenes de la simulacion del sistema.
Diagrama de flujo
Código
;INSTITUTO POLITECNICO NACIONAL.

;CECYT 9 JUAN DE DIOS BATIZ.

;MANEJO DE UNA LCD.

;GRUPO: 6IM1.

;INTEGRANTES:

;1.- Garcia De los santos Jose Santiago

;2.- Gonzales Sanchez Carlos David

; 3.- Vazquez Carrasco Fernando

;COMENTARIO DE LO QUE EL PROGRAMA EJECUTARA.

;En un display de 5x7 mostrara 4 caracteres diferenstes y dos animaciones

;el progrmama codifica los siguientes caracteres B,c,@,2 y los mostrara

;en el display en el mismo orden por 6 segundos despues mostrara dos

;animaciones.

;---------------------------------------------------------------------------------------------

list p=16f877A;

;#include "c:\archivos de programa\microchip\mpasm suite\p16f877a.inc";

#include "c:\program files (x86)\microchip\mpasm suite\p16f877a.inc";

;Bits de configuración.

__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF; ALL

;---------------------------------------------------------------------------------------------
;

;fosc = 4 Mhz.

;Ciclo de trabajo del PIC = (1/fosc)*4 = 1 µs.

;t int =(256-R)*(P)*((1/3579545)*4) = 1 ms ;// Tiempo de interrupcion.

;R=131, P=8.

;frec int = 1/ t int = 1KHz.

;---------------------------------------------------------------------------------------------

; Registros de proposito general Banco 0 de memoria RAM.

; Registros propios de estructura del programa

resp_w equ 0x20;

resp_status equ 0x21;

res_pclath equ 0x22;

res_fsr equ 0x23;

cont_milis equ 0x24;

cont_seg equ 0x25;

contador3 equ 0x26;

contador2 equ 0x27;

contador1 equ 0x28;

l equ .70;

m equ .50;

n equ .2;

x equ .250;

y equ .130;

ñ equ .24;
;---------------------------------------------------------------------------------------------

;Def. de constantes a utilizar.

;Cod. de caracteres alfanuméricos en en una matriz dee 7 x 5.

Act_Col1 equ 0x01; activa la columna 1 del


display matricial

Act_Col2 equ 0x02; activa la columna 2 del


display matricial

Act_Col3 equ 0x04; activa la columna 3 del


display matricial

Act_Col4 equ 0x08; activa la columna 4 del


display matricial

Act_Col5 equ 0x10; activa la columna 5 del


display matricial

CarB_Col1 equ 0x00;x x x x o

CarB_Col2 equ 0x36;x o o o x

CarB_Col3 equ 0x36;x o o o x

CarB_Col4 equ 0x36;x x x x o

CarB_Col5 equ 0x49;x o o o x

; xooox

; xxxxo

Carc_Col1 equ 0x47;

Carc_Col2 equ 0x3B;

Carc_Col3 equ 0x3B;

Carc_Col4 equ 0x3B;

Carc_Col5 equ 0x5F;

Car@_Col1 equ 0x4d;

Car@_Col2 equ 0x36;


Car@_Col3 equ 0x06;

Car@_Col4 equ 0x3e;

Car@_Col5 equ 0x41;

Car2_Col1 equ 0x3d;

Car2_Col2 equ 0x1e;

Car2_Col3 equ 0x2e;

Car2_Col4 equ 0x36;

Car2_Col5 equ 0x39;

CarMuñP_Col1 equ 0x6f;

CarMuñP_Col2 equ 0x15;

CarMuñP_Col3 equ 0x62;

CarMuñP_Col4 equ 0x15;

CarMuñP_Col5 equ 0x6f;

CarMuñS_Col1 equ 0x3b;

CarMuñS_Col2 equ 0x55;

CarMuñS_Col3 equ 0x62;

CarMuñS_Col4 equ 0x55;

CarMuñS_Col5 equ 0x3b;

CarMuñA_Col1 equ 0x77;

CarMuñA_Col2 equ 0x17;

CarMuñA_Col3 equ 0x6b;

CarMuñA_Col4 equ 0x17;

CarMuñA_Col5 equ 0x77;

;---------------------------------------------------------------------------------------------

;
;Asignaciòn de los bits de los puertos de I/O.

;Puerto A.

Sin_UsoRA0 equ .0; // Sin Uso RA0.

Sin_UsoRA1 equ .1; // Sin Uso RA1

Sin_UsoRA2 equ .2; // Sin Uso RA2.

Sin_UsoRA3 equ .3; // Sin Uso RA3.

Sin_UsoRA4 equ .4; // Sin Uso RA4

Sin_UsoRA5 equ .5; // Sin Uso RA5.

proga equ b'111111'; // Programaciòn inicial del puerto A.

;Puerto B.

Ren1_MatRB0 equ .0; // renglon 1 de puerta b

Ren2_MatRB1 equ .1; // renglon 2 de puerta b

Ren3_MatRB2 equ .2; // renglon 3 de puerta b

Ren4_MatRB3 equ .3; // renglon 4 de puerta b

Ren5_MatRB4 equ .4; // renglon 5 de puerta b

Ren6_MatRB5 equ .5; // renglon 6 de puerta b

Ren7_MatRB6 equ .6; // renglon 7 de puerta b

Sin_UsoRB7 equ .7; // Sin Uso RB7.

progb equ b'10000000'; // Programaciòn inicial del puerto B.

;Puerto C.

Col1_MatRC0 equ .0; // columna 1 de puerto c

Col2_MatRC1 equ .1; // columna 2 de puerto c

Col3_MatRC2 equ .2; // columna 3 de puerto c

Col4_MatRC3 equ .3; // columna 4 de puerto c

Col5_MatRC4 equ .4; // columna 5 de puerto c


Sin_UsoRC5 equ .5; //

Sin_UsoRC6 equ .6; //

Sin_UsoRC7 equ .7; //

progc equ b'11100000'; // Programaciòn inicial del puerto C como entrada.

;Puerto D.

Sin_UsoRD0 equ .0; // Sin Uso RD0.

Sin_UsoRD1 equ .1; // Sin Uso RD1.

Sin_UsoRD2 equ .2; // Sin Uso RD2.

Sin_UsoRD3 equ .3; // Sin Uso RD3.

Sin_UsoRD4 equ .4; // Sin Uso RD4.

Sin_UsoRD5 equ .5; // Sin Uso RD5.

Sin_UsoRD6 equ .6; // Sin Uso RD6.

Sin_UsoRD7 equ .7; // Sin Uso RD7.

progd equ b'11111111'; // Programaciòn inicial del puerto D como entradas.

;Puerto E.

Sin_UsoRE0 equ .0; // Sin Uso RE0.

Sin_UsoRE1 equ .1; // Sin Uso RE1.

Sin_UsoRE2 equ .2; // Sin Uso RE2.

proge equ b'111'; // Programaciòn inicial del puerto E.

;---------------------------------------------------------------------------------------------

;====================

;== Vector reset ==

;====================
org 0x0000;

vec_reset clrf pclath;

goto prog_prin;

;---------------------------------------------------------------------------------------------

;==============================

;== Vector de interrupcion ==

;==============================

org 0x0004;

vec_int movwf resp_w;resp. el estado del reg. w.

movf status,w;

movwf resp_status;resp. banderas de la alu.

clrf status;

movf pclath,w;

movwf res_pclath;

clrf pclath;

movf fsr,w;

movwf res_fsr;

btfsc intcon,tmr0if;

call rutina_int;

sal_int movlw .131;

movwf tmr0;

movf res_fsr,w;

movwf fsr;

movf res_pclath,w;

movwf pclath;
movf resp_status,w;

movwf status;

movf resp_w,w;

retfie;

;---------------------------------------------------------------------------------------------

;==================================

;== Subrutina de Interrupciones ==

;==================================

rutina_int incf cont_milis,f;

sal_rutint bcf intcon,t0if;

return;

;---------------------------------------------------------------------------------------------

;===========================

;== Subrutina de inicio ==

;===========================

prog_ini bsf status,RP0; Ponte en el banco 1 de ram.

movlw 0x82;

movwf option_reg ^0x80;

movlw proga;

movwf trisa ^0x80;

movlw progb;

movwf trisb ^0x80;

movlw progc;

movwf trisc ^0x80;

movlw progd;
movwf trisd ^0x80;

movlw proge;

movwf trise ^0x80;

movlw 0x06;

movwf adcon1 ^0x80;

bcf status,RP0; Ponte en el banco 0 de ram.

movlw 0xa0;

movwf intcon;

movlw .131;

movwf tmr0;

clrf portc;

return;

;---------------------------------------------------------------------------------------------

;==========================

;== Programa principal ==

;==========================

prog_prin call prog_ini;

Loop_prin

call muestra_b;muestra subrutina del caracter b

call muestra_c;muestra subrutina del caracter c

call muestra_@;muestra subrutina delcaracter @

call muestra_2;muestra subrutina del caracter 2


call Anim_s;llama subrutina muñeco altando

call Anim_A;llamasubrutina muñeco agachado

goto Loop_prin;

;---------------------------------------------------------------------------------------------

;====================================================

;== Subrutina que muestra el Muñeco Principal ==

;====================================================

Muestra_MuñP movlw l;cargawcon .70

movwf contador3;mueve w al registro contador 3

loop3p

movlw CarMuñP_Col1;carga w CarMuñP

movwf portb;mueve w registro puerta b

movlw Act_Col1;carga w Col1

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñP_Col2;carga w CarMuñP

movwf portb;mueve w registro puerta b

movlw Act_Col2;carga w Col2

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñP_Col3;carga w CarMuñP

movwf portb;mueve w registropuer tab

movlw Act_Col3;carga w Col3


movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñP_Col4;carga w CarMuñP

movwf portb;muevew registro puerta b

movlw Act_Col4;carga w Col4

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñP_Col5;carga w CarMuñP

movwf portb;mueve w registro puerta b

movlw Act_Col5;carga w Col5

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw m;carga w .50

movwf contador2;mueve w alregistro contador2

loop2p movlw n;carga w .2

movwf contador1;mueve w alregistro contador1

loop1p nop;perder tiempo

decfsz contador1,f;decrementa contador1 y salta


si es0

goto loop1p;

decfsz contador2,f;
goto loop2p;

decfsz contador3,f;

goto loop3p;

return;

;---------------------------------------------------------------------------------------------

;====================================================

;== Subrutina que muestra el Muñeco Saltando ==

;====================================================

Muestra_MuñS movlw l;

movwf contador3;carga w CarMuñP

loop3s

movlw CarMuñS_Col1;carga w CarMuñs

movwf portb;mueve w registro puerta b

movlw Act_Col1;carga w Col1

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñS_Col2;carga w CarMuñs

movwf portb;mueve w registro puerta b

movlw Act_Col2;carga w Col2

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c


movlw CarMuñS_Col3;carga w CarMuñs

movwf portb;mueve w registropuer tab

movlw Act_Col3;carga w Col3

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñS_Col4;carga w CarMuñs

movwf portb;;muevew registro puerta b

movlw Act_Col4;carga w Col4

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw CarMuñS_Col5;carga w CarMuñs

movwf portb;mueve w registro puerta b

movlw Act_Col5;carga w Col5

movwf portc;mueve w registro puerta c

call retardo_2ms;llama subrutina retardo 2ms

clrf portc;limpia puerta c

movlw m;carga w .50

movwf contador2;mueve w alregistro contador2

loop2s movlw n;

movwf contador1;mueve w alregistro contador1

loop1s nop;

decfsz contador1,f;decrementa contador1 y salta


si es0
goto loop1s; regresa a loop1s

decfsz contador2,f; decrementa contador2 y salta


si es0

goto loop2s; regresa a loop2s

decfsz contador3,f;decrementa contador3 y salta


si es0

goto loop3s;regresa a loop3s

return;

;---------------------------------------------------------------------------------------------

;====================================================

;== Subrutina que muestra el Muñeco Agachado ==

;====================================================

Muestra_MuñA movlw l;

movwf contador3;

loop3a

movlw CarMuñA_Col1;

movwf portb;

movlw Act_Col1;

movwf portc;

call retardo_2ms;

clrf portc;

movlw CarMuñA_Col2;

movwf portb;

movlw Act_Col2;

movwf portc;

call retardo_2ms;
clrf portc;

movlw CarMuñA_Col3;

movwf portb;

movlw Act_Col3;

movwf portc;

call retardo_2ms;

clrf portc;

movlw CarMuñA_Col4;

movwf portb;

movlw Act_Col4;

movwf portc;

call retardo_2ms;
========================================

clrf portc; pasa lo mismo que en las


demas subrutinas

; lo unico que cambia es el


caracter

movlw CarMuñA_Col5; por lo tanto solo cambia la


codificacion

movwf portb;
=======================================

movlw Act_Col5;

movwf portc;

call retardo_2ms;

clrf portc;

movlw m;

movwf contador2;

loop2a movlw n;
movwf contador1;

loop1a nop;

decfsz contador1,f;

goto loop1a;

decfsz contador2,f;

goto loop2a;

decfsz contador3,f;

goto loop3a;

return;

;---------------------------------------------------------------------------------------------

;=================================================

;== Subrutina que muestra el caracter B ==

;=================================================

Muestra_B movlw x;carga con .70

movwf contador3;mueve w a contrador3

loop3b

nop;perder tiempo

movlw CarB_Col1;carga w Col1

movwf portb;mueve w portb

movlw Act_Col1;carga w Col1

movwf portc;carga portc con w

call retardo_2ms;llama a subrutina retardo_2ms

clrf portc;limpia puerta c

movlw CarB_Col2;carga w Col2

movwf portb;mueve w portb

movlw Act_Col2;carga w Col2


movwf portc;carga portc con w

call retardo_2ms;llama a subrutina retardo_2ms

clrf portc;limpia puerta c

movlw CarB_Col3;carga w Colcarga w Col3

movwf portb;mueve w portb

movlw Act_Col3;carga w Col3

movwf portc;carga portc con w

call retardo_2ms;llama a subrutina retardo_2ms

clrf portc;limpia puerta c

movlw CarB_Col4;carga w Col4

movwf portb;mueve w portb

movlw Act_Col4;carga w Col4

movwf portc;carga portc con w

call retardo_2ms;llama a subrutina retardo_2ms

clrf portc;limpia puerta c

movlw CarB_Col5;carga w Col5

movwf portb;mueve w portb

movlw Act_Col5;carga w Col5

movwf portc;carga portc con w

call retardo_2ms;llama a subrutina retardo_2ms

clrf portc;limpia puerta c

movlw y;

movwf contador2;

loop2b movlw ñ;

movwf contador1;
loop1b nop;

decfsz contador1,f;

goto loop1b;

decfsz contador2,f;

goto loop2b;

decfsz contador3,f;

goto loop3b;

return;

;--------------------------------------------------------------------------------------------------

;=================================================

;== Subrutina que muestra el caracter c ==

;=================================================

Muestra_c movlw x;carga con .70

movwf contador3;

loop3c

nop;

movlw Carc_Col1;

movwf portb;

movlw Act_Col1;

movwf portc;

call retardo_2ms;

clrf portc;

movlw Carc_Col2;

movwf portb;

movlw Act_Col2;

movwf portc;

call retardo_2ms;
clrf portc;

movlw Carc_Col3;
========================================

movwf portb; pasa lo mismo que en las


demas subrutinas

movlw Act_Col3; lo unico que


cambia es el caracter

movwf portc; por lo tanto solo cambia la


codificacion

call retardo_2ms;
=======================================

clrf portc;

movlw Carc_Col4;

movwf portb;

movlw Act_Col4;

movwf portc;

call retardo_2ms;

clrf portc;

movlw Carc_Col5;

movwf portb;

movlw Act_Col5;

movwf portc;

call retardo_2ms;

clrf portc;

movlw y;

movwf contador2;
loop2c movlw ñ;

movwf contador1;

loop1c nop;

decfsz contador1,f;

goto loop1c;

decfsz contador2,f;

goto loop2c;

decfsz contador3,f;

goto loop3c;

return;

;--------------------------------------------------------------------------------------------------

;=================================================

;== Subrutina que muestra el caracter @ ==

;=================================================

Muestra_@ movlw x;

movwf contador3;

loop3@ nop;

movlw Car@_Col1;

movwf portb;

movlw Act_Col1;

movwf portc;

call retardo_2ms;

clrf portc;

movlw Car@_Col2;

movwf portb;

movlw Act_Col2;

movwf portc;
call retardo_2ms;

clrf portc;

movlw Car@_Col3;
========================================

movwf portb; pasa lo mismo que en las


demas subrutinas

movlw Act_Col3; lo unico que


cambia es el caracter

movwf portc; por lo tanto solo cambia la


codificacion

call retardo_2ms;
=======================================

clrf portc;

movlw Car@_Col4;

movwf portb;

movlw Act_Col4;

movwf portc;

call retardo_2ms;

clrf portc;

movlw Car@_Col5;

movwf portb;

movlw Act_Col5;

movwf portc;

call retardo_2ms;

clrf portc;

movlw y;
movwf contador2;

loop2@ movlw ñ;

movwf contador1;

loop1@ nop;

decfsz contador1,f;

goto loop1@;

decfsz contador2,f;

goto loop2@;

decfsz contador3,f;

goto loop3@;

return;

;--------------------------------------------------------------------------------------------------

;=================================================

;== Subrutina que muestra el caracter 2 ==

;=================================================

Muestra_2 movlw x;

movwf contador3;

loop32 nop;

movlw Car2_Col1;

movwf portb;

movlw Act_Col1;

movwf portc;

call retardo_2ms;

clrf portc;

movlw Car2_Col2;

movwf portb;

movlw Act_Col2;
movwf portc;

call retardo_2ms;

clrf portc;

movlw Car2_Col3;

movwf portb;

movlw
Act_Col3;========================================

movwf portc;

call retardo_2ms; pasa lo mismo que en las demas


subrutinas

clrf portc; lo unico que cambia es el caracter

; por lo tanto solo cambia la codificacion

movlw
Car2_Col4;=======================================

movwf portb;

movlw Act_Col4;

movwf portc;

call retardo_2ms;

clrf portc;

movlw Car2_Col5;

movwf portb;

movlw Act_Col5;

movwf portc;

call retardo_2ms;

clrf portc;

movlw y;

movwf contador2;
loop22 movlw ñ;

movwf contador1;

loop12 nop;

decfsz contador1,f;

goto loop12;

decfsz contador2,f;

goto loop22;

decfsz contador3,f;

goto loop32;

return;

;--------------------------------------------------------------------------------------------------

;======================================

;== Subrutina animacion salto ==

;======================================

Anim_s

call Muestra_MuñP; llama a muestra muñeco


principal

call Muestra_MuñS; llama a muestra muñeco


saltanto

call Muestra_MuñP;

call Muestra_MuñS;

call Muestra_MuñP;
========================================
; se repite 5 veces las
instrucciones

call Muestra_MuñS; para que parezca que se


mueve

;
========================================

call Muestra_MuñP;

call Muestra_MuñS;

call Muestra_MuñP;

call Muestra_MuñS;

return;

;--------------------------------------------------------------------------------------------------

;======================================

;== Subrutina animacion agachado ==

;======================================

Anim_A

call Muestra_MuñP;llama a muestra muñeco


principal

call Muestra_MuñA;llama a muestra muñeco


agachado
call Muestra_MuñP;

call Muestra_MuñA;

call Muestra_MuñP;
========================================

; se repite 5 veces las


instrucciones

call Muestra_MuñA; para que parezca que se


mueve

;
========================================

call Muestra_MuñP;

call Muestra_MuñA;

call Muestra_MuñP;

call Muestra_MuñA;

return;

;--------------------------------------------------------------------------------------------------
;===============================

;== Subrutina de retardo 2ms ==

;===============================

retardo_2ms clrf cont_milis; limpia registro cont milis

esp_time movlw .2; carga w con .2

subwf cont_milis,w; resta a cont milis w

btfss status,Z; salta si z es 1

goto esp_time; regresa a esp time

return;

;--------------------------------------------------------------------------------------------------

;================================================

;== Subrutina de retardo de 6 segundos ==

;================================================

retardo_6s

movlw d'250';

movwf contador3;

loop3 movlw d'250';

movwf contador2;

loop2 movlw d'24';

movwf contador1;

loop1 nop;

decfsz contador1,f;

goto loop1;

decfsz contador2,f;
goto loop2;

decfsz contador3,f;

goto loop3;

return;

;------------------------------------------------------------------------------------------------

End

-------------------------------------------------------

Conclusiones.
Hay varios tipos de displays de puntos, pero el que utilizamos en esta práctica fue el display
matricial de 7x5 el cual usa multiplexado y que controlamos con la misma técnica TDM
(Multiplexaje por División de Tiempo), Para controlarla primero colocamos el código del
carácter en los renglones de la columna 1, después activamos la columna 1 y esperamos 2
milisegundos, Después desactivamos la columna 1, luego colocamos el código del carácter
de la columna siguiente, activamos la columna 2, volvemos a esperar 2 milisegundos y
desactivamos la columna 2; repetimos los pasos hasta la columna 5.
Después programamos un contador para esperar 6 segundos y pasar al siguiente carácter
repitiendo el código que muestra el carácter pero con el siguiente carácter, hacemos lo
mismo hasta el carácter 5 y para la muestra del muñequito hacemos lo mismo pero
disminuimos el tiempo del contador para que se vea mejor el movimiento del muñeco.

También podría gustarte