Hola amigos
El primer código es un código que una matrix que compartió el compañero Cryn
El segundo código yo lo hice porque tuve la necesidad de hacer andar una lavadora de los 80´s con un programa de lavado sencillo que está en el manual de la lavadora (llena, lava por 20 minutos, centrifuga 4 minutos, llena de nuevo, enjuaga por 10 minutos, centrifuga 5 minutos, y listo) aparte de eso anexe la posibilidad con el pin A0 de lavar 10 minutos no más lo curiosos es que esta rutina si funciona de una pero la otra no toca chancletearla , prácticamente trate de desarrollar el código sencillo y basado en la información del manual de la lavadora, aparte de eso la lavadora no funciona con condensador si no con la fase.
Codigo de Cryn
#include <16f628a.h>
#fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)
#include <fonts.h>
#include <string.h>
#define clock PIN_A1
#define strobe PIN_A2
#define dato PIN_A0
#define size_matriz_col 8 //cantidad de columnas por matriz
#define COLUMNAS 40 //Defino cantidad de columnas a usar
#define matriz_num COLUMNAS/size_matriz_col //numero de matrices usado
#byte portb=6
int matriz[matriz_num+1][size_matriz_col]={"\0"}; //Almacena los datos a mostrar en el cartel
int Fila; //Fila actual a refrescar
int VSync; //Indica si es momento correcto de modificar lo que se esta mostrando...
int Inhibit; //Impide que se produzcan cambios en el cartel.
const int mensaje[1][32]={"Feliz Navidad y Feliz 2014!!..."};
const int num_msj=1;
const int msj_length[num_msj]={31};
int carries[6],msj,letra,desplazos;
void ShowFila(void);
void cargar(int datob);
void desplazar_izq(void);
void load_letra(int caracter);
//Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
#int_TIMER0
void TIMER0_isr(void){
ShowFila(); //Mostremos la fila actual...
Fila++;
if(Fila==8){
Fila=0;
VSync=1;
if(Inhibit!=0)
Inhibit--;
else
desplazar_izq();
}
else
VSync=0;
}
void main(void){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
enable_interrupts(INT_TIMER0);
clear_interrupt(INT_TIMER0);
enable_interrupts(GLOBAL);
setup_comparator (NC_NC_NC_NC);
//setup_adc(adc_off);
//setup_adc_ports(no_analogs);
set_tris_a(0);
set_tris_b(0);
output_b(0xFF); //Apago cartel
output_low(CLOCK); //Aseguro inicialmente clock en bajo
output_low(STROBE);
Fila=0; //Comienzo por la 1er fila
Inhibit=5;
VSync=1; //Indico que comienzo con sync.
desplazos=0;
msj=0;
while(true){}
}
void cargar(int datob){
int contador;
output_low(clock);
delay_cycles(2);
output_low(strobe);
for(contador=0;contador<8;contador++){
output_bit(dato,(datob & 0x1));
datob>>=1;
output_high(clock);
delay_cycles(1);
output_low(clock);
}
output_high(strobe);
delay_cycles(1);
output_low(strobe);
}
void ShowFila(void){
int i;
output_b(0xFF);
for(i=0;i<5;i++){
cargar(matriz[i][Fila]);
}
bit_clear(portb,fila);
}
void desplazar_izq(void){
int i,j,a;
if(desplazos==8 || desplazos==0){
load_letra(mensaje[msj][letra]);
desplazos=0;
}
for(i=0;i<8;i++){
for(j=0;j<6;j++){
a=matriz[j][i];
carries[j]=shift_left(&a,1,0);
matriz[j][i]=a;
}
for(j=0;j<6;j++){
if(j!=5)
matriz[j][i]|=carries[j+1];
else
matriz[j][i]|=carries[0];
}
}
Inhibit=5;
desplazos++;
if(desplazos==8){
letra++;
if(letra>msj_length[msj])
letra=0;
}
}
void load_letra(int caracter){
int i,j;
if(isalnum(caracter)){
if(isalpha(caracter)){
if(isupper(caracter)){
switch(caracter){
case 'A': i=0; break;
case 'B': i=1; break;
case 'C': i=2; break;
case 'D': i=3; break;
case 'E': i=4; break;
case 'F': i=5; break;
case 'G': i=6; break;
case 'H': i=7; break;
case 'I': i=8; break;
case 'J': i=9; break;
case 'K': i=10; break;
case 'L': i=11; break;
case 'M': i=12; break;
case 'N': i=13; break;
case 'O': i=14; break;
case 'P': i=15; break;
case 'Q': i=16; break;
case 'R': i=17; break;
case 'S': i=18; break;
case 'T': i=19; break;
case 'U': i=20; break;
case 'V': i=21; break;
case 'W': i=22; break;
case 'X': i=23; break;
case 'Y': i=24; break;
case 'Z': i=25; break;
}
for(j=0;j<8;j++){
matriz[5][j]=letrasM[i][j];
}
}
else{
switch(caracter){
case 'a': i=0; break;
case 'b': i=1; break;
case 'c': i=2; break;
case 'd': i=3; break;
case 'e': i=4; break;
case 'f': i=5; break;
case 'g': i=6; break;
case 'h': i=7; break;
case 'i': i=8; break;
case 'j': i=9; break;
case 'k': i=10; break;
case 'l': i=11; break;
case 'm': i=12; break;
case 'n': i=13; break;
case 'o': i=14; break;
case 'p': i=15; break;
case 'q': i=16; break;
case 'r': i=17; break;
case 's': i=18; break;
case 't': i=19; break;
case 'u': i=20; break;
case 'v': i=21; break;
case 'w': i=22; break;
case 'x': i=23; break;
case 'y': i=24; break;
case 'z': i=25; break;
}
for(j=0;j<8;j++){
matriz[5][j]=letras_m[i][j];
}
}
}
else{
for(j=0;j<8;j++){
matriz[5][j]=numeros[caracter-'0'][j];
}
}
}
else{
switch(caracter){
case ' ': i=0; break;
case '!': i=1; break;
case '"': i=2; break;
case '#': i=3; break;
case '$': i=4; break;
case '%': i=5; break;
case '&': i=6; break;
case '´': i=7; break; //este es el acento
case '(': i=8; break;
case ')': i=9; break;
case '*': i=10; break;
case '+': i=11; break;
case ',': i=12; break;
case '-': i=13; break;
case '.': i=14; break;
case '/': i=15; break;
case ':': i=16; break;
case ';': i=17; break;
case '>': i=18; break;
case '=': i=19; break;
case '<': i=20; break;
case '?': i=21; break;
case '[': i=22; break;
case ']': i=23; break;
case '^': i=24; break;
case '_': i=25; break;
case '{': i=26; break;
case '|': i=27; break;
case '}': i=28; break;
case '@': i=29; break;
case 'ñ': i=30; break; // esta es la enie
case '\f': i=31; break;
}
for(j=0;j<8;j++){
matriz[5][j]=chars[i][j];
}
}
}
Codigo de lavadora
#Include <16F628A.h>
#Fuses INTRC_IO, NOWDT, PUT, NOBROWNOUT, NOCPD, NOPROTECT, MCLR
#use delay(clock=4000000)
#Use Fast_Io(B)
#Use Fast_Io(A)
#define run PIN_b3
#define izq PIN_b1
#define der PIN_b2
#define swit PIN_b0
#define llenado PIN_b4
#define lavado PIN_b5
#define centrifigado PIN_b6
#define final PIN_b7
#define presos PIN_a0
unsigned char paso;
void main(void)
{
setup_comparator (NC_NC_NC_NC);
//setup_adc_ports(NO_ANALOGS);
set_tris_A(0x0b1111110);
set_tris_B(0x00);
output_b(0x00);
output_a(0x00);
while(true)
{
if (input(PIN_A1) == 1)
{
do
{
output_high(llenado);
delay_ms(700);
while (input(PIN_A4) != 1); //espera al presostato
output_low(llenado);
delay_ms(11000);
output_high(lavado);
delay_ms(1000);
output_high(izq);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(izq);
output_low(swit);
////////////20minutos Lavando////////////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
/////////////////////////////////
output_b(0x00);
delay_ms(60000);
delay_ms(60000);
/////////////Centrifugado/////////////////
output_high(centrifigado);
delay_ms(1000);
output_high(der);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(der);
output_low(swit);
///////////////////////////////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////////////////////
output_b(0x00);
delay_ms(10000);
paso--;
}
while (pasadas > 0);
output_high(llenado);
delay_ms(700);
while (input(PIN_A4) != 1); //espera al presostato
output_low(llenado);
delay_ms(11000);
//////////////////////lavado/////////////////
output_high(lavado);
delay_ms(1000);
output_high(izq);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(izq);
output_low(swit);
/////////////Enjuagado///////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////
output_b(0x00);
delay_ms(60000);
delay_ms(60000);
/////////////Centrifugado/////////////////
output_high(centrifigado);
output_high(final);////////////////////////////
delay_ms(700);/////////////bit////////////////
output_low(final);///////////////////////////
delay_ms(1000);
output_high(der);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(der);
output_low(swit);
////////////////////////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////
output_b(0x00);
delay_ms(10000);
paso--;
}
pasadas = 1;
/////////////////////////////////////////anexo1/////////////////////////////////////////////////////
if (input(PIN_A0) == 1){
delay_ms(1000);
//////////////////////lavado/////////////////
output_high(lavado);
delay_ms(1000);
output_high(izq);
output_high(run);
output_high(swit);
delay_ms(600);
output_low(izq);
output_low(swit);
//////////lavado 10 minutos//////////////////
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
delay_ms(60000);
///////////////////////////
output_b(0x00);
delay_ms(5000);
}
}
}