Autor Tema: Código de matriz 8x32 Hi-Tech c18  (Leído 1373 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cmontoya

  • PIC10
  • *
  • Mensajes: 29
Código de matriz 8x32 Hi-Tech c18
« en: 24 de Septiembre de 2012, 00:48:35 »
Hola amigos
Ya que estoy aprendiendo a programar pic con hi-tech , tengo planeado hacer un publik (8x32) . El único problema que tengo es que me repite la letra (AAAA) y lo ideal es que saliera el abecedario corriendo (ABCD)  (para mejor entendimiento ver la imagen)
Pues la verdad no se como hacer  para arreglar eso

Que Opinan??
 


Código: [Seleccionar]
#include<htc.h>
/////////////////////////////////////////////////////////////
//Configuracion para trabajar Con oscilador interno de 8Mhz
__CONFIG(1,INTIO & FCMDIS & IESODIS & PLLDIV5 & PLLPOSTDIV2 & CPUDIV1 & USBOSC);
/////////////////////////////////////////////////////////////
__CONFIG(2,VREGDIS & PWRTEN & BORDIS & WDTDIS & BORV45 & WDTPS32K);
__CONFIG(3,PBDIGITAL & LPT1DIS & MCLREN);
__CONFIG(4,STVRDIS & LVPDIS & ICPORTDIS & DEBUGDIS);
__CONFIG(5,UNPROTECT);
__CONFIG(6,UNPROTECT);
__CONFIG(7,UNPROTECT);
//////////////////////////////
//Frecuencia FOSC 8Mhz
//////////////////////////////
#define _XTAL_FREQ 8000000
//////////////////////////////
//Definiciones
//////////////////////////////
#define CLOCK RC1
#define DATO RC0
#define RESET1 RC2
//////////////////////////////
//Variable Globales //
//////////////////////////////
unsigned char MAX;
unsigned char CONT;
unsigned char Letra,c,f,x;
unsigned char arreglo[8]={255, 255, 255, 227, 227, 255, 255, 255};//A
unsigned char carreglo[8];
unsigned char datos[288] ={0, 63, 72, 136, 136, 72, 63, 0,//"A"
    0, 110, 145, 145, 145, 145, 255, 0,//"B"
    0, 66, 129, 129, 129, 129, 126, 0,//"C"
    0, 60, 66, 129, 129, 129, 255, 0,//"D"
    0, 129, 129, 153, 153, 153, 255, 0,//"E"
    0, 128, 144, 144, 144, 144, 255, 0,//"F"
    0, 78, 137, 137, 137, 129, 126, 0,//"G"
    0, 255, 16, 16, 16, 16, 255, 0,//"H"
    0, 0, 195, 255, 255, 195, 0, 0,//"I"
    0, 6, 1, 129, 129, 254, 128, 128,//"J"
    0, 131, 68, 40, 16, 16, 255, 0,//"K"
    0, 1, 1, 1, 1, 255, 0, 0,//"L"
    0, 255, 64, 32, 32, 64, 255, 0,//"M"
    0, 255, 8, 16, 32, 64, 255, 0,//"N"
    0, 60, 66, 129, 129, 66, 60, 0,//"O"
    0, 112, 136, 136, 136, 136, 255, 0,//"P"
    0, 61, 66, 133, 129, 66, 60, 0,//"Q"
    0, 103, 152, 144, 144, 144, 255, 0,//"R"
    0, 78, 145, 145, 145, 145, 98, 0,//"S"
    0, 192, 128, 255, 255, 128, 192, 0,//"T"
    0, 254, 1, 1, 1, 1, 254, 0,//"U"
    0, 252, 2, 1, 1, 2, 252, 0,//"V"
    0, 255, 1, 2, 2, 1, 255, 0,//"W"
    0, 195, 36, 24, 24, 36, 195, 0,//"X"
    0, 224, 16, 15, 15, 16, 224, 0,//"Y"
    0, 195, 161, 145, 137, 133, 195, 0,//"Z"
    0, 0, 3, 255, 255, 99, 32, 0,//"UNO"
    0, 99, 145, 137, 133, 131, 65, 0,//"DOS"
    0, 110, 145, 145, 129, 129, 66, 0,//"TRES"
    4, 255, 68, 36, 20, 12, 4, 0,//"CUATRO"
    0, 142, 145, 145, 145, 145, 97, 0,//"CINCO"
    0, 78, 145, 145, 145, 145, 126, 0,//"SEIS"
    0, 224, 144, 143, 128, 128, 192, 0,//"SIETE"
    0, 110, 145, 145, 145, 145, 110, 0,//"OCHO"
    0, 126, 137, 137, 137, 137, 112, 0,//"NUEVE"
    255, 129, 181, 133, 133, 181, 129, 255};//"EMOTICON"




//---------------------------------------------------------
//FUNCION DE TE PERIMITE ENVIAR UN CERO O UNO /
//---------------------------------------------------------
void SEND_DATA(unsigned char DATA){
DATO=DATA;
CLOCK=0;
__delay_us(2);
CLOCK=1;
}
//----------------------------------------------------------
//FUNCION DE BORRADO /
//----------------------------------------------------------
/*/void CLEAR(void){
for(MAX=1;MAX<=25;MAX++){ //25 ES EL MAXIMO DE->
SEND_DATA(1); //->COLUMNAS
}
}*/
//-----------------------------------------------------------
// HABILITADOR /
//-----------------------------------------------------------
void HABILITO(void){
if(CONT==0) SEND_DATA(1); //ENVIO DATA 0 O 1
else SEND_DATA(0);
}

/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){
//////////////////////////////////////
//Interrupcion por TIMER0
//////////////////////////////////////
if(TMR0IF){
//////////////////////////////////////////
//Ciclo for para copiar el arreglo actual
//////////////////////////////////////////
for(x=0;x<sizeof(arreglo);x++){
carreglo[x]=arreglo[x];
}
//////////////////////////////////////////
//ciclo que realizar el corrimiento
//de datos en la matriz actual
//Creando el efecto de corrimiento
//////////////////////////////////////////
for(x=0;x<sizeof(arreglo)-1;x++){
arreglo[x]=carreglo[x+1];
}
/////////////////////////////////////////
//Se agrega el dato a actualizar en la
//ultima posicion de la matriz actual
/////////////////////////////////////////
arreglo[7]=datos[c];
/////////////////////////////////////////
//comparaciones para incializar o
//sumar uno a las variables de
//columno
/////////////////////////////////////////
if(c>286) c=0;
else c++;
TMR0IF=0;
WriteTimer0(62410);//Valor para tener una interrupcion cada 200mS
}
}
//////////////////////////////
//FUNCION PRINCIPAL
//////////////////////////////
void main(void){
OSCCON=0x70;
NOP();NOP();NOP();NOP();
//////////////////////////////////////////////////////////////////////
// Configuracion de Puertos ///
//////////////////////////////////////////////////////////////////////
TRISB=0x00;//SALIDA PARA FILA DE LA MATRIX
TRISC=0x00;
/*---------------------Fin de Conf. Puertos-------------------------*/
//////////////////////////////////////////////////////////////////////
// Configuracion de Timer1 ///
//////////////////////////////////////////////////////////////////////
OpenTimer0(TIMER_INT_ON &//Interrupcion activada
T0_16BIT &//valor de 16 bit
T0_SOURCE_INT &//Corriente desde el oscilador principal
T0_PS_1_256); //Preescalar de 16
/*---------------------Fin de Conf. TIMER1--------------------------*/
INTCON|=0b00100000;//Para activar interrupcion por timer0
WriteTimer0(62410);//Valor para tener una interrupcion cada 200 mS
GIE=1; //INTERRUPCIONES GLOBALES ACTIVADAS
PEIE=1; //ACTIVA INTERURPCIONES POR PERIFERICOS
///////////////////////////////////////////////////////////////////////
// FUNCION PRINCIPAL ///
///////////////////////////////////////////////////////////////////////
RESET1=1;
//CLEAR();
SEND_DATA(1);
while(1){
for(Letra=0;Letra<7;Letra++){
PORTB=~arreglo[Letra];//saca el valor de la fila
__delay_ms(2);
SEND_DATA(0);//Corriemiento de columnas
}
SEND_DATA(1);//Inicializa columnas
}
}
/*-------------------------------Fin-----------------------------------*/



 

anything