Buscando un programa de despertador con temporizador de 51 microcontroladores. Necesita lenguaje C.
Capaz de ajustar el tiempo
Te enviaré un programa de reloj del microcontrolador en lenguaje C 51, espero que te pueda ayudar
/*?Función del programa: ¿con despertador programado?*/
/*---------------------------------------------- ---- -*/
#include?
#define ?uchar?unsigned?char
#define?uint?unsigned?int
char?DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};/*Código de segmento de tubo Nixie de 0 a 9*/
uchar?hour=0,min=0,sec= 0;/*unidad de hora, minutos y segundos borrada*/
uchar?deda=0;/*unidad de conteo de 5mS borrada*/?
bit?d_05s=0;/* Marca de 0,5 segundos */
uchar?set=0;?/*Indicador de configuración de modo*/
uchar?m=0;
uchar?flag= 0; ?/*Indicador de apagado de RAM*/
void?delay(uint?k);?/*Función de retardo*/
void?conv();? /* Conversión de unidades de tiempo de viaje*/
void?disp();?/*Función de visualización del tiempo de viaje*/
/*---------- --- -----------¿Tiempo de viaje? ¿Parte de función?---------------------*/
/*Inicialización del dispositivo de sincronización T0?5mS*/
void?init_timer()
{
TMOD=0x01;
TH0 =-(4800 /256);
TL0=-(4800%256);
IE=0x82;
TR0=1;
}
/*---------------------------------*/ p>
/*¿Servicio de interrupción programada de 5mS?*/
void?T0_srv(void)?interrupt?1?
{
TH0= -(4800/ 256);
TL0=-(4800%256);
deda++;
}
/*- ---- -----------------------*/
/*Hora, minuto, segunda unidad y conversión de unidades de tiempo de viaje */
void?conv()
{?
if(deda<=100)d_05s=0; 1;
if(deda>=200){sec++;deda=0;}
if(sec==60){min++;sec=0;}
if(min==60){hora++;min=0;}
if(hora==24){hora=0;}
}
/* ------------------------?¿Pantalla?¿Parte de función?--------------- --------- --*/
/*Función de visualización del tiempo de viaje*/
void?disp()
{
P0=DATA_7SEG [hora/10];P2=0xf7;retraso(1);
P0=DATA_7SEG[hora%10
];P2=0xfb;retraso(1);
if(d_05s==1){if(P2_2==0)P0_7=0;else?P0_7=1;}
retraso(1);
P0=DATA_7SEG[min/10];P2=0xfd;retraso(1);
P0=DATA_7SEG[min%10];P2=0xfe ;retraso(1);
}
/*----------------------?Ajustar tiempo?función ¿Parte?------------*/
/*Ajustar tiempo de viaje*/
void?set_time()< / p>
{uchar?m; if(P2_5==0)retraso(1); if(P2_5==0)hora++; if(hora==24)hora=0; 30;m++) { disp(); si(P2_2==0)P0_7=0; si(P2_6== 0); )min++; si(min==60)min=0; para(m=0;m<30;m++) { disp();
if(P2_2==0)P0_7=0; ?P0_7=1; retraso(1); }
}
/*------------------?Escaneo de claves, ¿Retraso, etc.? Parte de función------------------*/
/*¿Programa de tiempo de viaje?*/
void?time()?
{
conv();/*?¿Conversión de unidad de tiempo de viaje?función?*/
disp();/ * ?Función de visualización del tiempo de viaje?*/
}?
/*---------------------- - -------------*/
/*Función de escaneo?*/
void?scan_key()
{
retraso(1);
if(P2_4==0)set++;
if(set>=2)set=0;
if(set==1)flag=0x55;?
F0:if(P2_4==0)goto?F0;?/*El botón no se suelta, esperando aquí*/
}
/*---------------------------------* /
/*Función de retardo*/
void?delay(uint?k)
{
uint?i,j ;
for(i=0;i for(j=0;j<121;j++) {;} } } /*-----------------------?Función principal?----- ---- ----------------?*/ /*Función principal*/ void?main() p> {? init_timer();?/*Inicialización del temporizador T0*/ while(1)?/*Bucle infinito*/ { if(P2_4==0)scan_key();/ *Hay una clave, ¿llamar a la función de escaneo de claves?*/ switch(set)?/*Cambiar según el valor de clave establecido*/ {? case?0: time();?break;/*programa de tiempo de viaje*/ case?1:set_ time();break;/*Ajuste del tiempo de viaje*/ default:break;?/*Otra salida*/ } if(flag!=0x55)?/* Determinar el indicador de apagado*/ {? P0=0xc0;?P2=0xc0;?delay(100);?P2=0xff;?delay(400) } } }