} }
void Initial_DS1302(void) //时钟芯片初始化 {
unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80)
//判断时钟芯片是否关闭
Time->DateString[8] = '\\0';
{
Write1302(0x8e,0x00); //写入允许
Write1302(0x8c,0x07); //以下写入初始化时间 日期:07/07/25.星期: 3. 时间:
23:59:55
Write1302(0x88,0x07); Write1302(0x86,0x25); Write1302(0x8a,0x07); Write1302(0x84,0x23); Write1302(0x82,0x59); Write1302(0x80,0x55);
Write1302(0x8e,0x80); //禁止写入 }
}
/***********ds18b20子程序*************************/
/***********ds18b20延迟子函数(晶振12MHz )*******/
void delay_18B20(unsigned int i) { }
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void) {
unsigned char x=0;
DQ = 1; //DQ复位 delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低 delay_18B20(80); //精确延时 大于 480us DQ = 1; //拉高总线 delay_18B20(14); while(i--);
败 }
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失
delay_18B20(20);
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void) {
uchar i=0; uchar dat = 0; for (i=8;i>0;i--) { }
DQ = 0; // 给脉冲信号 dat>>=1;
DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; delay_18B20(4);
return(dat); }
/*************ds18b20写一个字节****************/
void WriteOneChar(uchar dat) {
unsigned char i=0; for (i=8; i>0; i--) { } }
/**************读取ds18b20当前温度************/
void ReadTemp(void) {
unsigned char a=0; unsigned char b=0;
DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换
delay_18B20(100); // this message is wery important
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)就是温度 delay_18B20(100);
a=ReadOneChar(); //读取温度值低位 b=ReadOneChar(); //读取温度值高位
temp_value=b<<4;
temp_value+=(a&0xf0)>>4;
}
void temp_to_str() //温度数据转换成液晶字符显示 {
前两个