La Red de Conocimientos Pedagógicos - Conocimientos de formación/capacitación - Proyecto de graduación del Calendario Perpetuo del MCU

Proyecto de graduación del Calendario Perpetuo del MCU

Esto no es difícil. Está por todo Internet. Puede elegir DS1302 como chip de calendario y no le costará mucho dinero. Si elige la serie de microcontroladores STC, no le costará ni un centavo.

El principio es súper simple, simplemente haga clic en Baidu y estará bien.

Darte un programa de referencia.

Espero que te ayude.

voids 1302 _ limit(void)//Inicialización

{

ds 1302 _ write enable();

ds 1302 _ OSC enable();

for(ds 1302_b = 0;ds 1302_b lt;7;ds1302_b)

ds 1302_SendByte(ds_sec 2 * ds 1302 _ b, d 1302 [ds 1302 _ b]); //Inicialización de la asignación

}

Uchar ds1302 _ read (dirección de uchar) //Leer reloj

{

uchar dat

ds 1302 _ write enable();

Cambiar (dirección)

{ caso 0: dat = ds 1302 _ recibir byte(ds _ seg 1);

Pausa;

caso 1: dat = ds 1302 _ recibir byte(ds _ min 1);

Caso 2: dat = ds 1302 _ recibir byte(ds _ hora 1);

Pausa;

Caso 3: dat = ds 1302 _ recibir byte(ds _ día 1);

Break;

Caso 4: dat = ds 1302 _ recibir byte(ds _ semana 1); p>Caso 5: dat = ds 1302 _ recibir byte(ds _ mes 1);

Pausa;

Caso 6: dat = ds 1302 _ recibir byte(ds _ año 1

Romper;

}

ds 1302 _ escribir desactivar();

regresar (dat);

}

void DS1302_Write(uchar dirección, uchar dat)

{

ds 1302 _ write enable() ;

Switch(dirección)

{

Caso 0: DS1302_SendByte(ds_sec, dat);

Pausa;

Caso 1: ds 1302 _ enviar byte(ds _ min, dat);

Pausa;

Caso 2: DS1302_SendByte(ds_hour, dat);

Caso tres: DS1302_SendByte(ds_day, dat);

Pausa;

Caso cuatro: DS1302_SendByte(ds_week, dat);

Pausa;

Caso cinco: DS1302_SendByte(ds_month, dat);

Pausa;

Caso seis: DS1302_SendByte(ds_year, dat);

Pausa;

}

ds 1302 _ escritura desactivar();

}

Ds1302pro()

//Leer datos

{

nian 01 = ds 1302 _ recibir byte (ds _ año 1); ds _ mes 1);

ri 01 = ds 1302 _ recibir byte(ds _ día 1);

Xiaoshi 01 = ds 1302 _ recibir byte(ds _ hora 1);

sec 01 = ds 1302_receive byte(ds_sec 1); //Información de cuenta regresiva

min 01 = ds 1302_receive byte(ds_min 1);/ /Leer información

Stephen Chow = ds 1302 _ recibir byte(ds _ semana 1);

d 1302 _ transfer(); // El procesamiento numérico extrae el valor que se mostrará.

}

void ds1302 _ send byte (uchar command, uchar xmtdat)//Programa de envío de datos, envía 1 byte al ds 1302 controlado.

{

Uchar I

RST = 0

_ nop _(); = 0;

_ nop _();

RST = 1;

for(I = 0;ilt8;i)

{

IO_DATA=(bit)(comando amp0x 01);

Comando = Comando gt gt1;

SCLK = 1;

_ nop _();

SCLK = 0;

}

for(I = 0;ilt8;i)

{

IO_DATA=(bit)(XmtDat amp0x 01);

XmtDat = XmtDat gt gt1;

SCLK = 1;

_ nop _();

SCLK = 0;

}

RST = 0;

}

uchar ds 1302 _ recibir byte (comando uchar) // El programa de recepción de datos recibe 1 byte de datos del DS1302 controlado.

{

uchar i, rcv dat = 0

RST = 0

_ nop _(); >

SCLK = 0;

_ nop _();

RST = 1;

for(I = 0;ilt8;i)

{

IO_DATA=(bit)(Comando amp0x 01);

Comando = Comando gt gt1;

SCLK = 1; /p>

_ nop _();

SCLK = 0;

}

for(I = 0; i lt7; i )

{

if(IO _ DATA)rcv dat | = 0x 80

RcvDat = RcvDat gt gt1

SCLK = 1; ;

_ nop _();

SCLK = 0;

}

if(IO _ DATA)rcv dat | 0x 80;

RST = 0;

Devolver RcvDat

}

void ds 1302 _ write enable(void)// Permitir datos que se escribirán en el registro.

{

DS1302_SendByte(ds_com, 00);

}

void ds 1302 _ write enable(void)//Desactivar datos Escribe para registrarte.

{

DS1302_SendByte(ds_com, 0x 80);

}

void ds 1302 _ OSC enable(void)//Iniciar Funcionamiento del reloj.

{

DS1302_SendByte(ds_sec, 0x 00);

}

voids 1302 _ OSC deshabilitar(void)//Detener el el reloj funciona.

{

DS1302_SendByte(ds_sec, 0x 80);

}

void d 1302 _ transfer(void)//Conversión de datos Función

{

año 02 = año 01 amp 0x0f

nian 01 = nian 01 gt4

yue 02 = yue 01 & 0x0f

yue 01 = yue 01 gt4;

ri02 = ri 01 & 0x0f

ri 01 = ri 01 gt4 ;

Xiaoshi 02 = Xiaoshi 01 amp; 0x0f

Xiaoshi 1 = Xiaoshi 1 gt4;

min 02 = min 01 amp; p>min 01 = min 01 gt; gt4;

sec 02 = sec 01 amp;/Toma los cuatro bits bajos de la señal Miao.

sec 01 = sec 01 gt; gt4; //Toma los cuatro dígitos superiores

}

Void delay1302(int i) //Función de retardo

p>

p>

{

uchar x, j;

for(x = 0; x lt i; x )

{

for(j = 0; j lt125; j ){;}

}

}