¿Puede escribir un programa en lenguaje C que utilice el microcontrolador at89c52 y requiera el uso de una pantalla LCD 1602 para mostrar la programación actual de hora y temperatura?

#include?lt;REGX52.Hgt;

#include?lt;stdio.hgt;

#include?"LCD1602.h"

#include?"DS1302.h"

sbit?DQ=P3^0; //ds18b20?port

unsigned?int?ReadTemperature(void); p>

bit?Init_DS18B20(void);

unsigned?char?ReadOneChar(void);

void?WriteOneChar(unsigned?char?dat);

void?DelayUs2x(unsigned?char);

void?Delay1ms(unsigned?int);

/*----------- -- ---------------------------------- Nombre: sensor de temperatura 18B20 Sitio web: www.doflye.net Escrito por : shifang Fecha: 2009.5 Modificación: Ninguna Contenido: programa de muestra de aplicación de detección de temperatura de una sola línea 18B20

------------------------ ----------------------*/

/*---------------- -- --------------------------

Inicialización 18b20

----- - --------------------------------------------------* /

bit?Init_DS18B20(void)

{ bit?dat=0; DQ?=?1; //Reinicio de DQ DelayUs2x(5); //Retraso leve DQ?= ?0;? //El microcontrolador baja DQ DelayUs2x(200);?//¿Retraso preciso? Mayor que?480us? Menos de 960us DelayUs2x(200); );?//15 Después de ~60us?, recibe el pulso de existencia de 60-240us dat=DQ; //Si x=0, la inicialización es exitosa, si x=1, la inicialización falla DelayUs2x(25);?/ /Regreso después de un ligero retraso return?dat

}

void?DelayUs2x(unsigned?char?t)

{ while(--t);

}

}

}

p>

/*------------ ---------------------------------- -----

Leer un byte

-------------------------- ------------------ -----*/

unsigned?char?ReadOneChar(void)

{

unsigned?char?i=0;

unsigned?char?dat?=?0;

for?(i=8;igt;0;i-- ) { DQ?=?0;?//?Dar señal de pulso datgt; gramo

t;=1; DQ?=?1;?//?Dar señal de pulso if(DQ)

dat|=0x80; DelayUs2x(25); p>}

/*-------------------------------- -------- ----------

Escribir un byte

--------------- ------ -----------------*/

void?WriteOneChar(unsigned?char?dat )

{ unsigned?char?i=0; para?(i=8;?igt;0;?i--) { DQ?=?0; (25); DQ ?=?1; datgt;gt;=1; }

DelayUs2x(25);

}

/*--- ----- ----------------------------------------

Leer temperatura

----------------------------------------------- --------- -----*/

unsigned?int?ReadTemperature(void)

{

unsigned?char? a=0;

unsigned?int?b=0;

unsigned?int?t=0;

Init_DS18B20();

WriteOneChar(0xCC);?/ /?Omitir la operación de lectura del número de serie

WriteOneChar(0x44);?//?Iniciar conversión de temperatura

Delay1ms(10);

Init_DS18B20( );

WriteOneChar(0xCC);?//¿Omitir la operación de lectura del número de serie?

WriteOneChar(0xBE);?// Leer el registro de temperatura, etc. (*** ¿Se pueden leer 9 registros? Los dos primeros son temperatura

a=ReadOneChar() //bit bajo

b=ReadOneChar). (); //bit alto

blt;lt;=8;

t=a b;

return(t);

}

void?Delay1ms( unsigned?int?count)

{

unsigned?int?i,j;

para (i=0;ilt;count;i)

for(j=0;jlt;120;j);

}

main()

{

SYSTEMTIME?CurrentTime;

int?temp;

float?temperatura;

unsigned?char ?dist[4];

LCD_Initial();

Inicial_DS1302();

Init_DS18B20()

GotoXY(14, 0);

Imprimir(" .");

Ir aXY(15,1)

;

Imprimir("C");

while(1)

{

DS1302_GetTime(amp; CurrentTime);

p>

TimeToStr(amp; CurrentTime);

DateToStr(amp; CurrentTime

GotoXY(0, 0);

GotoXY(2, 0);

Imprimir(CurrentTime.DateString

GotoXY(0, 1); > Print(CurrentTime. TimeString);

temp=ReadTemperature();

temperatura=(float)temp*0.0625

sprintf(dist, "4f ", temperatura);

GotoXY(9, 1);

Imprimir(dist);

Delay1ms(400);

}

}

ts reserved