基于DS18B20温度传感器和AT98C51单片机的无线温度采集系统设计

本人课程设计的题目,望高手指导,给点资料,不胜感激!qianjin_nl@126.comQQ5251475081.无线温度采集仪工作原理的确定。2.设计系统单元电路。包括... 本人课程设计的题目,望高手指导,给点资料,不胜感激!qianjin_nl@126.com QQ525147508
1. 无线温度采集仪工作原理的确定。

2. 设计系统单元电路。
包括:
(1) 远处温度采集及信号发射单元;
(2) 近处信号接收单元;
(3) 近处信号显示单元;

3. 设计总体电路图包括元器件型号,并用Proteus软件进行仿真,得到仿真结果。
展开
 我来答
安安的电力小铺
2009-01-07 · TA获得超过1073个赞
知道小有建树答主
回答量:468
采纳率:0%
帮助的人:432万
展开全部
说明:本程序使用1602LCD显示。温度采集芯片已经集成,温度模拟信号已经在DS18B20内部转换成数字信号,只需要通过18B20的数据引脚读取即可,具体请详细阅读DS18B20数据手册。要看仿真结果请到个人空间。大同小异,注意时序,串行读写时序要求最严格,程序注释很详细了。
/************************************
硬件:M16,DS18B20,引脚连线:DQ-PD2,
仿真:要求M16晶振达8MHZ
Author:LCA from WHUT
Application: Temperature Measureing
Date:2007-10
*************************************/
#include "1602LCD.h"
#include "DS1302.h"
//#include "key.h"
#include <iom16v.h>
#include <macros.h>

//BIT在<macros.h>中已经定义#define BIT(x) (1 << (x))

#define DQ_DIR_IN() DDRD&=~BIT(2) //data input
#define DQ_DIR_OUT() DDRD|=BIT(2) //data output
#define DQ_BUS_L() PORTD&=~BIT(2) //Pin output high
#define DQ_BUS_H() PORTD|=BIT(2) //Pin output low
#define BUS_state() (PIND & 0x04) //检测 ds18b20返回信号

unsigned char wmh,wml,wm3,sign_flag=0;
//unsigned char table[]={"0123456789"};

void DS18B20_init()
{ DQ_DIR_OUT(); //设置PD2 为输出
DQ_BUS_H();
DQ_BUS_L(); //占领总线
delay_nus(480); //480us以上
DQ_BUS_H(); //释放总线
DQ_DIR_IN();
delay_nus(20); //15~60us
while(BUS_state()); //回读DS18B20返回信号
DQ_DIR_OUT();
DQ_BUS_H(); //释放总线
delay_nus(140); //60~240us

}

/**********************************
函数:write_18B20()
功能:往18B20中写入数据(命令)
输入参数:数据(命令)
返回参数:无
注意:延时
************************************/
void write_18B20(unsigned char x)
{
unsigned char m;
for(m=0;m<8;m++)
{
DQ_BUS_L(); //占领总线
if(x&(1<<m)) //写数据了,先写低位的
DQ_BUS_H();
else
{DQ_BUS_L();}
delay_nus(40); //15~60us
DQ_BUS_H(); //完毕后释放总线
}
DQ_BUS_H();
}

/************************************
函数:read_18B20()
功能:从18B20中读取数据
输入参数:无
返回参数:读取值
注意:延时
*************************************/

unsigned char read_18B20(void)
{
unsigned char temp,n;
temp=0;
for(n=0;n<8;n++)
{
DQ_BUS_L(); //拉低总线
DQ_BUS_H(); //置高总线
DQ_DIR_IN(); //data input
if(BUS_state()) //读数据,从低位开始
temp|=(1<<n);
else
temp&=~(1<<n);
delay_nus(50); //60~120us
DQ_DIR_OUT(); //data output
}
return (temp);
}

