Red de conocimiento informático - Material del sitio web - ¿Tienes un programa en lenguaje C para implementar un reloj electrónico basado en el microcontrolador 51? Utilice una pantalla LED como pantalla, preferiblemente con función de despertador... ¡Gracias!

¿Tienes un programa en lenguaje C para implementar un reloj electrónico basado en el microcontrolador 51? Utilice una pantalla LED como pantalla, preferiblemente con función de despertador... ¡Gracias!

#include

#include

//Definición*** código de fuente de ánodo 0123456789-

dispcode de código de caracteres sin firmar []={0xc0, 0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};

tiempo de carácter sin firmar[]={0,0,0,0}; //Se usa para almacenar la hora

unsigned char date[]={0,0,0,0}; //Se usa para almacenar la fecha

unsigned char year[]={0 ,0,0,0};// Se usa para almacenar el año

unsigned charweek[]={0};// Se usa para almacenar la semana

SYSTEMTIME time1; / En una estructura llamada SYSTEMTIME time1 se define en el archivo ds1302.h Aquí definimos un nombre de variable

//La estructura SYSTEMTIME se usa para almacenar el tiempo

retraso vacío (carácter sin firmar). i ) //subrutina de retraso

{

carácter sin signo j

mientras((i--)!= 0)

{

for(j=123;j>0;j--);

}

}

unsigned char button_time( n,x,y) //subrutina de ajuste del reloj

unsigned char n,x,y;

{

if(P1_7==0)< / p>

{

retraso(50);

si(P1_7==0)

{

n++; /p>

if(n==x)

n=0;

while(P1_7==0); // Espera a que se suelte la tecla

}

}

if(P1_5==0)

{

retraso(50);

si(P1_5==0)

{

si(n==0)

n=y;

else

n--;

mientras(P1_5==0);

}

}

Return n;

}

unsigned char button_date(n,x,y) //Subrutina de ajuste de fecha

unsigned char n,x,y;

p>

{

if(P1_7==0)

{

retraso(50);

si(P1_7 ==0)

{

n++;

si(n==x)

n= 1;

mientras(P1_7==0);

}

}

si(P1_5==0)

{

retraso(50);

si(P1_5==0)

{

si(n==1 )

> n=y;

<

p> else

n--;

mientras(P1_5==0);

}

}

return n;

}

unsigned char button_year(n,x,y) //subrutina de ajuste de año

unsigned char n,x,y;

{

si(P1_7==0)

{

retraso(50);

si (P1_7==0)

{

n++;

si(n= =x)

n=2;

mientras(P1_7==0);

}

}

si(P1_5==0)

{

demora(50);

si(P1_5==0)

{

si (n==2)

n=y;

else

n--;

mientras(P1_5==0);

}

return n;

}

void display(minuto10, minuto1,hora10,hora1) //Mostrar subrutina

unsigned char minuto10,minuto1,hora10,hora1;

{

P2=0xfe;

P0=dispcode[minuto10] //Mostrar décimas El número de minutos

delay(1);

P2=0xfd;

P0=dispcode[minuto1] //Mostrar una fracción de minuto

retraso(1);

P2=0xfb;

P0=dispcode[hora10]; //Se muestra como decenas de dígitos

retraso(1);

P2=0xf7;

P0=dispcode[hora1];/Dígitos decimales al mostrar

retraso(1);

}

visualización nula1(semana1)

visualización nula1(semana1)

carácter sin firmar semana1;

{

P2=0xef;

P0=dispcode[semana1]

retraso(1

}

void main()

<); p>{

bandera de carácter unsigned,aa=2,bb=0;

Initial_DS1302();//inicializa el chip de reloj DS1302,

p>

while(1)

{

DS1302_GetTime(&time1); //leer el parámetro de tiempo

time[3]=(time1. Minute)%10; //Ingrese los datos de un solo dígito del minuto en el tiempo[3]

time[2]=(time1.Minute)/10 //Ingrese los datos de decenas de dígitos del minuto en el tiempo [ 2]

time[1]=(time1.Hour)%10; //almacena el dígito de la hora dat

a into time[1]

time[0]=(time1.Hour)/10; //almacena los datos decimales de la hora en time[0]

date[3]= (hora1.Día)%10;

fecha[2]=(hora1.

fecha[1]=(hora1.Mes)%10;

fecha[0]=(hora1.Mes)/10;

año[1]=(hora1.Año)%10;

año[0]=(hora1.) / Semana);

semana[0]=(hora1.)Semana);

display1(semana[0]); //Mostrar la semana

if (P1_4==0) //Si presiona el inicio de la hora durante un segundo, el reloj comienza a mostrar la hora normalmente, luego muestra la fecha nuevamente y luego muestra el año nuevamente.

{

retraso(50);

si(P1_4==0)

{

bandera++ ;

if(bandera>2)

{

bandera=0;

}

}

while(P1_4==0);

}

if(P1_6==0) // Si presiona el botón de configuración de hora una vez, la fecha comience a mostrarse Presione nuevamente para comenzar a mostrar el año, presione nuevamente para ingresar al modo de ajuste de año, fecha, semana y hora

{

retardo(50);

if(P1_6 ==0)

{

bandera++;

if(flag>8)

{

bandera =0;

}

}

mientras(P1_6==0);

}

cambiar (bandera)

{

caso 0: visualización (hora[0], hora[1], hora[2], hora[3]) ; //Llama a la visualización de la subfunción, muestra los datos almacenados en la matriz de tiempo

break;

case 1:display(date[0],date[1],date[ 2],date[3]) ; //Llama a la subfunción display para mostrar los datos almacenados en la matriz de fechas

break;

caso 2: display(aa,bb ,año[0],año[1] ); // Llama a la subfunción de visualización para mostrar los datos almacenados en el tiempo

break;

case 2:display(aa, bb,year[0],year[1] ); // Llama a la subfunción display para mostrar los datos almacenados en la matriz año

break;

case 3:time1 .year=button_year(time1.year,2099,2098) ; // Ajustar el año

DS1302_ SetTime(0x8c,time1.Year);

display(aa,bb,year) [0],año[1]);

break;

case 4:time1.Month=button_date(time1.Month,13,12); //Ajustar el mes

DS1302_SetTime(0x88,time1.Month);

descanso;

caso 8:time1.Minute=button_time(time1.Minute,60,59); /ajustar minutos

DS1302_SetTime(0x82,time1 .Minute);

mostrar (10,10,time[2],time[3]);

romper;

}

}

}

}