|
|
/*
/*
本人承接毕业设计,程序设计,PCB设计, 电子产品维修,DIY设计,电子装配调试技能竞赛训练套件销售等方面
以下程序来源于本人编写,部分来源于官方,若遇到程序无法运行,或者其他问题可以随时于本人联系
*/
DS18B20程序是用于温度检测
*/
#include "ds18B20.h"
void init_temperature(void) //初始化
{
uint i;
dstemperature=0;
i=500; //将总线拉低480us~960us
while(i--);
dstemperature=1; //然后拉高总线,若DS18B20做出反应会将在15us~60us后将总线拉低
i=30; //15us~60us等待
while(i--);
}
/********************判忙*****************/
bit temperature_busy() //判断忙
{
uint i;
bit dat;
dstemperature=0;
i++; //i++ for delay
dstemperature=1;
i++;
i++;
dat=dstemperature;
i=60;
while(i--);
return (dat);
}
/**********************读温度函数*******************/
uchar read_temperature () //读温度出来
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=temperature_busy();
dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里
}
return(dat);
}
/**********************写字节到18b20*******************/
void writing_sequence (uchar dat) //写命令到18B20
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //write 1
{
dstemperature=0;
i++;
i++;
dstemperature=1;
i=60;
while(i--);
}
else
{
dstemperature=0; //write 0
i=60;
while(i--);
dstemperature=1;
i++;i++;
}
}
}
uint temperature_transformation() //温度转换
{
float calculation;
uchar l8,h8;//低8位高8位
uint temp;
init_temperature();
delay_ms(5);
writing_sequence(0xcc); // address all drivers on bus
writing_sequence(0x44); // initiates a single temperature conversion
delay_ms(6);//delay(100);
init_temperature();
delay_ms(5);
writing_sequence(0xcc);
writing_sequence(0xbe);
l8=read_temperature();//低八位
h8=read_temperature();//高八位
temp=h8;
temp<<=8; //two byte compose a int variable
calculation=temp|l8;
temp=calculation*0.0625*100+0.5; //算出来的是测到的温度,数值可到小数点后两位
//为了显示温度后的小数点后一位并作出四舍五入,因为取值运算不能取小数点后的数
return temp;
}
这是本人在上中专时候写的一个程序,功能是可以实现的,如果需要按照DS18B20的标准来可能就无法满足了
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|