• 大小: 16.09 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-12-06
  • 语言: 其他
  • 标签: 单片机  程序设计  

资源简介

单片机与温度传感器DS18B20的程序设计
void read_ds1820() //读
{
uchar delay,i,j,k,temp,temph,templ;
j=2; //读2位字节数据
do
{
for(i=8;i>0;i--) //一个字节分8位读取
{
temp>>=1; //读取1位右移1位
TMDAT=0; //数据线置低电平
delay=1;
while(--delay); //延时2us
TMDAT=1; //拉高总线
delay=4;
while(--delay); //延时8us
if(TMDAT)temp|=0x80; //读取1位数据
delay=25;
while(--delay); //读取1位数据后延时50us
}
if(j==2)templ=temp;

//读取的第一字节存templ
else temph=temp; //读取的第二字节存temph
}while(--j);
f=0; //初始温度标志为正
if((temph&0xf8)!=0x00) //若温度为负的处理,对二进制补码的处理
{
f=1; //为负温度f置1
temph=~temph;
templ=~templ;
k=templ+1;
templ=k;
if(k>255)
{
temph++;
}
}
tempdf=templ&0x0f; //将读取的数据转换成温度值,整数部分存tempint,小数部分存tempdf
templ>>=4;
temph<<=4;
tempint=temph|templ;
}
... ...

资源截图

代码片段和文件信息

/************************************************
************顺达电子*丫丫设计屋 *****************
硬件结构框架:
            1,单总线温度传感器DS18B20
2 MCU  STC89C52
3,四位八段共阴数码管
            4,晶振:12M11.0592M
显示效果:
1,显示实时温度,精度0.5度
相关知识点:
1,单总线温度传感器DS18B20
************************************************/

#include“AT89x52.h“

#define uint unsigned int
#define uchar unsigned char

sbit DUAN=P2^0;     //74HC573的LE端    LED的段选端
sbit WEI=P2^1;      //74HC573的LE端    LED的位选端
sbit TMDAT=P1^7;    //DS1820温度接口

uchar Temp[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x390x40};  //共阴显示字库
uchar Temp_1[]={0xbf0x860xdb0xcf0xe60xed0xfd0x870xff0xef};          //共阴==带小数点

bit f;             //负温度标志
bit flag;          //DS1820初始化成功标志
uchar tempinttempdf;           //温度整数部分和小数部分

void wei_1(uchar wei)             //数码管位控制
{
WEI=1;
P0=wei;
WEI=0;
}

void duan_1(uchar duan)           //数码管段控制
{
uint i;
DUAN=1;
P0=Temp[duan];
DUAN=0;
for(i=500;i>0;i--);
}

void duan_2(uchar duan)           //数码管段控制
{
uint i;
DUAN=1;
P0=Temp_1[duan];
DUAN=0;
for(i=500;i>0;i--);
}

void set_ds1820()              //初始化DS1820
{
while(1)
{
uchar delay;
flag=0;
TMDAT=1;                  //总线高电平
delay=1;
while(--delay);           //稍微延时
TMDAT=0;                  //总线拉低
delay=250;
while(--delay);           //延时500us
TMDAT=1;                  //拉高总线
delay=30;
while(--delay);           //延时60us
while(!TMDAT)             //当DS1820拉低总线
{
delay=120;  
while(--delay);        //延时240us
if(TMDAT)
{
flag=1;             //DS1820初始化成功标志
break;
}
}
if(flag)                  //初始化成功后再延时480us时序要求
{
delay=240;
while(--delay);
break;
}
}
}

void write_ds1820(uchar command)  //写8位
{
uchar delayi;
for(i=8;i>0;i--)               //循环8次写入
{
TMDAT=0;                    //拉低总线
delay=6;
while(--delay);             //延时12us
TMDAT=command&0x01;         //将数据放在总线上,进行采样
delay=25;
while(--delay);             //延时50us,采样完毕
command=command>>1;         //数据右移一位,准备下次数据
TMDAT=1;                    //释放总线
}
}

void read_ds1820()                //读
{
uchar delayijktemptemphtempl;
j=2;                           //读2位字节数据
do
{
for(i=8;i>0;i--)            //一个字节分8位读取
{
temp>>=1;                //读取1位右移1位
TMDAT=0;                 //数据线置低电平
delay=1;
while(--delay);          //延时2us
TMDAT=1;                 //拉高总线
delay=4;
while(--delay);          //延时8us
if(TMDAT)temp|=0x80;     //读取1位数据
delay=25;
while(--delay);          //读取1位数据后延时50us
}
if(j==2)templ=temp;         //读取的第一字节存templ
else temph=temp;            //读取的第二字节存temph
}while(--j);
f=0;                           //初始温度标志为正
if((temph&0xf8)!=0x00)         //若温度为负的处理,对二进制补码的处理
{
f=1;                        //为负温度f置1
temph=~temph;
templ=~templ;
k=templ+1;
templ=k;
if(k>

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3527  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度

     文件       8610  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度.LST

     文件      15511  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度.M51

     文件       4761  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度.OBJ

     文件        971  2009-04-19 00:28  DS18B20温度测试LED显示\DS1820温度.Opt

     文件       1667  2002-01-11 20:07  DS18B20温度测试LED显示\DS1820温度.Uv2

     文件       4805  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度.c

     文件       1673  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度.hex

     文件         52  2009-04-19 00:13  DS18B20温度测试LED显示\DS1820温度.lnp

     文件        604  2009-04-19 00:28  DS18B20温度测试LED显示\DS1820温度.plg

     文件        971  2002-01-11 20:10  DS18B20温度测试LED显示\DS1820温度_Opt.Bak

     文件       1663  2002-01-26 08:12  DS18B20温度测试LED显示\DS1820温度_Uv2.Bak

     目录          0  2010-10-07 21:26  DS18B20温度测试LED显示

----------- ---------  ---------- -----  ----

                44815                    13


评论

共有 条评论