Red de conocimiento informático - Material del sitio web - Informe de propuesta sobre diseño de reloj digital basado en microcontrolador

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>

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];//?

} 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>else

retraso(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>

}

}

}} };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)

{

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

if(!A1)

{?

alarmhour++;if(alarmhour==24)alarmhour=0;

?}

}//¿Procesamiento de botones?

}

{

if(!A2)

{

retraso(10000);// ¿delimitar?

if(!A2)

{?

alarmhour--;if(alarmhour==255)alarmhour=23;

}?

}

};romper;

predeterminado?:romper;

}

}

}

}

}

}

}

}

}

}.