Red de conocimiento informático - Consumibles informáticos - ¿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?

¿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?

#include?

#include?"LCD1602.h"

#include?"DS1302.h"

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

unsigned?int?ReadTemperature(void);

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: Modificación 2009.5: Sin contenido: Programa de muestra de aplicación para la detección de temperatura de una sola línea 18B20

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

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

Inicialización 18b20

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

bit?Init_DS18B20(void)

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

}

void?DelayUs2x(unsigned?char?t)

{ mientras(--t);

}

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

Leer un byte

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

unsigned?char?ReadOneChar(void)

{

unsigned?char?i=0;

unsigned?char?dat?= ?0;

for?(i=8;i>0;i--) { DQ?=?0;?//?Dar señal de pulso dat>>=1; ;?//?Dar señal de pulso if(DQ)

dat|=0x80; DelayUs2x( } return(dat);

}

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

Escribir un byte

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

void?WriteOneChar(unsigned?char?dat)

{ unsigned? char ?i=0; para?(i=8;?i>0;?i--) { DQ?=?0; DQ?=?dat&0x01; = 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 leyendo el número de columna 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. (***9 registros ¿Se puede leer)? Los dos primeros es la temperatura

a=ReadOneChar();//bit bajo

b=ReadOneChar();//bit alto

b<<=8;

t=a+b;

return(t);

}

¿nulo? Retraso1ms(unsigned?int?count)

{

unsigned?int?i,j;

for(i=0;i

for(j= 0;j<120;j++);

}

main()

{

SYSTEMTIME?CurrentTime;

int?temp;

float?temperatura;

unsigned?char?dist[4];

LCD_Initial();

Inicial_DS1302();

Init_DS18B20();

GotoXY(14,0);

Imprimir (".");

GotoXY(15,1);

Imprimir("C");

while(1)

{

DS1302_GetTime (&CurrentTime);

TimeToStr(&CurrentTime);

DateToStr(&CurrentTime);

GotoXY(0, 0);Pri

nt("20");

GotoXY(2,0);

Print(CurrentTime.DateString);

GotoXY(0,1);

Imprimir(CurrentTime.TimeString);

temp=ReadTemperature();

temperatura=(float)temp*0.0625;

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

GotoXY(9,1);

Imprimir(dist);

Retraso1ms(400);

}

}