Informe de propuesta sobre diseño de reloj digital basado en microcontrolador
// Tengo un despertador programado aquí. Solo necesita cambiar la interrupción del timbre a LED. A través de P2^0--P2^3, puede ver la visualización del cronómetro y ajustar la hora y los minutos. y ajuste el despertador. Si tiene alguna pregunta sobre el interruptor del despertador, deje un mensaje QQ834589429
#include
code?unsigned?char. ?tab[]= {0x3f,0x06,0x5b, 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};? //*** ¿Tubo catódico?
sbit?A1=P2^0;
sbit?A2=P2^1;
sbit?A3=P2^2;
sbit?A4=P2^3;
sbit?beep=P1^4;
¿sin firmar?char?Shiwan;
¿sin firmar?char?Wanwei ;
unsigned?char?Qianwei;
unsigned?char?Baiwei;
unsigned?Shiwei; //definir dígitos de decenas
unsigned?char?gewei,zhiling1,zhiling2,zhiling3,zhiling4;?//definir un solo dígito
static?unsigned?char?hour=12,minuto= 30,segundo=0,count=0;
estático?unsigned?char?alarmhour=12,alarmminuto=29,i=0,j =0,k;
/* *********** **************************************** ********** *****/?
/*Función de retardo**
/************ ********** ***************************************** ****/
void?delay(unsigned?int?cnt)
{? while(--cnt);
} void?xianshi(void) p>
{? p>
Gewei=tab[segundo%10];?
Gewei=tab[segundo%10];?
Shiwei= tab[segundo/10] // ¿Procesamiento del valor de visualización de diez dígitos?
if(segundo%2==0)? {Cientos dígitos=tab[minutos%10];Miles dígitos=tab[minutos /10];//? p>
} más?
Qianwei=(tab[minuto/10]|0x80 } if(segundo%2!=0)
{
;Wanwei=tab[hora%10]; Shiwan=tab[hora/10] }
¿otra cosa?
{?
Wanwei=( tab[hora%10]|0x80); Shiwan=(tab[hora/10]|0x80 } Naoling1=~tab[alarmahora%10]; %10]; Naoling4=~tab[alarmminuto/10]; }?
void?timer0()?interru
pt?3?using?1
{
TH1=0x3c;?//¿Interrumpir la inicialización de la configuración?
TL1=0xb0;
if(alarmhour==hora&&alarmminuto==minuto&&j==1)
{
beep=0;
}
}
} /** ************************ *****************************************/?
/* ¿Función de interrupción del temporizador? */?
/*************************************** *** ****************************/?
¿void?timer1()?interrupt?1?using ?0?
{
TH0=0xd8;?
TH0=0xd8;?
TL0=0xf0;?
count++;
xianshi();
if?(count==99)?//100x10ms=1S, ¿tiempo de retraso aproximado? {?
count=0;
segundo++;//segundos más 1? if(segundo==60)? 0;? { si(minuto==60)? hora++; {? si(minuto==60)?
minuto=0;? }? } } } } } } /*************************************** ** ****************************/
/*¿Función principal?*/
/* ********************************************** ***** ****************/
void?main()
{
TMOD? |=0x01;/ /¿Configuración del temporizador? 10 ms, oscilador de cristal de 12 M, funcionando en modo 1, temporización de 16 bits.
TH0=0xd8;
TL0=0xf0;
IE=?//Activar interrupción
TR0=1;?/ / Enciende el interruptor de sincronización
xianshi();EA=1;ET0=1;TMOD?|=0x21;TR0=1;?// Enciende el interruptor de interrupción principal, el contador 0 permite interrupciones, configure el modo de interrupción, inicie el contador 0
ET1=1;TR1=1; while(1) { { if(!A3) {? delay(10000); >
i++; si(i==7)i=0;?
xianshi(); }? } } { si (!A4)? { retraso(10000); if(!A4) {
i--;if(i==255)i=6;
xianshi() }? switch(i) {
case?//Control de visualización normal{ P1=0x1e;?
P1=0x1e;? P0=~Baiwei;?//Retraso de bits de visualización (300) );//¿breve demora? P1=0x1d; //chip selecciona diez P0=~Qianwei;
reproducir diez retrasos (300);//retraso corto P1=0x1b;?//chip seleccionar cien P0=~Wanwei;//mostrar cien retrasos(300);//retraso corto P1=0x17;?//chip seleccionar mil P0 =~Shiwan;?//mostrar miles de retraso(300);//retraso corto P1=0x1f; P0=0xff; retraso(300); control de puntuación de sintonización { if(segundo%2!=0) {? P1=0x1e;? P1=0x1e;? P0=~Baiwei;?//Mostrar retraso de bits (300);//¿retraso corto? /chip selecciona diez bits P0=~Qianwei;//muestra retraso de diez bits(300);//retraso corto P1=0x1f P0=0xff(300);
}
<; p>elseretraso(300);
retraso(300);
{
if(!A1)
{
retraso(10000);//delimit
if(!A1)
{?
minuto++; if(minuto==61)minuto=0;
xianshi();
}?
}// ¿Procesamiento de claves?
}?
{
if(!A2)
{
retraso(10000);/ /retraso?
if(!A2)
{?
minuto--;if(minuto==255)minuto=59;
xianshi();
}?
}?
}
};romper;
case?2:?// Control de tiempo { if(segundo%2==0) { P1=0x1b;?//chip selecciona cien P0=~Wanwei;//muestra cien retraso(300);//breve retraso P1 =0x17;?//seleccionar chip mil P0=~Shiwan;?//mostrar retraso de mil dígitos(300);//retraso corto P1=0x1f; P0=0xff; >retraso(300);
retraso(300); {
if(!A1)
{
retraso(10000) ;//retraso
if(!A1)
{
hora++;if(hora==24)hora=0;
xianshi();
}
}//¿Manejo de claves?
}
{
si (!A2)
{?
delay(10000);//difuminado
if(!A2)
{?
hora--;if(hora==255)hora=23;
xianshi();
}
} p>
}
p>
}
}
}} };break; case?:?//Segundo control de visualización{ P1=0x1e;? Gewei;?//Mostrar retraso de bits(300);//retraso corto? P1=0x1d;//seleccionar chip diez bits P0=~Shiwei;//mostrar retraso de diez bits(300);//retraso corto P1=0x1f; P0=0xff; retraso(300);
retraso(300);
retraso( 300);interrupción
caso?:// Alarma; controlar
{?
if((!A1)||(!A2))
{
retraso(10000) ;
if((!A1)||(!A2))j++;
if(j==2)
j=0;
p>
}
¿interruptor?(j)
{
caso?0:{ P1=0x1e; ?
P1=0x1e;? P0=~0x71;? P1=0x1e;? P1=0x1d; //chip selecciona diez bits P0=~0x71; //muestra diez bits de retraso(300);/ /retardo corto P1 =0x1b;?//chip selecciona cien P0=~0x3f;//muestra retardo de cien(300);//retardo corto P1=0x17;?//chip selecciona mil dígitos P0=~0x40;?// mostrar retraso de mil dígitos (300);//retraso de retraso corto(300); };break;
case?1:{ P1=0x1e;? P1=0x1e;? =~0x37; //muestra retraso de bits(300);//retraso corto? P1=0x1d; //selecciona chip de diez bits P0=~0x3f; //muestra retraso de diez bits(300);//retraso corto P1= 0x1b;?/ /chip seleccionar cien P0=0xff;//mostrar cien retraso(300);//retraso corto P1=0x17;?//chip seleccionar miles P0=~0x40;?//mostrar kilobits de retraso(300); //retraso corto delay(300);
} }
};break;?
caso?://Ajuste de minutos de alarma
{
{
P1=0x1e;
P0=Naoling3;
retraso(300);
P1= 0x1d;
P0=Naoling4;
retraso(300);
P1=0x1e;
P0=Naoling3 ;
retraso(300);
retraso(300);
P1=0x1d;
P0=Naoling4;
P0=Naoling4;
retraso(300);
P1=0x1f;
P0=0xff;
retraso (300);
retraso(300);
);
retraso(300);
retraso(300);
}
{
si (!A1)
{
retraso(10000);//fade
if(!A1)
{ ? p>
alarmminuto++;if(alarmminuto==61)alarmminuto=0;
?}
}// ¿Procesamiento de claves?
}?
{
if(!A2)
{
retraso(10000);/ /delimitar?
if(!A2)
{?
minuto de alarma--;if(minuto de alarma==255)minuto de alarma=59;
}?
}?
}
};romper;
caso?:
{
{
P1=0x1b;
P0=Naoling1;
retraso(300);
P1=0x17;
P0=Naoling2;
retraso(300);
P1=0x1f;
P0=0xff;
retraso(300);
retraso(300);
retraso(300);
retraso(300);
}
{
if(!A1)
{
retraso(10000);//retraso p>
if(!A1)
{?
alarmhour++;if(alarmhour==24)alarmhour=0;
?} p>
}//¿Procesamiento de botones?
}
{
if(!A2)
{
retraso(10000);// ¿delimitar?
if(!A2)
{?
alarmhour--;if(alarmhour==255)alarmhour=23;
}?
}
};romper;
predeterminado?:romper;
}
}
}
}
}
}
}
}
}
}.