El codigo de la secuencia lo puedes ver a continuacion:
#include <built_in.h>
#define bts 5
//*******************************************************
// Esta rutina es la encargada de sacar a los tres puertos 22 lineeas los datos
void Sout(unsigned long dato){
portb=lo(dato);
portc=hi(dato);
porta=Higher(dato);
}
//*******************************************************
// Esta rutina es la encargada de sacar a los tres puertos 22 lineeas los datos
void saca(unsigned long dato){
if(dato==0){return;}
portb=lo(dato);
portc=hi(dato);
porta=Higher(dato);
delay_ms(75);
}
//*******************************************************
// Saca los datos con retardo segun variable
void saca2(unsigned long dato, unsigned short t){
unsigned short j;
if(dato==0){return;}
portb=lo(dato);
portc=hi(dato);
porta=Higher(dato);
for(j=0;j<t;j++){delay_ms(1);}
}
//*******************************************************
//Saca los datos invertidos al puerto leds a tierra
void DSaca(unsigned long dato){
dato=~dato;
portb=lo(dato);
portc=hi(dato);
porta=Higher(dato);
}
//*******************************************************
// Mueve los datos recividos secuencialmente a la derecha
void Sec_rp(unsigned long dato, unsigned short x){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
saca(dat);
dat>>=x;
delay_ms(100);
}
}
//*******************************************************
// Mueve los datos recividos secuencialmente a la derecha invertidos
void Sec_rp_(unsigned long dato){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
DSaca(dat);
dat>>=1;
delay_ms(150);
}
}
//*******************************************************
// Mueve los datos recividos secuencialmente a la izquierda invertidos
void Sec_rp_2(unsigned long dato){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
DSaca(dat);
dat<<=1;
delay_ms(150);
}
}
//*******************************************************
// Mueve los datos recividos secuencialmente a la derecha
void Sec_r(unsigned long dato){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
saca(dat);
dat>>=1;
}
}
// Rutina igual que hace las salidas intermitentes
void Sec_ri(unsigned long dato){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
saca(dat);
saca(0);
dat>>=1;
}
}
// Complemento de la primera para repetirla 4 veses
void secuenciador_r(unsigned long dato){
unsigned short j;
for(j=0;j<bts;j++){Sec_r(dato);}
}
//_________________________________________________________
//*******************************************************
// Mueve los datos recividos secuencialmente a la izquierda
void Sec_l(unsigned long dato){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
saca(dat);
dat<<=1;
}
}
// Rutina igual que hace las salidas intermitentes
void Sec_li(unsigned long dato){
unsigned long dat;
unsigned short j;
dat=dato;
for(j=0;j<22;j++){
saca(dat);
saca(0);
dat<<=1;
}
}
// Complemento de la primera para repetirla 4 veses
void secuenciador_l(unsigned long dato){
unsigned short j;
for(j=0;j<bts;j++){Sec_l(dato);}
}
//_________________________________________________________
//*******************************************************
// COnvina dos secuencias para asi obtener la secuencia del auto fantastico
void Sec_rl(unsigned long dato1,unsigned long dato2){
unsigned short j;
for(j=0;j<bts;j++){
Sec_r(dato1);
Sec_l(dato2);
}
}
void Sec_rli(unsigned long dato1,unsigned long dato2){
unsigned short j;
Sec_ri(dato1);
Sec_li(dato2);
}
//_________________________________________________________
//*******************************************************
// Esta secuencia va encendiendo las luces una tras la otra a la izquierda
void ll_r(){
unsigned long dato;
unsigned short j;
dato=0b0000000000000000000001;
for(j=0;j<22;j++){
saca(dato);
dato=dato | (dato<<1);
}
}
//*****************************************
void ll_r2(unsigned long ldx,unsigned short lrx, unsigned short t, unsigned short llo){
unsigned long dato;
unsigned short j,i;
dato=ldx;
for(j=0;j<llo;j++){
saca2(dato,t);
for(i=0;i<lrx;i++){dato=dato | (dato<<1);}
}
}
// Complemento de la anterior para repetirla 4 veses
void llenado_r(){
unsigned short j;
for(j=0;j<bts;j++){ll_r();delay_ms(100);}
}
// Mescla de llenado con secuenciador
void degradado1(){
unsigned short j;
for(j=0;j<bts;j++){
Sec_r(0b1111111111111111111111);
ll_r();
}
}
//_________________________________________________________
//*******************************************************
// Esta secuencia va encendiendo las luces una tras la otra a la derecha
void ll_l(){
unsigned long dato;
unsigned short j;
dato=0b1000000000000000000000;
for(j=0;j<22;j++){
saca(dato);
dato=dato | (dato>>1);
}
}
//*******************************************************
// Esta secuencia va encendiendo las luces una tras la otra a la derecha
void ll_l2(unsigned long ldx,unsigned short lrx, unsigned short t, unsigned short llo){
unsigned long dato;
unsigned short j,i;
dato=ldx;
for(j=0;j<llo;j++){
saca2(dato,t);
for(i=0;i<lrx;i++){dato=dato | (dato>>1);}
}
}
// Complemento de la anterior para repetirla 4 veses
void llenado_l(){
unsigned short j;
for(j=0;j<bts;j++){ll_l();delay_ms(100);}
}
// Mescla de llenado con secuenciador
void degradado2(){
unsigned short j;
for(j=0;j<bts;j++){
Sec_l(0b1111111111111111111111);
ll_l();
}
}
//_________________________________________________________
//*******************************************************
// mescla secuencias a la derecha y la izquierda para ver luces que se cruzan
void combinado(unsigned long dato1,unsigned long dato2){
unsigned long dx,dx1,dx2 ;
unsigned short j,i;
for(i=0;i<2;i++){
dx1=dato1;
dx2=dato2;
for(j=0;j<26;j++){
dx=dx1 | dx2;
saca(dx);
dx1>>=1;
dx2<<=1;
}
}
}
//_________________________________________________________
//*******************************************************
void conv_1(unsigned long dato1){
unsigned long dx,dx1,dx2 ;
unsigned short j,i;
dx1=dato1;
for(j=0;j<22;j++){
dx2=dato1;
for(i=0;i<22;i++){
dx=dx1 | dx2;
saca(dx);
dx2>>=1;
}
dx1>>=1;
}
}
//_________________________________________________________
//*******************************************************
void conv_1inv(unsigned long dato1){
unsigned long dx,dx1,dx2 ;
unsigned short j,i;
dx1=dato1;
for(j=0;j<22;j++){
dx2=dato1;
for(i=0;i<22;i++){
dx=dx1 | dx2;
saca(dx);
dx2<<=1;
}
dx1<<=1;
}
}
//_________________________________________________________
//*******************************************************
void conv_2(unsigned long dato1){
unsigned long dx,dx1,dx2 ;
unsigned short j,i;
dx1=dato1;
for(j=0;j<22;j++){
dx2=dx1;
for(i=0;i<22;i++){
dx=dx1 | dx2;
saca(dx);
dx2>>=1;
}
dx1>>=1;
}
}
//_________________________________________________________
//*******************************************************
void conv_2inv(unsigned long dato1){
unsigned long dx,dx1,dx2 ;
unsigned short j,i;
dx1=dato1;
for(j=0;j<22;j++){
dx2=dx1;
for(i=0;i<22;i++){
dx=dx1 | dx2;
saca(dx);
dx2<<=1;
}
dx1<<=1;
}
}
//_________________________________________________________
//*******************************************************
void conv_3(unsigned long dato1){
unsigned long dx,dx1,dx2 ;
unsigned short j,i,r;
dx1=dato1;
dx=dato1;
r=22;
for(j=0;j<22;j++){
dx2=dx;
for(i=0;i<r;i++){
saca(dx1 | dx2);
dx2>>=1;
}
dx1= dx1 | (dx1>>1);
dx>>=1;
r--;
}
}
//_________________________________________________________
//*******************************************************
void conv_3Inv(unsigned long dato1){
unsigned long dx,dx1,dx2 ;
unsigned short j,i,r;
dx1=dato1;
dx=dato1;
r=22;
for(j=0;j<22;j++){
dx2=dx;
for(i=0;i<r;i++){
saca(dx1 | dx2);
dx2<<=1;
}
dx1= dx1 | (dx1<<1);
dx<<=1;
r--;
}
}
//_________________________________________________________
//*******************************************************
void conv_4(unsigned long dato){
unsigned long dat,dat1=0;
unsigned short j, jf, i;
for(i=0;i<22;i++){
dat=dato;
for(j=1;j<22-i;j++){
saca(dat | dat1);
dat>>=1;
}
dat1=dat1 | dat;
}
}
//_________________________________________________________
//*******************************************************
void conv_4_inv(unsigned long dato){
unsigned long dat,dat1=0;
unsigned short j, jf, i;
for(i=0;i<22;i++){
dat=dato;
for(j=1;j<22-i;j++){
saca(dat | dat1);
dat<<=1;
}
dat1=dat1 | dat;
}
}
//*******************************************************
void conv_5(unsigned long dato){
unsigned long dat,dat1=0;
unsigned short j, jf, i;
for(i=0;i<22;i++){
dat=dato;
for(j=1;j<i;j++){
saca(dat | dat1);
dat>>=1;
}
}
}
//*******************************************************
void conv_5_inv(unsigned long dato){
unsigned long dat,dat1=0;
unsigned short j, jf, i;
for(i=0;i<22;i++){
dat=dato;
for(j=1;j<i;j++){
saca(dat | dat1);
dat<<=1;
}
}
}
//_________________________________________________________
//*******************************************************
void DelVar(unsigned short t){
unsigned short j;
for(j=0;j<t;j++){
delay_us(100);
}
}
//*******************************************************
void brillo(){
unsigned long dato;
unsigned short j;
for(j=0;j<255;j++){
DSaca(0);
DelVar(j);
DSaca(~0);
Delvar(256-j);
}
for(j=0;j<255;j++){
DSaca(~0);
DelVar(j);
DSaca(0);
Delvar(256-j);
}
}
//_________________________________________________________
//*******************************************************
//_________________________________________________________
//*******************************************************
//_________________________________________________________
//*******************************************************
void ll_f1(){
unsigned long dato1, dato2;
unsigned short j;
dato1=0b0000000000000000000001;
dato2=0b1000000000000000000000;
for(j=0;j<11;j++){
saca(dato1 | dato2);
dato1=dato1 | (dato1<<1);
dato2=dato2 | (dato2>>1);
}
}
//*******************************************************
void ll_f2(){
unsigned long dato1, dato2;
unsigned short j;
dato1=0b0000000000000000000001;
dato2=0b1000000000000000000000;
for(j=0;j<5;j++){
dato1=dato1 | (dato1<<1);
dato1=dato1 | (dato1<<1);
dato2=dato2 | (dato2>>1);
dato2=dato2 | (dato2>>1);
saca2(dato1 | dato2,250);
}
}
//*******************************************************
void ll_f3(){
unsigned long dato1, dato2;
unsigned short j;
dato1=0b0000000000000000000001;
dato2=0b1000000000000000000000;
for(j=0;j<4;j++){
dato1=dato1 | (dato1<<1);
dato1=dato1 | (dato1<<1);
dato1=dato1 | (dato1<<1);
dato2=dato2 | (dato2>>1);
dato2=dato2 | (dato2>>1);
dato2=dato2 | (dato2>>1);
saca2(dato1 | dato2,250);
}
}
//*******************************************************
void ll_f1_inv(){
unsigned long dato1, dato2;
unsigned short j;
dato1=0b0000000000011111111111;
dato2=0b1111111111100000000000;
for(j=0;j<11;j++){
saca(dato1 | dato2);
dato1=dato1>>1;
dato2=dato2<<1;
}
}
//*******************************************************
void ll_f2_inv(){
unsigned long dato1, dato2;
unsigned short j;
dato1=0b0000000000011111111111;
dato2=0b1111111111100000000000;
for(j=0;j<7;j++){
saca2(dato1 | dato2,250);
dato1=dato1>>1;
dato1=dato1>>1;
dato2=dato2<<1;
dato2=dato2<<1;
}
}
//*******************************************************
void ll_f3_inv(){
unsigned long dato1, dato2;
unsigned short j;
dato1=0b0000000000011111111111;
dato2=0b1111111111100000000000;
for(j=0;j<5;j++){
saca2(dato1 | dato2,250);
dato1=dato1>>1;
dato1=dato1>>1;
dato1=dato1>>1;
dato2=dato2<<1;
dato2=dato2<<1;
dato2=dato2<<1;
}
}
//*******************************************************
void ll_f4(unsigned long dat1, unsigned long dat2, unsigned short t, unsigned short x){
unsigned long dato1, dato2;
unsigned short j, i;
dato1=dat1;
dato2=dat2;
for(j=0;j<11;j++){
saca2((dato1 | dato2),t);
for(i=0;i<x;i++){
dato1=dato1 | (dato1>>1);
dato2=dato2 | (dato2<<1);
}
}
}
//*******************************************************
void desord(){
Sout(0b0000010000000000000000); delay_ms(100);
Sout(0b0000010000001000000000); delay_ms(100);
Sout(0b0000010000001000100000); delay_ms(100);
Sout(0b0000010000001000100100); delay_ms(100);
Sout(0b0000010000001000100100); delay_ms(100);
Sout(0b0010010000001000100100); delay_ms(100);
Sout(0b0010010000101000100100); delay_ms(100);
Sout(0b0010010100101000100100); delay_ms(100);
Sout(0b0010010000101000100100); delay_ms(100);
Sout(0b0010110000101000100100); delay_ms(100);
Sout(0b0010010000101100100100); delay_ms(100);
Sout(0b0010010010101100100100); delay_ms(100);
Sout(0b0010010110101100100100); delay_ms(100);
Sout(0b1010010110101100100100); delay_ms(100);
Sout(0b1010010110111100100100); delay_ms(100);
Sout(0b1010010110111101100100); delay_ms(100);
Sout(0b1011010110111101100100); delay_ms(100);
Sout(0b1011010110111101101100); delay_ms(100);
Sout(0b1011010110111101101101); delay_ms(100);
Sout(0b1011010111111101101101); delay_ms(100);
Sout(0b1111010111111101101101); delay_ms(100);
Sout(0b1111010111111101101111); delay_ms(100);
Sout(0b1111011111111101101111); delay_ms(100);
Sout(0b1111011111111101111111); delay_ms(100);
Sout(0b1111111111111101111111); delay_ms(100);
Sout(0b1111111111111111111111); delay_ms(100);
Sout(0b1111111111011111111111); delay_ms(100);
Sout(0b1111111111011111101111); delay_ms(100);
Sout(0b1111111101011111101111); delay_ms(100);
Sout(0b1110111101011111101111); delay_ms(100);
Sout(0b1110111101011111101011); delay_ms(100);
Sout(0b1110101101011111101011); delay_ms(100);
Sout(0b1110101101011100110101); delay_ms(100);
Sout(0b1110101100011100110101); delay_ms(100);
Sout(0b1110101100010100110101); delay_ms(100);
Sout(0b1010101100010100110101); delay_ms(100);
Sout(0b1010101100010100010101); delay_ms(100);
Sout(0b1010101100010100000101); delay_ms(100);
Sout(0b1010101100010100000100); delay_ms(100);
Sout(0b1010101100010100000100); delay_ms(100);
Sout(0b1010101000010100000100); delay_ms(100);
Sout(0b1010101000010000000100); delay_ms(100);
Sout(0b1000101000010000000100); delay_ms(100);
Sout(0b1000101000000000000100); delay_ms(100);
Sout(0b0000101000000000000100); delay_ms(100);
Sout(0b0000100000000000000100); delay_ms(100);
Sout(0b0000000000000000000100); delay_ms(100);
Sout(0b0000000000000000000000); delay_ms(100);
}
//*******************************************************
void main(){
unsigned long sex, sey, dato1, dato2;
unsigned short j,i;
adcon1=0x06;
portb=0; porta=0; portc=0;
trisa=0; trisb=0; trisc=0;
i=eeprom_read(0x00); if(i==0){while(1);} i--; eeprom_write(0x00,i);
while(1){
for(j=0;j<10;j++){Sout(0b1111111111111111111111);delay_ms(500);Sout(0);delay_ms(500);}
for(j=0;j<45;j++){Sout(0b0101010101010101010101);delay_ms(100);Sout(0b1010101010101010101010);delay_ms(100);}
for(j=0;j<2;j++){brillo();}
for(j=0;j<10;j++){ll_f1();}
for(j=0;j<2;j++){Sec_rl(0b1111111111000000000000,0b0000000000001111111111);}
for(j=0;j<6;j++){desord();}
for(j=0;j<10;j++){Sec_rp(0b1111111111111111111111,2);}
for(j=0;j<5;j++){combinado(0b1111100000000000000000, 0b0000000000000000011111);}
llenado_l();
llenado_r();
for(j=0;j<10;j++){Sec_rp_ (0b1100000000000000000000);}
for(j=0;j<10;j++){Sec_rp_2(0b0000000000000000000011);}
}
}
No hay comentarios:
Publicar un comentario