/************************************
函数:get_temper_value();
功能:从18B20中读取温度值
输入参数:无
返回参数:无(处理值wm3,wmh,wml-全局变量)
注意:正负温度的转换方法,手册中数据
存储格式为:高8位的高4位为符号位
**************************************/
void get_temper_value(void) //读取温度值
{
unsigned char temh,wm1;
unsigned char wm0,teml,wm2;
DS18B20_init(); //复位18b20
write_18B20(0xcc); //skip ROM
write_18B20(0x44); //发出转换命令
DS18B20_init();
write_18B20(0xcc); //skip rom
write_18B20(0xbe); //发出读命令
teml=read_18B20(); //读数据
temh=read_18B20();
wm0=teml>>4; //低8位的高四位,温度范围0~115啦!
wm1=temh<<4; //只要高8位的低四位
wm2=wm1+wm0 ; //16进制转10进制
if(wm1&0x80) //测试符号位,测温范围-55
{wm2=256-wm2; //求取补码
sign_flag=1;
} //为负温度
else
{
sign_flag=0;
}
wm3=wm2/100; //百位
wmh=(wm2%100)/10; //出口参数了!wmh是显示的高位,wml使显示的低位 ,十位
wml=(wm2%100)%10; //个位
}

/************************************
函数:data_display();
功能:温度值显示(显示符号为,百位,十位,个位,小数点)
输入参数:无(全局变量wm3,wmh,wml)
返回参数:无
注意:显示地址的处理
**************************************/

void data_display(void)
{ unsigned char add=0;
add=LCD_display_string(0,0,"Tem:");
if(sign_flag)
{LCD_display_string(add++,0,"-");} //显示负号
if(!sign_flag) //负温度的时候不显示百位
{LCD_display_num(add++,0,table[wm3]);} //百位0
LCD_display_num(add++,0,table[wmh]); //十位
LCD_display_num(add++,0,table[wml]);
LCD_display_string(add++,0,".");
LCD_display_string(add++,0,"00");
LCD_display_string(add+1,0,"C");
}

void devices_init(void)
{
LCD_init();
DS18B20_init();
DS1302_init();
}

void main()
{unsigned char num=0;
devices_init();
while(1)
{get_temper_value(); //获取温度值
data_display(); //显示温度值
get_time(); //读取时钟并显示
// num=get_key();
//if(num)
// {LCD_display_string(14,1,"keynum"); }

}
}
希卓
2024-10-17 广告
作为北京希卓信息技术有限公司的一员,分布式光纤温度应变监测技术是我们公司的一项重要技术。该技术通过光纤传感器,能够实时监测长距离范围内的温度和应变变化,具有高精度、抗干扰性强、适用范围广等优点。在工业、能源、交通、环境等领域,分布式光纤温度... 点击进入详情页
本回答由希卓提供
dsu5566
2009-01-07 · TA获得超过2152个赞
知道大有可为答主
回答量:1761
采纳率:100%
帮助的人:1921万
展开全部
//这是关于DS18B20的c读写程序,数据脚P1.0,晶振12MHZ

//进行温度显示,这里我们考虑用四位数码管来显示温度

//显示范围-55.0到+99.5度,显示精度为0.5度

//关于程序中的延时请参考ds18b20的读写时序

#include <reg52.h>
#define uchar unsigned char

uchar tempint,tempdf; //温度整数部分和小数部分

sbit TMDAT = P1^0; //根据实实际情况设定
sbit ld7=P1^7; //初始化成功标志led
sbit ld6=P1^6; //负温度标志led
sbit point=P0^7; //小数点显示
uchar f; //负温度标志
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
局韦嬴丽华
2019-07-25 · TA获得超过3575个赞
知道大有可为答主
回答量:3063
采纳率:26%
帮助的人:216万
展开全部
首先AT98C51你确定是这个吗??
其次这个东西我手上有现成的,不过不会给你,倒不是由于分数不多的问题,给你是害了你。
最后请Hi我,我给你讲解一下,关于DS18B20的温度采集以及无线模块的选取问题,其他的你自己弄。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式