Forum Replies Created
Viewing 2 posts - 1 through 2 (of 2 total)
-
AuthorPosts
-
smivinki smithParticipant
i yet figure out this problem thanks
smivinki smithParticipant//DESARROLLADO POR SMIVINKI SMITH
//ESTUDIANTE DE UTESA (RD) EN ING ELECTRONICA.#include<reg52.h>#include <string.H> /* Libreria de funciones para cadenas, se incluye para la funcion strub*/sfr pin_datos_lcd=0XA0;// direccion del P2 en hexasbit RS =P3^0; //pin de registro y de seleccionsbit EN =P3^6; //pin de habilitacionsbit R_W =P3^1;//pin de lectura y escritura.sbit seleccion_hora=P1^0; //pin para setear la horasbit seleccion_minuto=P1^1;//pin para setear el minutosbit start_alarma=P1^4;//pin para iniciar la alarmasbit D2=P1^6; //Declaracion de pines para seleccionar cada display(sin decodificador BCD)sbit D3=P1^7; // pin que activa el display D2sbit bocina =P3^2; //pin para timbre de la alarma.///////////////////////////// zona delaracion global./////////////////////////////////int parte_h ,parte_m=0;int p_horas,p_minutos=0;int segundo=0;unsigned char code Codigo_7segmentos[11]={0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0xF8,0x00,0x10}; //numrero 0 a 9 del displayunsigned char tabla_ascii[11]=”0123456789″; //la posicion de cada caracter corresponde a la pocision de su codigoint fil=0;int col=0;///////////////////////// zona de declaracion de los prototipos///////////////////////////////////////////////////void RETARDO(unsigned int milisegundo); // prototipo de la funcion delay en milisegundovoid COMANDO_LCD(unsigned char COMANDO); // prototipo de la funcion de los comandos del lcdvoid DATOS_LCD(unsigned char DATOS); //prototipo de la funcion de datos del lcdvoid DATOS_LCD2(unsigned char *DATOS); //void F_NUM_LCD(int time_val); //prototipo de la funcion de numero del lcdvoid WRITE_TO_LCD(unsigned char str1[10]); //prototipo de la funcion para escribir al lcdvoid PARTE_HORA(); //prototipo de la funcion de la horavoid PARTE_MINUTO(); // prototipo de la funcion del minutovoid PARTE_SEGUNDO(); // prototipo de la funcion del segundovoid display_me(char cad[2]); //prototipo de la funcion en el array codigo_7segmentovoid TIMER(void);//////////////////////////////////////////////////////////////////////////////////////////////Declaracion de funciones proptotipos/////////////////////////Programa principal/////////////////////////////////////void main(){//Zona de declaracion de variables del programa principalint var_desact_alarma=0;int var_act_alarma=0;int var_display=0;start_alarma=1; // inicializar todo los pines deseleccion_hora=1; // entrada enseleccion_minuto=1; // 1.COMANDO_LCD(0x01); //COMANDO_LCD(0x82); //comando que escribe en la 1 linea y 2 posicion.WRITE_TO_LCD(“SETEAR HORA”);//escribir una cadena al lcdCOMANDO_LCD(0xc4);//pasa a la segunda linea del lcdF_NUM_LCD(p_horas); //llama a la funcion numero del lcd y imprime la horaDATOS_LCD(‘:’); //manda caracter a la funcion de datos del lcdF_NUM_LCD(p_minutos); //llama a la funcion numero otra vez y imprime los minutosDATOS_LCD(‘:’); // manda caracter al lcdF_NUM_LCD(segundo); //llama a la funcion numero del lcd y imprime los segundoswhile(start_alarma==0) // mientras que el reloj no esta activo{RETARDO(10); // funcion delayif(seleccion_hora==0) //si el buton selec_h esta pulsadoPARTE_HORA(); //llama a la funcion parte hora para setear la horaRETARDO(15);if(seleccion_minuto==0) //si el buton selec_m esta pulsadoPARTE_MINUTO(); //llama a la funcion parte hora para setear el minutoRETARDO(15);}while(1)// bucle infinito{char radio[12][2]={“01″,”02″,”03″,”04″,”05″,”06″,”07″,”08″,”09″,”10″,”11″,”00”};int var_display=0;if(start_alarma==1){parte_h=p_horas; //se iguala la funion que setea el minuto y la funcion que incrementar el minuto para tener los mimos valor al inicializar el relojwhile(parte_h<12) // mientras que la hora es menor que 12{parte_h++; // incrementa la horaparte_m=p_minutos; //se iguala la funion que setea el minuto y la funcion que incrementar el minuto para tener los mimos valor al inicializar el relojwhile(parte_m<60) // mientras que la hora es menor que 60{parte_m++; // incrementa el minutosegundo=0; // se hace cero el segundowhile(segundo<59) // si segundo es menor que 59{segundo++; // incrmentar el segundoCOMANDO_LCD(0X81); //comando para escribir en la1 linea en la posicion 1RETARDO(1); // funcion delayWRITE_TO_LCD(“ELECTRONIC BELL”); // imprision de cadena al lcdCOMANDO_LCD(0xc4); // se pasa a la segunda lineaRETARDO(1); //funcion delayF_NUM_LCD(parte_h-1); //se resta 1 a la hora para que se inicializa en 0DATOS_LCD(‘:’); //manda dos puntos al lcdF_NUM_LCD(parte_m-1); //se resta 1 a la minuto para que se inicializa en 0DATOS_LCD(‘:’); //manda dos puntos al lcdF_NUM_LCD(segundo); //llamada a la funcion segundoTIMER(); // llamada a la funcion timervar_desact_alarma++;//incrementa la variable para llegar a los 40 minutosif((var_act_alarma==2360)&&(bocina=1))//si la variable es 2360 sec = 40 minuto y bocina estaba apagada ?{bocina=0; // activar la bocinavar_act_alarma=0;// reinicializo la variablevar_display=var_display+1;if(var_display==12){var_display=0;}for(fil=0;fil<2;fil++){for(col=0;col<var_display;col++){display_me(radio[fil,col]);RETARDO(10);}}}var_act_alarma++;//incrementa la variable para activar la bocina por 15 segundoif(( bocina==0)&&(var_desact_alarma==15))//si la bocina esta activado y los se paso los 15 segundos{bocina=1;} // desactiva la alarma}var_desact_alarma=0; //reinicializo lavariable}p_minutos=0; // reicializacion de la variable minuto}p_horas=0; // reiniciacion de la variable horas}}}////////////////// funcion delay en milisegundo /////////////////////////////void RETARDO(unsigned int milisegundo){ int j, k;for (j=0;j<milisegundo;j++) // se pase el valor en la variable milisegundofor(k=0;k<1275;k++); // por valor}///////////////////////////////////////////////////////////////////////////////////void COMANDO_LCD(unsigned char COMANDO)// configuracion para mandar comando al lcd.{ pin_datos_lcd= COMANDO;RS=0;// rs se pone en 0 para conf como registro de intruccionEN=1;// se pone en 1 para habilitar el lcdR_W=0;//se pone en 0, solamente para escribirRETARDO(1);//llama a la fuccion retardoEN=0; //deshabilita}////////////////////////////////////////////////////////////////////////////////////void DATOS_LCD(unsigned char DATOS)// configuracion para mandar datos al lcd{pin_datos_lcd=DATOS;RS=1;// rs se pone en 1 para conf como datoEN=1; //habilita el lcdR_W=0; // conf para escribirRETARDO(1);// llama a la fucion delayEN=0; // deshabilita el lcd}//////////////////////////// // function para mandar cadena al LCD///////////////////////////////////////////////////////void DATOS_LCD2(unsigned char *DATOS){int aux;for(aux=0;DATOS[aux]!=0;aux++){DATOS_LCD(DATOS[aux]); // llamada a la funcion datos_lcd}}////////////////////// Function to send number to LCD/////////////////////////////////void F_NUM_LCD(int time_val){int int_amt;int_amt=time_val/10;DATOS_LCD(int_amt+48);int_amt=time_val%10;DATOS_LCD(int_amt+48);}///////////////funion para inicializar el LCD/////////////////////////////////void WRITE_TO_LCD(unsigned char str1[10]){COMANDO_LCD(0x38); // configurar para 8 bitsCOMANDO_LCD(0x0E); //COMANDO_LCD(0X0C); // quitar el parpadeo del lcd.RETARDO(1);//delay msDATOS_LCD2(str1);}void PARTE_HORA() // funcion para setear la hora{p_horas++; // se incrementa la variable p_horasif(p_horas>12) // si el es menor que 12p_horas=0; // se hace zero la var p_horasCOMANDO_LCD(0xc4); // se manda el comando 0x04 para escribir en la segunda linea y la posicion 4.F_NUM_LCD(p_horas); // llama a la funcion LCD responsable de los numeros}/////////////////// funcion para setear el minuto//////////////////////void PARTE_MINUTO(){p_minutos++; // se incrementa la variable p_minutosif(p_minutos>59) // si el es menor que 59p_minutos=0; // se hace zero la var p_minutosCOMANDO_LCD(0xc7); // se manda el comando 0x07 para escribir en la segunda linea y la posicion 7.F_NUM_LCD(p_minutos); // llama a la funcion LCD responsable de los numeros}//////////////////////////funcion de los segundos//////////////////////void PARTE_SEGUNDO(){segundo=0; //se pone la variable sec en ceroCOMANDO_LCD(0XCA); // se manda el comando 0xca para escribir en la segunda linea y la posicion 10.F_NUM_LCD(segundo); // inprime los segundos en el lcd}//////////////////FUNCION PARA MONSTRAR EL PERIODO EN EL DISPLAY///////////////////////////////////////////////void display_me(char cad[2]){unsigned char x,xchar; // declaracioneschar temp; // de las variablesfor(x=0;x<2;x++) //va desplasando el caracter a mostrar en los display{temp=cad[x];xchar=strpos(tabla_ascii,temp); //Strpos(), devuelve la posicion//el valor se guarda en xcharP1 |= 0x00;P0=Codigo_7segmentos[xchar]; //Se manda al puerto dos el valor en el array codigo definido por la//posicion guardada en xcharswitch(x) // variable de control de switch{case 0: // en caso la variable x es 0P1 = 64;// se selecciona el pin p1^6 para el displayRETARDO(10); //delay para el 7 segmentobreak;case 1: // en caso la variable x es 1P1 = 128;// se selecciona el pin p1^7 para el displayRETARDO(10); //delay para el 7 segmentobreak;}}P1 |= 0x00; // reinicializacion del puerto}/////////////////agregao//////////////////////////////void TIMER(void) // FUNCION TIMER 25ms{ unsigned char x; // declaracion de las variablesfor(x=0;x<35;x++){ //multiplico el timer por 40 y se resta 5 de los tiempo perdido.TMOD=0X10;// timer 1 modo 1TL1=0XFE; // 25ms/1.085micro se resta de 65536-23041.47=42494.5TH1=0XA5; //lo convierto en hexa decimal el valorTR1=1; // arranca el temporizadorwhile(TF1==0); //espera que se desborda el temporizadorTR1=0; //parrar el temporizadorTF1=0; // pone el flag a cero} } -
AuthorPosts
Viewing 2 posts - 1 through 2 (of 2 total)