Proyecto de graduación del Calendario Perpetuo del MCU
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; p>
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;
} p>
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 ){;}
}
}