EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Replies / ELECTRONIC BELL

ELECTRONIC BELL

|

Microcontroller › 8051 › electronic school bell › ELECTRONIC BELL

November 17, 2010 at 9:08 am #5150
smivinki smith
Participant

 //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 hexa
sbit RS =P3^0;  //pin de registro y de seleccion
sbit EN =P3^6; //pin de habilitacion
sbit R_W =P3^1;//pin de lectura y escritura.
sbit seleccion_hora=P1^0; //pin para setear la hora 
sbit seleccion_minuto=P1^1;//pin para setear el minuto
sbit start_alarma=P1^4;//pin para iniciar la alarma 
sbit D2=P1^6;  //Declaracion de pines para seleccionar cada display(sin decodificador BCD)
sbit D3=P1^7; // pin que activa el display D2
sbit 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 display 
unsigned char tabla_ascii[11]=”0123456789″; //la posicion de cada caracter corresponde a la pocision de su codigo 
int fil=0;
int col=0;         
///////////////////////// zona de declaracion de los prototipos///////////////////////////////////////////////////
 void RETARDO(unsigned int milisegundo);  // prototipo de la funcion delay en milisegundo
 void COMANDO_LCD(unsigned char COMANDO);  // prototipo de la funcion de los comandos del lcd
 void DATOS_LCD(unsigned char DATOS);   //prototipo de la funcion de datos del lcd
 void DATOS_LCD2(unsigned char *DATOS);  //
 void F_NUM_LCD(int time_val); //prototipo de la funcion de numero del lcd
 void WRITE_TO_LCD(unsigned char str1[10]); //prototipo de la funcion para escribir al lcd
 void PARTE_HORA(); //prototipo de la funcion de la hora 
 void PARTE_MINUTO(); // prototipo de la funcion del minuto
 void PARTE_SEGUNDO();  // prototipo de la funcion del segundo
 void display_me(char cad[2]);  //prototipo  de la funcion en el array codigo_7segmento     
 void TIMER(void);                                  
