麻烦你能不能写一个c语言程序 用at89c52单片机要求使用1602液晶显示当前时间和温度编程

#include?<REGX52.H>

#include?<stdio.h>

#include?"LCD1602.h"

#include?"DS1302.h"

sbit?DQ=P3^0;//ds18b20?端口

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);

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

名称:18B20温度传感器

网站:www.doflye.net

编写:shifang

日期:2009.5

修改:无

内容:18B20单线温度检测的应用样例程序

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

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

18b20初始化

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

bit?Init_DS18B20(void)

{

bit?dat=0;

DQ?=?1;//DQ复位

DelayUs2x(5);//稍做延时

DQ?=?0;?//单片机将DQ拉低

DelayUs2x(200);?//精确延时?大于?480us?小于960us

DelayUs2x(200);

DQ?=?1;//拉高总线

DelayUs2x(50);?//15~60us?后?接收60-240us的存在脉冲

dat=DQ;//如果x=0则初始化成功,?x=1则初始化失败

DelayUs2x(25);?//稍作延时返回

return?dat;

}

void?DelayUs2x(unsigned?char?t)

{

while(--t);

}

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

读取一个字节

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

unsigned?char?ReadOneChar(void)

{

unsigned?char?i=0;

unsigned?char?dat?=?0;

for?(i=8;i>0;i--)

{

DQ?=?0;?//?给脉冲信号

dat>>=1;

DQ?=?1;?//?给脉冲信号

if(DQ)

dat|=0x80;

DelayUs2x(25);

}

return(dat);

}

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

写入一个字节

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

void?WriteOneChar(unsigned?char?dat)

{

unsigned?char?i=0;

for?(i=8;?i>0;?i--)

{

DQ?=?0;

DQ?=?dat&0x01;

DelayUs2x(25);

DQ?=?1;

dat>>=1;

}

DelayUs2x(25);

}

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

读取温度

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

unsigned?int?ReadTemperature(void)

{

unsigned?char?a=0;

unsigned?int?b=0;

unsigned?int?t=0;

Init_DS18B20();

WriteOneChar(0xCC);?//?跳过读序号列号的操作

WriteOneChar(0x44);?//?启动温度转换

Delay1ms(10);

Init_DS18B20();

WriteOneChar(0xCC);?//跳过读序号列号的操作?

WriteOneChar(0xBE);?//读取温度寄存器等(***可读9个寄存器)?前两个就是温度

a=ReadOneChar();//低位

b=ReadOneChar();//高位

b<<=8;

t=a+b;

return(t);

}

void?Delay1ms(unsigned?int?count)

{

unsigned?int?i,j;

for(i=0;i<count;i++)

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

}

main()

{

SYSTEMTIME?CurrentTime;

int?temp;

float?temperature;

unsigned?char?dist[4];

LCD_Initial();

Initial_DS1302();

Init_DS18B20();

GotoXY(14,0);

Print(".");

GotoXY(15,1);

Print("C");

while(1)

{

DS1302_GetTime(&CurrentTime);

TimeToStr(&CurrentTime);

DateToStr(&CurrentTime);

GotoXY(0,0);Print("20");

GotoXY(2,0);

Print(CurrentTime.DateString);

GotoXY(0,1);

Print(CurrentTime.TimeString);

temp=ReadTemperature();

temperature=(float)temp*0.0625;

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

GotoXY(9,1);

Print(dist);

Delay1ms(400);

}

}