Para mostrar el código del ciclo del chip de reloj DS1302 en la pantalla LCD, se debe utilizar el lenguaje C.
Utilice microcontrolador 51, urgente!!!!
sbit T_IO = P2^3; /
sbit T_RST = P2^2; /* Pin de línea de reinicio del reloj en tiempo real*/
sbit ACC0=ACC^0
sbit ACC7= ACC^7 ;
sbit rs=P2^0;
sbit rw=P2^1
sbit e=P2^7;
sbit setd=P3^2;
sbit setd= P3^3;
sbit add=P2^5;
sbit enter=P2^ 6;
altavoz bit=P3^7;
pestaña de código de caracteres sin firmar[]={0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
void v_RTInputByte(unsigned char ucDa)
{
unsigned char i;
ACC = ucDa;
for(i=8; igt; 0; i--)
{
T_IO = ACC0; /* Equivalente a RRC en ensamblador */
T_CLK = 1;
T_CLK = 0;
ACC = ACC gt; /p >
carácter sin firmar uc_RTOutputByte(void)
{
carácter sin firmar i;
for(i=8; igt; 0; i- -)
{
ACC = ACC gt; 1; /*Equivalente a RRC en ensamblador */
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
retorno(ACC);
void v_W1302(car ucAddr sin firmar, ucDa sin firmar)
{
T_RST = 0
T_CLK = 0; > T_RST = 1;
v_RTInputByte(ucAddr); /* Dirección, comando*/
v_RTInputByte(ucDa) /* Escribir datos de 1Byte*/
T_CLK = 1;
T_RST = 0;
}
carácter sin firmar uc_R1302(carácter sin firmar ucAddr)
{
carácter sin firmar
T_RST = 0;
T_CLK = 0;
T_RST = 1; ); /* dirección, comando*/
ucDa = uc_RTOutputByte
(); /* Leer datos de 1Byte*/
T_CLK = 1;
T_RST = 0;
return(ucDa);
}
void v_BurstW1302T(unsigned char *pSecDa)
{
unsigned char i;
v_W1302(0x8e, 0x00); /* Comando de control, WP=0, ¿operación de escritura? */
T_RST = 0;
T_CLK = 0;
T_RST = 1
v_RTInputByte(0xbe); : Comando de escritura multibyte de reloj*/
for (i=8; igt; 0; i--) /*8Byte = 7Bytes de datos de reloj 1Byte de control*/
{
v_RTInputByte(*pSecDa);/*Escribir datos de 1Byte*/
pSecDa;
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstR1302T(carácter sin firmar *pSecDa)
{
carácter sin firmar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xbf); Comando de lectura multibyte de reloj*/
for (i=8; igt; 0; i--)
{
*pSecDa = uc_RTOutputByte() ; /* Leer 1 byte de datos*/
pSecDa.
}
T_CLK = 1;
T_RST = 0;
}
void v_BurstW1302R(carácter sin firmar *pReDa)
{
unsigned char i;
v_ W1302(0x8e, 0x00); /* Comando de control, WP=0, ¿operación de escritura? */
T_RST = 0;
T_CLK = 0;
T_RST = 1
v_RTInputByte(0xfe); : Comando de escritura de varios bytes del reloj*/
for (i=31; igt; 0; i--) /*datos de registro de 31 bytes*/
{ p >
v_RTInputByte(*pReDa); /*Escribe 1 byte de datos*/
pReDa;
}
T_CLK = 1;
T_RST = 0;
}
void v_ BurstR1302R(unsigned char *pReDa)
{
unsigned char i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
v_RTInputByte(0xff ); comando de lectura multibyte*/
for (i=31; igt; 0; i--) /*datos de registro de 31 bytes*/
{
*pReDa = uc_RTOutputByte(); /*Leer datos de 1 byte*/
pReDa;
}
T_CLK = 1 ;
T_RST = 0;
}
void v_setd1302(carácter sin firmar *pSecDa)
{
carácter sin firmar
p>unsigned char ucAddr = 0x80;
v_W1302(0x8e, 0x00); /* Comando de control, WP=0, ¿operación de escritura? */
for(i =7;igt;0;i--)
{
v_W1302(ucAddr, *pSecDa /* segundos minutos); Hora día mes aniversario */pSecDa;
ucAddr =2;
}
v_W1302(0x8e, 0x80); ¿Escribir protegido? */
}
retraso nulo()
{ unsigned char x, y
for(y=0; ylt; 0xff; y )
for(x=0; xlt; 2; x )
{;}
}/**** **** ********************************/ void wc51r(unsigned char j)//escribir comando
{
e=0; rw=0;
e=1; >e=0;
retraso();<
/p>
}void init()//Inicialización
{
wc51r(0x01);
wc51r(0x38);
wc51r(0x38);
wc51r(0x0e);
wc51r(0x06);
wc51r(0x0c);
}
void wc51ddr(unsigned char j)//escribir datos
{
e=0; >
e=1;
P1=j;
e=0;
retraso();
}nulo write1602(unsigned char add, unsigned char da)//escribir datos de visualización
{wc51r(add); wc51ddr(da);}
void main(void)
{
unsigned char ucCurtime[7];
unsigned char i, año, año, mes, monl, dah, dal, hoh, hol, mih, mil, seh , sel;
car ucAddr sin firmar
unsigned int c; for(c=0;clt;30000;c);
escribir1602(0x86, 0x32);
for(c=0;clt;30000;c);
escribir1602(0x87, 0x4D);
for(c=0;clt;30000;c);
escribir1602(0x88, 0x43);
for(c=0;clt;30000;c);
escribir1602(0x89, 0x55);
for(c=0;clt;30000; c);
/*write1602(0xC2, 0x51);
write1602(0xC3, 0x51);
write1602(0xC4, 0x3A);
escribir1602(0xC5, 0x35);
escribir1602(0xC6, 0x39);
escribir1602(0xC7, 0x37);
escribir1602(0xC8, 0x33);
escribir1602(0xC9, 0x38);
escribir1602(0xCA, 0x35);
escribir1602(0xCB, 0x33);
escribir1602(0xCC, 0x36);
escribir1602(0xCD, 0x39);
for(c=0;clt;50000;c);
init(); //inicialización LCD*/ TMOD=0X20;
TH1=0XF3.
TL1=0XF3;
SCON=0X50;
PCON=0X00;
IT0=1;
EX0=1;
IT1=1;
EX1=1;
TR1=1;
// EA=1;
ES=1;
{ucAddr = 0x81;lt;brgt;for (i=0;ilt;7;i)lt;brgt;{lt;brgt;ucCurtime[i] = uc_R1302(ucAddr);/* formato es: segundos, minutos, horas, días, meses y aniversario*/lt; ucAddr =2;}
yearh=ucCurtime[6]/16;
añol=ucCurtime[ 6]16;
monh=ucCurtime[4]/16;
monl=ucCurtime[4]16;
dah= ucCurtime[3]/16 ;
dal=ucCurtime[3]16; hoh=ucCurtime[2]/16;
hol=ucCurtime[2]16;
mih=ucCurtime [2]16;
mih=ucCurtime[1]/16;
mil=ucCurtime[1]16;
seh =ucCurtime[0]/ 16;
sel=ucCurtime[0]16; //EA=1; write1602(0x80, 0x44);
write1602(0x81, 0x61);
write1602(0x82, 0x74);
write1602(0x83, 0x65);
write1602(0x84, 0x3a); //Mostrando fecha.write1602(0x85); , tab[añoh]) ;
write1602(0x86, tab[año]);
write1602(0x87, 0x2d); //Mostrar año
write1602 (0x88, tab[monh ]);
write1602(0x89, tab[monl]);
write1602(0x8a, 0x2d); //Mostrar mes
write1602(0x8b, tab [dah]);
write1602(0x8c, tab[dal]).write1602(0xc0, 0x54);
write1602(0xc1, 0x69);
write1602(0xc2, 0x6d);
write1602(0xc3, 0x65);
write1602(0xc4, 0x3a); //mostrar hora: write1602(0xc5, tab[hoh]);
write1602(0xc6, tab[hol]);
write1602(0xc7, 0x3a); //Mostrar horas
write1602( 0xc8, tab[mih] );
write1602(0xc9, tab[mil]);
write1602(0xca, 0x3a); //Mostrar horas
write1602(0xcb, tab[ seh]);
write1602(0xcc, tab[sel]);
/*if((ucCurti)
me[1]==0)amp;(ucCurtime[0]==0|ucCurtime[0]==1|ucCurtime[0]==2)))//3 segundos de timbre cada hora
altavoz=0;
else altavoz=1; **/}
}/********************* *** *************************/
serint() interrupción 4
{// EA =0;
carácter estático sin signo k;
temperatura de carácter sin signo, año, mes, fecha, hora, minuto, segundo, semana
temperatura de carácter sin signo; [7] ={0};
RI=1;
temp= SBUF;
RI=0
k ;
cambiar (k)
{ caso 1: sec=temp;
descanso
caso 2: min=temp; /p>
descanso;
caso 3.hora=temp;
descanso
caso 4: fecha=temp
descanso ;
caso 5: mes=temp;
descanso
caso 6: semana=temp
descanso;
caso 7: año=temp; k=0;
descanso
stemp[0]=(seg/10)*16 seg10; p>
paso[1]=(min/10)*16 min10;
paso[2 ]=(hora/10)*16 hora10; ]=( fecha/10)*16 fecha10;
stemp[4]=(mes/10)*16 mes10;
stemp[5]=(semana/10)* 16 semana10;
stemp[6]=(año/10)*16 año10;
v_setd1302(stemp); //establecer valor
} p>
}
}