////////////////////////////////////////////////////////////////////////////////////////////
//Declaracion de funciones proptotipos
/////////////////////////Programa principal/////////////////////////////////////
void main()
{
 //Zona de declaracion de variables del programa principal
int var_desact_alarma=0;
int var_act_alarma=0;
int var_display=0;
start_alarma=1; // inicializar todo los pines de 
seleccion_hora=1;  //   entrada en 
seleccion_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 lcd
COMANDO_LCD(0xc4);//pasa a la segunda linea del lcd
F_NUM_LCD(p_horas); //llama a la funcion numero del lcd y imprime la hora
DATOS_LCD(‘:’);  //manda caracter a la funcion de datos del lcd
F_NUM_LCD(p_minutos); //llama a la funcion numero otra vez y imprime los minutos
DATOS_LCD(‘:’);  // manda caracter al lcd
F_NUM_LCD(segundo);  //llama a la funcion numero del lcd y imprime los segundos 
 
while(start_alarma==0) // mientras que el reloj no esta activo
 {
  RETARDO(10);  // funcion delay
  if(seleccion_hora==0) //si el buton selec_h esta pulsado 
  PARTE_HORA(); //llama a la funcion parte hora para setear la hora 
  RETARDO(15);  
  if(seleccion_minuto==0)  //si el buton selec_m esta pulsado  
  PARTE_MINUTO();  //llama a la funcion parte hora para setear el minuto
  RETARDO(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 reloj
  while(parte_h<12)  // mientras que la hora es menor que 12
  {
  parte_h++;   // incrementa la hora
   parte_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 reloj
   while(parte_m<60)  // mientras que la hora es menor que 60
   { 
      parte_m++;   // incrementa el minuto
 segundo=0;   // se hace cero el segundo 
while(segundo<59) // si segundo es menor que 59
{ 
  
  segundo++; // incrmentar el segundo 
  COMANDO_LCD(0X81); //comando para escribir en la1 linea en la posicion 1
  RETARDO(1); // funcion delay
  WRITE_TO_LCD(“ELECTRONIC BELL”); // imprision de cadena al lcd
       COMANDO_LCD(0xc4);   // se pasa a la segunda linea
       RETARDO(1);  //funcion delay
       F_NUM_LCD(parte_h-1);   //se resta 1 a la hora para que se inicializa en 0
       DATOS_LCD(‘:’);   //manda dos puntos al lcd
       F_NUM_LCD(parte_m-1);  //se resta 1 a la minuto para que se inicializa en 0
       DATOS_LCD(‘:’);  //manda dos puntos al lcd
       F_NUM_LCD(segundo); //llamada a la funcion segundo
       TIMER();             // llamada a la funcion timer 
  var_desact_alarma++;//incrementa la variable para llegar a los 40 minutos 
  if((var_act_alarma==2360)&&(bocina=1))//si la variable es 2360 sec = 40 minuto y bocina estaba apagada ?
  {
  bocina=0;  // activar la bocina
  var_act_alarma=0;// reinicializo la variable
var_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 segundo       
       if(( 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 milisegundo
for(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 intruccion
  EN=1;// se pone en 1 para habilitar el lcd
  R_W=0;//se pone en 0, solamente para escribir 
  RETARDO(1);//llama a la fuccion retardo
  EN=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 dato
 EN=1; //habilita el lcd
 R_W=0; // conf para escribir
 RETARDO(1);// llama a la fucion delay
 EN=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 bits 
COMANDO_LCD(0x0E); //
COMANDO_LCD(0X0C); // quitar el parpadeo del lcd.
RETARDO(1);//delay ms
DATOS_LCD2(str1);
}
  
 
void PARTE_HORA()  // funcion para setear la hora 
{
p_horas++;             // se incrementa la variable p_horas
if(p_horas>12) // si el es menor que 12
p_horas=0;   // se hace zero la var p_horas
COMANDO_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_minutos
if(p_minutos>59)  // si el es menor que 59
p_minutos=0;   // se hace zero la var p_minutos
COMANDO_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 cero
COMANDO_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; // declaraciones 
  char temp;  // de las variables
  
for(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 xchar
  P1 |= 0x00;               
  P0=Codigo_7segmentos[xchar];    //Se manda al puerto dos el valor en el array codigo definido por la 
                                  //posicion guardada en xchar 
switch(x)  // variable de control de switch
{
 
case 0: // en caso la variable x es 0
P1 = 64;// se selecciona el pin p1^6 para el display
RETARDO(10); //delay para el 7 segmento
break;
 
case 1:  // en caso la variable x es 1
P1 = 128;// se selecciona el pin p1^7 para el display
RETARDO(10); //delay para el 7 segmento
break;
 
}
}
P1 |= 0x00; // reinicializacion del puerto 
}
/////////////////agregao//////////////////////////////
void TIMER(void) // FUNCION TIMER 25ms
 { unsigned char x; // declaracion de las variables
 for(x=0;x<35;x++){ //multiplico el timer por 40 y se resta 5 de los tiempo perdido.
 TMOD=0X10;// timer 1 modo 1
 TL1=0XFE; // 25ms/1.085micro se resta de 65536-23041.47=42494.5
 TH1=0XA5; //lo convierto en hexa decimal el valor
 TR1=1;  // arranca el temporizador
 while(TF1==0); //espera que se desborda el temporizador
 TR1=0; //parrar el temporizador
 TF1=0; // pone el flag a cero
 } }
 

RSS Recent Posts

  • PIC KIT 3 not able to program dsPIC June 16, 2025
  • Failure of polypropylene motor-run capacitors June 16, 2025
  • Siemens large industrial PLC parts June 16, 2025
  • Wideband matching an electrically short bowtie antenna; 50 ohm, 434 MHz June 16, 2025
  • Curved lines in PCB design June 16, 2025

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2025 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise