Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Equipo
6IM1
Objetivo
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
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.
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
;GRUPO: 6IM1.
;INTEGRANTES:
;animaciones.
;---------------------------------------------------------------------------------------------
list p=16f877A;
;Bits de configuración.
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CP_OFF; ALL
;---------------------------------------------------------------------------------------------
;
;fosc = 4 Mhz.
;R=131, P=8.
;---------------------------------------------------------------------------------------------
l equ .70;
m equ .50;
n equ .2;
x equ .250;
y equ .130;
ñ equ .24;
;---------------------------------------------------------------------------------------------
; xooox
; xxxxo
;---------------------------------------------------------------------------------------------
;
;Asignaciòn de los bits de los puertos de I/O.
;Puerto A.
;Puerto B.
;Puerto C.
;Puerto D.
;Puerto E.
;---------------------------------------------------------------------------------------------
;====================
;====================
org 0x0000;
goto prog_prin;
;---------------------------------------------------------------------------------------------
;==============================
;==============================
org 0x0004;
movf status,w;
clrf status;
movf pclath,w;
movwf res_pclath;
clrf pclath;
movf fsr,w;
movwf res_fsr;
btfsc intcon,tmr0if;
call rutina_int;
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;
;---------------------------------------------------------------------------------------------
;==================================
;==================================
return;
;---------------------------------------------------------------------------------------------
;===========================
;===========================
movlw 0x82;
movlw proga;
movlw progb;
movlw progc;
movlw progd;
movwf trisd ^0x80;
movlw proge;
movlw 0x06;
movlw 0xa0;
movwf intcon;
movlw .131;
movwf tmr0;
clrf portc;
return;
;---------------------------------------------------------------------------------------------
;==========================
;==========================
Loop_prin
goto Loop_prin;
;---------------------------------------------------------------------------------------------
;====================================================
;====================================================
loop3p
goto loop1p;
decfsz contador2,f;
goto loop2p;
decfsz contador3,f;
goto loop3p;
return;
;---------------------------------------------------------------------------------------------
;====================================================
;====================================================
Muestra_MuñS movlw l;
loop3s
loop2s movlw n;
loop1s nop;
return;
;---------------------------------------------------------------------------------------------
;====================================================
;====================================================
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;
========================================
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;
;---------------------------------------------------------------------------------------------
;=================================================
;=================================================
loop3b
nop;perder tiempo
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;
;--------------------------------------------------------------------------------------------------
;=================================================
;=================================================
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;
========================================
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;
;--------------------------------------------------------------------------------------------------
;=================================================
;=================================================
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;
========================================
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;
;--------------------------------------------------------------------------------------------------
;=================================================
;=================================================
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;
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;
;--------------------------------------------------------------------------------------------------
;======================================
;======================================
Anim_s
call Muestra_MuñP;
call Muestra_MuñS;
call Muestra_MuñP;
========================================
; se repite 5 veces las
instrucciones
;
========================================
call Muestra_MuñP;
call Muestra_MuñS;
call Muestra_MuñP;
call Muestra_MuñS;
return;
;--------------------------------------------------------------------------------------------------
;======================================
;======================================
Anim_A
call Muestra_MuñA;
call Muestra_MuñP;
========================================
;
========================================
call Muestra_MuñP;
call Muestra_MuñA;
call Muestra_MuñP;
call Muestra_MuñA;
return;
;--------------------------------------------------------------------------------------------------
;===============================
;===============================
return;
;--------------------------------------------------------------------------------------------------
;================================================
;================================================
retardo_6s
movlw d'250';
movwf contador3;
movwf contador2;
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.