麻烦你能不能写一个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);
}
}