/*******************************************
程序功能:利用单线制DS18B20温度传感器
LCD数码管显示当前的温度值
********************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit fg=1;
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P1^2;
sbit DQ=P1^6; //数据传输线接单片机的相应的引脚
sbit SCLK=P3^4;
sbit IO=P3^3;
sbit RST=P3^5;
sbit irPort=P3^2;
uchar code table[]="2009-08-06 ljy";
uchar code table1[]="00:00:00 :";
uchar num1,num2,miao,sdate,shuji,tt,dat,s1=1,s2=1,s3=1,t,
t1,t11,t2,t22,t3,t33,t4,t44,t5,t55,t6,t66;
code unsigned char seg7code[]={0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9}; //不带小数点的共阳数码管段码
unsigned char tempL=0; //设全局变量
unsigned char tempH=0;
unsigned int sdata;//测量到的温度的整数部分
unsigned char xiaoshu1;//小数第一位
unsigned char xiaoshu2;//小数第二位
unsigned char xiaoshu;//两位小数//温度正负标志
//******************延时子程序 *******************************
void delay(unsigned char i)
{
for(i;i>0;i--);
}
void delay1(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//**********读一个字节************//////////////////////////温度模块//////////////////////////////////
ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
for (i=8;i>0;i--) //一个字节有8位
{
DQ=1;
delay(1);
DQ=0;
dat>>=1;
DQ=1;
if(DQ)
dat|=0x80;
delay(4);
}
return(dat);
}
//*********************** **写一个字节**************************//