Cómo llamar al reloj del sistema en c para mostrarlo digitalmente con precisión en segundos y convertir 12 horas a 24 horas con AMPM
#define uchar unsigned char
#define uint unsigned int
//////////// ////////////////////////// /////////////////////
//definición de función clave
/////////////////////////////////// //// ///////////////////
sbit se=P2^0 //selección del bit de calibración
sbit; ad=P2^1 ; //agregar/borrar
sbit dw=P2^2; //Reducir/iniciar/pausar cronómetro
sbit ch=P2^3; cronómetro y reloj p>
//Para simplificar el código, se agrega un interruptor y la tecla del cronómetro ya no se reutiliza
/////////// //// ////// /////////////////////////////////////////
uchar code tab[] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xbf};
uchar buf[3]= {15, 4, 19}; //caché de datos
/////////////////////////////// ////////////// /////////////////////////////////////
uint sec=0; / /segundos
uchar n, count; //count
número de uchar; //bit de selección de tiempo
bit flag, flag1; //cambio de función de bandera; bandera1 pausa/ iniciar bit de bandera
/////////////////////// /// //////////////// /////////////////////////////
retraso nulo(uchar i) //retraso i*2ms
{
uchar j=240;
while(i--)
while (j--);
}
void display(bit t) //Mostrar subfunción, indicador de visualización de bits de parámetro formal, reloj bit 0 , bit 1 cronómetro
{
uchar i , flash
static cn=0
uchar tbuf[8]; /p>
uchar dbuf[8];
if(! t) //visualización del reloj
{
tbuf[0]=tab[buf[0]10]
tbuf[1]=tab[buf] [0]/10];
tbuf[2]=tab[10];
tbuf[3]=t
ab[buf[1]10];
tbuf[4]=tab[buf[1]/10];
tbuf[5]=tab[10]; p> p>
tbuf[6]=tab[buf[2]10];
tbuf[7]=tab [buf[2]/10];
switch( número)
{
caso 1: tbuf[0]=tbuf[0]|flash; tbuf[1]=tbuf[1]|flash;
p>
caso 2: tbuf[3]=tbuf[ 3]|flash; tbuf[4]=tbuf[4]|break
caso 3: tbuf[6]=tbuf; [6 ]|flash; tbuf[7]=tbuf[7]|flash; romper;
}
for(i=0;ilt;8.i)
{
P0=(0x01lt;lt;i);
P1=tbuf[i]
retraso(1); p>
P1=0xff;
}
cn
si(cn==25)
{ p>
cn=0;
flash=~flash;
}
}
else //visualización del cronómetro
{
dbuf[0]=n/10;
dbuf[1]=10
dbuf[2]=sec6010; ;
dbuf[3]=sec60/10;
dbuf[4]=10
dbuf[5]=seg/6010; >
dbuf[6]=seg/60/1010;
dbuf[7]=seg/60/ 100;
for(i=0; ilt; 8; i )
{
P0=(0x01lt;lt;i);
P1=tab[dbuf[i]];
retraso (1);
P1=0xff;
}
}
}
}
void chang() // Cambio de funciones, cambio entre reloj y cronómetro, así como pausar/iniciar y borrar subfunciones
{
if(ch; ==0 )
{
retraso(15);
si(ch==0)
{
while(ch==0) display(flag); // Libera la detección, llama a la función de visualización para evitar la interrupción de la visualización, como se muestra a continuación
flag=~flag;
if(bandera )
{
número=0
TR0=1
TR1=0;
}
más
{
TR0=1
TR1=0;
}
}
}
si(bandera)
{
si(dw= =0)
{<
/p>
retraso(15);
if(dw==0)
{
while(dw==0) mostrar(1 );
bandera1=~bandera1
if(bandera1)
{
TR1= 1; > TR0=1;
}
más
{
TR1=0
TR0=1; ;
}
}
}
}
}
si( anuncio==0)
{
retraso( 15);
if(ad==0)
{
while(ad==0) display(1);
seg=0; n=0;
TR1=0;
}
}
}
}
}}
void ch_time() // Subfunción de ajuste de tiempo
{
if(!flag)
{
if(se==0)
{
retraso(15);
si(se==0)
{
mientras(se= = 0) mostrar(0);
TR0=0
número
if(número==4)
{
número=0; //Evitar el escape del programa
TR0=1
}
}
}
}
if(ad==0) // Modo de ajuste del reloj, agrega
{
delay(15);
if(ad==0)
{
mientras(ad==0) mostrar(0);
cambiar( número )
{
caso 1: buf[0]; if(buf[0]==60) buf[0]=1; > caso 2: buf[1]; if(buf[1]==60) buf[1]=1;
caso 2: buf[1]; = 60) buf[1]=1; romper
caso 3: buf[2] ; if(buf[2]==24) buf[2]=1;
Valor predeterminado: descanso
}
}
}
}
if(dw = =0) // Modo de ajuste del reloj signo menos
{
p> delay(15);
if(dw==0)
{
while(dw==0) display(0);
cambiar(número)
{
caso 1: buf[0]--; if(buf[0]==0) buf[0]=59;
ejemplo 2: buf[1]--; if(buf[1]==0) buf[1]=59;
caso 3: buf[2]--; 2]==0) buf[2]=23; romper
predeterminado:
}
}
}
}
}
}
void main()
{
IE=0x8a; // Activa las interrupciones generales, las interrupciones del temporizador T1 y T0
TMOD=0x11; // Establece los bits T1 y T0.
//Establece el modo de trabajo 1 del bit T1, T0
TH0=0xD8;
TL0=0xF0; //T0 reimprime el valor inicial
TH1=0xD8;
TL1=0xF0; //T1 reimprime el valor inicial
TR0=1; //Inicia el reloj y comienza a trabajar
while( 1)
{
ch_time(); // Configuración de hora
chang(); // Cambio de modo
display(flag); p>
}
}
void time_T0() interrupción 1 // Temporizador 0, modo de trabajo 1, interrupción del reloj
{ p >
TH0=0xD8
TL0=0xF0
cuenta
si(cuenta==90)
{
cuenta=0;
buf[0] ;<
si(buf[0]==60)
{
buf[0]=0;
buf[1]
si(buf[1]==60)
{
buf[1]=0
buf[2]
si (buf[2]==60) buf[2]=0;
}
}
}
}
}
nulo sec_T1; ( ) Interrupción 3 // Temporizador 1, modo de funcionamiento 1, interrupción del cronómetro
{
TH1=0Xd8
TL1=0Xf0; p > contar ;
n
si(n==90)
{
n=0;
seg;
if(sec==65000) //El temporizador puede ser de hasta 650 minutos
sec=0;<
}< / p>
if(count==90)
{
count=0
buf[0]; > if(buf[0]==60)
{
buf[0]=0
buf[1]
<; p > if(buf[1]==60){
buf[1]=0
buf[2]
;if(buf[2]==60) buf[2]=0
}
}
}
}
}
}
}