用DS18B20做的电子温度计,非常简单。
#include <reg51.h>
#include\"AscLed.h\"
#include <intrins.h>
#include <stdio.h>
//********************************************************
#define Seck (500/TK) //1秒中的主程序的系数
#define OffLed (Seck*5*60) //自动关机的时间5分钟!
//********************************************************
#if (FHz==0)
#define NOP_2uS_nop_()
#else
#define NOP_2uS_nop_();_nop_()
#endif
//**************************************
#define SkipK 0xcc //跳过命令
#define ConvertK 0x44 //转化命令
#define RdDs18b20K 0xbe //读温度命令
//*******************************************
extern LedOut(void);
//*************************************************
sbit PNP1=P3^4;
sbit PNP2=P3^5;
sbit BEEP=P3^2;
//***********************************
#defineDQ PNP2 //原来的PNP2 BEEP
//***********************************
static unsigned char Power=0;
//************************************
union{
unsigned char Temp[2]; //单字节温度
unsigned int Tt; //2字节温度
}T;
//***********************************************
typedef struct{
unsigned char Flag; //正数标志 0;1==》负数
unsigned char WenDu; //温度整数
unsigned int WenDuDot; //温度小数放大了10000
}WENDU;
//***********************************************
WENDU WenDu;
unsigned char LedBuf[3];
//----------------------------------
//功能:10us 级别延时
// n=1===> 6Mhz=14uS 12MHz=7uS
//----------------------------------
void Delay10us(unsigned char n){
do{
#if (FHz==1)
NOP_2uS;NOP_2uS;
#endif
}while(--n);
}
//-----------------------------------
//功能:写18B20
//-----------------------------------
void Write_18B20(unsigned char n){
unsigned char i;
for(i=0;i<8;i++){
DQ=0;
Delay10us(1);//延时13us 左右
DQ=n & 0x01;
n=n>>1;
Delay10us(5);//延时50us 以上
DQ=1;
}
}
//------------------------------------
//功能:读取18B20
//------------------------------------
unsigned char Read_18B20(void){
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++){
temp=temp>>1;
DQ=0;
NOP_2uS;//延时1us
DQ=1;
NOP_2uS;NOP_2uS;//延时5us
if(DQ==0){
temp=temp&0x7F;
}else{
temp=temp|0x80;
}
Delay10us(5);//延时40us
DQ=1;
}
return temp;
}
//-----------------------------------
void Init (void){
DQ=0;
Delay10us(45);//延时500us
DQ=1;
Delay10us(9);//延时90us
if(DQ){ //0001 1111b=1f
Power =0; //失败0
}else{
Power++;
DQ=1;
}
}
//----------------------------------
void Skip(void){
Write_18B20(SkipK);
Power++;
}
//----------------------------------
void Convert (void){
Write_18B20(ConvertK);
Power++;
}
//______________________________________
void Get_Ds18b20L (void){
T.Temp[1]=Read_18B20(); //读低位
Power++;
}
//______________________________________
void Get_Ds18b20H (void){
T.Temp[0]=Read_18B20(); //读高位
Power++;
}
//------------------------------------
//规范化成浮点数
// sssss111;11110000
// sssss111;1111(0.5,0.25,0.125,0.0625)
//------------------------------------
void ReadTemp (void){
unsigned char i;
unsigned intF1=0;
char j=1;
code int Code_F[]={6250,1250,2500,5000};
WenDu.Flag=0;
if (T.Temp[0] >0x80){ //负温度
T.Tt =~T.Tt+1; //取反+1=源吗 +符号S
WenDu.Flag=-1;
}
T.Tt <<= 4; //左移4位
WenDu.WenDu=T.Temp[0]; // 温度整数
//**************************************************
T.Temp[1]>>=4;
//---------------------------
for (i=0;i<4;i++){ //计算小数位
F1 +=(T.Temp[1] & 0x01)*Code_F;
T.Temp[1]>>=1;
}
WenDu.WenDuDot=F1; //温度的小数
Power=0;
}
//----------------------------------
void Delay1S (void){
static unsigned int i=0;
if (++i==Seck) {i=0ower++;}
}
//----------------------------------
void ReadDo (void){
Write_18B20(RdDs18b20K);
Power++;
}
/**********************************
函数指针定义
***********************************/
code void (code *SubTemp[])()={
Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,Get_Ds18b20L,
Get_Ds18b20H,ReadTemp
};
//**************************************
void GetTemp(void){
(*SubTemp[Power])();
}
//---------------------------------------------------
//将温度显示,小数点放大了10000.
void GetBcd(void){
LedBuf[0]=WenDu.WenDu / 10;
LedBuf[1]=WenDu.WenDu % 10 +DotK;
LedBuf[2]=(WenDu.WenDuDot/1000);
if(LedBuf[0]==0)LedBuf[0]=Black;
if(WenDu.Flag==0) return;
if(LedBuf[0] !=Black){
LedBuf[2]=LedBuf[1];
LedBuf[1]=LedBuf[0];
LedBuf[0]=Led_Pol; //'-'
}else{
LedBuf[0]=Led_Pol; //'-'
}
}
/*
//---------------------------------------------------
void JbDelay (void){
static long i;
if (++i>=OffLed){
P1=0xff;
P2=0xff;
PCON=0x02;
}
}
*/
/*****************************************************
主程序开始
1:2002_10_1 设计,采用DS18B20测量
2:采用函数数组读取DS18B20.LED数码管显示正常!
3:改变FHz可以用6,12MHz工作!
******************************************************/
code unsigned char Stop[3] _at_ 0x3b;
void main (void){
P1=0xff;
WenDu.WenDu=0;
while (1){
GetTemp();
GetBcd();
// JbDelay();
LedOut();
}
}
复制代码
20091012_8b1ef92155560c13b5807ZmoDVSacjwD[1].jpg (12 KB)
2009-10-21 23:21 上传
下载次数:0
温度相关的毕业设计
·基于单片机的数字温度计的设计
·基于MCS-51数字温度表的设计
·单片机的数字温度计设计
·基于单片机的空调温度控制器设计
·基于数字温度计的多点温度检测系统
·设施环境中温度测量电路设计
·DS18B20数字温度计的设计
·多点温度采集系统与控制器设计
·基于PLC和组态王的温度控制系统设计
·温度监控系统的设计
·用单片机进行温度的控制及LCD显示系统的设计
·单片机电加热炉温度控制系统
·全氢罩式退火炉温度控制系统
·数字温度计的设计
·基于单片机AT89C51的语音温度计的设计
·基于单片机的多点温度检测系统
·基于51单片机的多路温度采集控制系统
·基于单片机的数字显示温度系统毕业设计论文
·基于MCS51单片机温度控制毕业设计论文
·西门子S7-300在温度控制中的应用
·燃气锅炉温度的PLC控制系统
·焦炉立火道温度软测量模型设计
·温度检测控制仪器
·智能温度巡检仪的研制
·电阻炉温度控制系统
·数字温度测控仪的设计
·温度测控仪设计
·多路温度采集系统设计
·多点数字温度巡测仪设计
·LCD数字式温度湿度测量计
·64点温度监测与控制系统
·温度报警器的电路设计与制作
·基于单片机的数字温度计的电路设计
·全氢煤气罩式炉的温度控制系统的研究与改造
·温度检测与控制系统
·红外快速检测人体温度装置的设计与研制
·具有红外保护的温度自动控制系统的设计
·基于单片机的温度测量系统的设计
·数字温度计设计
·DS18B20温度检测控制
·PN结(二极管)温度传感器性能的实验研究
·多功能智能化温度测量仪设计
·软胶囊的单片机温度控制(硬件设计)
·空调温度控制单元的设计
·大容量电机的温度保护——软件设计
·大容量电机的温度保护 ——硬件电路的设计
·基于DS18B20温度传感器的数字温度计设计
·热轧带钢卷取温度反馈控制器的设计
·基于单片机的温度采集系统设计
·多点温度数据采集系统的设计
·基于单片机的数字式温度计设计
·18B20多路温度采集接口模块
·基于单片机的户式中央空调器温度测控系统设计
·单片机电阻炉温度控制系统设计
·基于单片机的电阻炉温度控制系统设计
·基于ARM的嵌入式温度控制系统的设计
·基于DS18B20的多点温度巡回检测系统的设计
·基于单片机的多点无线温度监控系统
·基于MSC1211的温度智能温度传感器
·用集成温度传感器组成测温控制系统
·室内温度控制报警器
·自动温度控制系统
·烤箱温度控制系统
·基于单片机的电加热炉温度控制系统设计
·基于PLC的温度监控系统设计
·基于无线传输技术的室温控制系统设计——温度控制器软件设计
·温度箱模拟控制系统
·基于无线传输技术的室温控制系统设计——温度控制器硬件设计
·数字式温度计的设计
·温度监控系统设计
·基于单片机的电阻炉温度控制系统
·基于plc的温度湿度检测和显示系统设计
·基于单片机的3KW电炉温度控制系统的设计
·腔型肿瘤热疗仪温度控制系统设计
·基于AT89S51单片机的数字温度计设计
·吹塑薄膜挤出机温度控制与检测系统设计
·电加热炉PLC温度自适应控制系统的研究
·高压母线温度自动监测装置的设计
·高压母线温度自动检测装置
·小型热水锅炉单片机温度控制系统
·消毒柜单片机温度控制
·嵌入式系统在多点温度控制中的应用
·单片机温度控制系统
·上下限温度报警器的设计
·基于单片机的饮水机温度控制系统设计
·基于单片机的温度测量系统设计
"幸福校园"有不少形式的论文范文,参考一下吧,希望对你可以有所帮助。
第1章 绪 论
1.1 温度控制系统的发展状况
近几年来,在我国以信息化带动的工业化正在蓬勃发展,温度已成为工业对象控制中一种重要的参数,任何物理变化和化学反应过程都与温度密切相关,因此温度控制是生产自动化的重要任务。对于不同生产情况和工艺要求下的温度控制,所采用的加热方式,燃料,控制方案也有所不同。例如:在食品加工、冶金工业、化工生产、电力工程、造纸行业和机械制造等诸多领域中,广泛使用的各种锅炉、加热炉、热处理炉和反应炉等;燃料有煤气、天然气、油、电等。
单片微型计算机的功能不断的增强,许多高性能的新型机种应运而生。单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化领域和其他测控领域中广泛应用的器件,在工业生产中成为必不可少的器件。在温度控制系统中,单片机更是起到了不可替代的核心作用。像用于化工生产的智能锅炉、用于融化金属的加热炉等都广泛应用。
建议你去"幸福校园"看看 里面有些样子 你可以参考
第一章 前言
本论文介绍单片机结合DS18B20设计的智能温度控制系统,系统用一种新型的“一总线”可编程数字温度传感器(DS18B20),不需复杂的信号调理电路和A/D转换电路能直接与单片机完成数据采集和处理,实现方便、精度高、功耗低、微型化、抗干扰能力强,可根据不同需要用于各种温度监控及其他各种温度测控系统中。
美国DALLAS最新单线数字温度传感器DS18B20,具有微型化低功耗、高性能、可组网等优点,新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20的测温分辨率较高,DS18B20可直接将温度转化成串行数字信号,因此特别适合和单片机配合使用,直接读取温度数据。目前DS18B20数字温度传感器已经广泛应用于恒温室、粮库、计算机机房。测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,误差为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20可以程序设定9~12位的分辨率,精度为0.0625°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!DS18B20使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
第一章 绪论
1. 1 选题背景
防潮、防霉、防腐、防爆是仓库日常工作的重要内容,是衡量仓库管理质量的重要指标。它直接影响到储备物资的使用寿命和工作可靠性。为保证日常工作的顺利进行,首要问题是加强仓库内温度与湿度的监测工作。但传统的方法是用与湿度表、毛发湿度表、双金属式测量计和湿度试纸等测试器材,通过人工进行检测,对不符合温度和湿度要求的库房进行通风、去湿和降温等工作。这种人工测试方法费时费力、效率低,且测试的温度及湿度误差大,随机性大。因此我们需要一种造价低廉、使用方便且测量准确的温湿度测量仪。
1.2 设计过程及工艺要求
一、基本功能
~ 检测温度、湿度
~ 显示温度、湿度
~ 过限报警
二、 主要技术参数
~ 温度检测范围 : -30℃-+50℃
~ 测量精度 : 0.5℃
~ 湿度检测范围 : 10%-100%RH
~ 检测精度 : 1%RH
~ 显示方式 : 温度:四位显示 湿度:四位显示
~ 报警方式 : 三极管驱动的蜂鸣音报警