DS18B20温度传感器测温通过数码管显示(上传).doc
文本预览下载声明
DS18B20温度传感器测温通过数码管显示(详尽版)
/*-----------------------------------------------
名称:DS18B20温度传感器数码管显示
编写:JR
日期:2017.12
修改:无
内容:利用DS18B20温度传感器测量温度-40~+100℃,通过数码管显示单片机开发板使用“金容电子(/item.htm?id=544540401703)”开发的JR51单片机开发板。
------------------------------------------------*/
#includereg52.h
#includestdio.h
#includeintrins.h
#includedelayus.h
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P2^2; //温度传感器信号线
sbit dula=P2^6; //数码管段选线
sbit wela=P2^7; //数码管位选线
sbit beep=P2^3; //数码管位选线
uint temper;
uchar a1,a2,a3,a4,a5,n;
uint aaa,num;
uint warn_l=3000; //低温-40℃报警,测试温度乘以100
uint warn_h=10000; //高温100℃报警,测试温度乘以100
float ttt;
void disp(uchar num0,uchar num1,uchar num2,uchar num3,uchar num4,uchar num5);
const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x40,0x00};//不带小数点0-9编码
const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef}; //带小数点0-9编码
uchar data temp_data[2]={0x00,0x00}; //读出温度暂放
void delay(uint z)
{
uint x,y;
for(x=z;x0;x--)
for(y=110;y0;y--);
}
/*******************************************************************
18B20复位初始化函数
1、将数据线拉高到1
2、延时2us(该时间要求不是很严格,但是要尽可能短一点)
3、将数据线拉低到0
4、延时750us(该时间范围可以在480~960us)
5、将数据线拉高到1
6、延时等待(70us),如果初始化成功则在15~60us内产生一个由18B20返回的低电平0,
据该状态可以确定它的存在。但是应注意,不能无限的等待,不然会使程序进入死循环,所以要进行超时判断。
7、若CPU读到数据线上的低电平0后,还要进行延时,其延时时间从发出高电平算起(第5步的时间算起最少要480us)。
8、将数据线再次拉高到1后结束
**********************************************************************/
void dsreset()
{
uchar st=1;
DQ=1; //拉高数据线
_nop_();_nop_();
while(st)
{
DQ=0; //控制器向DS18B20发低电平脉冲
delayus(81); //延时750us左右
DQ=1; ////控制器拉高总线
delay70us(); //延时70us
if(DQ==1)st=1;
else
st=0;
delayus(54); //延时500us等待
}
}
/*******************************************************************
向DS18B20写一个字节函数
1、将数据线置低电平0
2、延时15us
3、按从低位到高位的顺序发送数据(一次只发送一位)
4、延时45us
5、将数据线拉高到1
6、重复1~5步骤,直到发送完整个字节
显示全部