Red de conocimiento informático - Conocimiento informático - 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!!!!

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!!!!

#include lt; reg52.hgt; sbit T_CLK = P2^4; /* Pin de línea de reloj de tiempo real*/

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*/

{

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

}

}

}