Aqui teneis el código para una matriz de leds 8x8 para representar tres animaciones, en el PROTEUS no funciona, en la vida real si.
;****************************************************************************************************************************
; TRES EFECTOS VISUALES *
;****************************************************************************************************************************
;registro a usar 74HC164.
;CLOCK= Patilla 1 PORTA,2.
;DATA= Patilla 2 PORTA,3.
;Todas las patitas del PORTB se conectaran a resistencias de 1k5 ohmios y a su vez estas resistencias a base de transistor PNP BC-327
;calculado para soportar un máximo de 15mA x 8 leds.
;las salidas del registro de desplazamiento se conectaran a resistencias de 1/4 w y serán entre 330 ohmio, 220 ohmio según veamos
;la luminosidad de los leds.
;*****************************************************************************************************************************
;PASOS A SEGUIR PARA MOSTRAR UN PATRON DE 8 BITS (1 BYTE) EN UNA MATRIZ DE LEDS 8x8
;*****************************************************************************************************************************
;1) Apagar todas las filas.
;2) Escribir los valores correspondientes a la primer fila en el registro de desplazamiento, teniendo en cuenta que el primer
; digito binario colocado corresponde al último LED de la fila, y el ultimo en poner al de la primer columna.
;3) Encenderla primer fila, esperar un tiempo, y volver a apagarla.
;4) Repetir los pasos 2 y 3 para las filas restantes.
;*****************************************************************************************************************************
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
EEPROM EQU 0x1C ;registro de control
ALMACEN EQU 0x20 ;aquí se guarda la informacion para llevarla al registro de desplazamiento
CONTADOR EQU 0x21 ;contador 8 bits
DI EQU 7 ;bit de control
DO EQU 6 ;bit de control
ORG 0X00 ;Inicio del ensamblado desde 00
goto INICIO ;Salto a la primera instruccion
ORG 0X05 ;Ensamblar desde 05
INICIO bsf STATUS,RP0 ;pagina 1
clrf TRISB ;portb salidas
clrf TRISA ;porta salidas
bcf STATUS,RP0 ;pagina 0
clrf PORTB
clrf PORTA
movlw B'11111111' ;todas las filas apagadas
movwf PORTB ;1 en base transistores PNP y por lo tanto leds apagados
;**********************************************************************************************************************************
;BARRIDO HORIZONTAL
;**********************************************************************************************************************************
PRINCIPAL movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA1 movlw B'11111110' ;activo fila 1 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA2 movlw B'11111101' ;activo fila 2 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA3 movlw B'11111011' ;activo fila 3 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA4 movlw B'11110111' ;activo fila 4 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA5 movlw B'11101111' ;activo fila 5 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA6 movlw B'11011111' ;activo fila 6 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA7 movlw B'10111111' ;activo fila 7 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA8
movlw B'01111111' ;activo fila 8 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
;**********************************************************************************************************************************
;PIXEL OBLICUO
;**********************************************************************************************************************************
movlw B'11111110' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA8 movlw B'11111110' ;activo columna 8 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111101' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA7 movlw B'11111101' ;activo columna 7 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111011' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA6 movlw B'11111011' ;activo columna 6 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11110111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA5 movlw B'11110111' ;activo columna 5 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11101111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA4 movlw B'11101111' ;activo columna 4 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11011111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA3 movlw B'11011111' ;activo columna 3 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'10111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA2 movlw B'10111111' ;activo columna 2 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'01111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA1 movlw B'01111111' ;activo columna 1 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
;**********************************************************************************************************************************
;PIXEL OBLICUO_2
;**********************************************************************************************************************************
movlw B'01111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11111110' ;activo columna 8 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'10111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11111101' ;activo columna 7 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11011111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11111011' ;activo columna 6 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11101111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11110111' ;activo columna 5 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11110111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11101111' ;activo columna 4 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111011' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11011111' ;activo columna 3 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111101' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'10111111' ;activo columna 2 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111110' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'01111111' ;activo columna 1 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
goto PRINCIPAL
;*******************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;*******************************************************************************************************************************
TX movlw .8 ;pone 8 en W
movwf CONTADOR ;carga contador con 8
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
;********************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;********************************************************************************************************************************
CLOCK bcf PORTA,2 ;pone a 0 CLOCK
nop ;espera 1 micros
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,2 ;pone a 1 CLOCK
nop ;1 micros
return
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END