资源简介
单片机与温度传感器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;
}
... ...
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
相关资源
- 毕业论文之温度传感器DS18B20(源码
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
- 单片机与PC机串口通讯仿真
- 毕业设计 单片机 对讲机 protues仿真
- 数据采集系统——ADC0808的应用,单片
- 直流伺服电机电路原理图(内附单片
- PIC 单片机定时器初值计算器
- 430系列单片机USBFET下载驱动
- 单片机 DS18B20 温度控制系统
- 单片机AT89s52控制GSM模块TC35i发短信,
- 单片机数字时钟包附电路图 源程序
- STC12C系列单片机函数库
- MCGS与单片机通信
- 基于proteus的单片机仿真--交通灯控制
- 带时间温度显示的室内灯光控制系统
- 单片机控制的步进电机正反转和加速
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 基于89c51的数字钟
- DXP单片机常用的元件库
- 单片机控制74ls164程序
评论
共有 条评论