1.基于DS1820 的数字温度计的毕业设计论文
基于DS18B20温度传感器的数字温度计设计 目 录 基于DS18B20温度传感器的数字温度计设计 1 基于DS18B20温度传感器的数字温度计设计 1 摘要: 1 关键字: 1 The conception of the numerical thermometer based on DS18B20 1 1 引言 2 2 总体设计 2 2.1 方案论证 2 2.2 总体设计 3 3 硬件设计 3 3.1 单片机系统 3 3.2 温度传感器模块 4 3.3 存储模块 7 3.4 液晶显示模块 9 3.5 串口通信模块 11 3.6 电源模块 12 4 软件设计 13 4.1 主程序流程 13 4.2 DS18B20模块程序设计 13 4.3 HS1602驱动程序设计 16 4.4 AT24C08存储模块程序设计 18 4.5 RS-232-C串口通信模块程序设计 19 5 测试及结果分析 22 6 附录 23 7 参考资料 24。
2.谁有《数字温度计毕业论文》
基于AT89S2051单片机的单总线数字温度计设计摘要】介绍了使用AT89S2051单片机及DS18B20的数字温度计的设计,以及如何用单片机和数字温度传感器构造一个小型的温度测量系统。
【关键词】单片机;温度传感器;温度控制温度是一种最基本的环境参数,人民的生活环境与温度息息相关,因此研究温度的测量方法和装置具有重要意义,测量温度的关键是温度传感器,本文将介绍新型的智能集成温度传感器DS18B20的使用方法,以及用单片机AT89C2051对DS18B20的编程实现温度测量。1单线数字温度计DS18B20介绍Dallas半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
DS18B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入18B20或从18B20送出,因此从主机CPU到DS18B20仅需一条线(和地线)。
DS18B20的测量范围从-55℃到+125℃,增量值为0.5℃,在-10~+85°C范围内,精度为±0.5°C。可在1秒钟(典型值)内把温度变换成数字。
DS18B20的性能是新一代产品中最好的,性能价格比也非常出色。让我们可以构建适合自己的经济的测温系统。
2 DS18B20的内部结构及温度表示DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。(见表一)。
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘以0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘以0.0625即可得到实际温度。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
3用单片机AT89C2051及数字温度传感器DS18B20构建一个温度测量系统根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
对于DS18B20的读时序分为读0时序和读1时序两个过程: 在实际制作过程中考虑到芯片的体积(AT89C2051的大小仅为AT89C51的四分之一),及对一般的气温测量只需精确到一摄氏度,我们选用了AT89C2051和两位一体共阳极7段数码管,通过对DS18B20的编程(使用汇编语言),在KEIL软件中编译通过,用万能板制作成功,实现温度的测量,用单片机AT89C2051和DS18B20构成测温系统,用两位共阳数码管显示温度值,读取DS18B20及用两位共阳数码管显示温度的汇编语言程序如下:ORG0000H单片机内存分配申明TEMPER_LEQU29H;用于保存读出温度的低8位TEMPER_H EQU28H;用于保存读出温度的高8位FLAG1 EQU38H;是否检测到DS18B20标志位a_bit equ 20h;数码管个位数存放内存位置b_bit equ 21h;数码管十位数存放内存位置MAIN:LCALLGET_TEMPER;调用读温度子程序MOVA,29HMOVC,40H;将28H中的最低位移入CRRCAMOVC,41HRRCAMOVC,42HRRCAMOVC,43HRRCAMOV29H,ALCALLDISPLAY;调用数码管显示子程序AJMP MAIN;循环显示INIT_18B20:;这是DS18B20复位初始化子程序SETBP3.2NOPCLR P3.2MOVR1,#3;主机发出延时537微秒的复位低脉冲TSR1:MOVR0,#107DJNZR0,$ DJNZR1,TSR1SETBP3.2;然后拉高数据线NOPNOPNOPMOVR0,#25HTSR2:JNBP3.2,TSR3;等待DS18B20回应DJNZR0,TSR2LJMP TSR4;延时TSR3:SETBFLAG1;置标志位,表示DS18B20存在LJMP TSR5TSR4:CLR FLAG1;清标志位,表示DS18B20不存在LJMP TSR7TSR5:MOVR0,#117TSR6:DJNZR0,TSR6;时序要求延时一段时间TSR7:SETBP3.2RETGET_TEMPER:;读出转换后的温度值SETBP3.2LCALLINIT_18B20;先复位DS18B20JBFLAG1,TSS2RET;判断DS18B20是否存在?若DS18B20不存在则返回TSS2:;DS18B20已经被检测到!MOVA,#0CCH;跳过ROM匹配LCALLWRITE_18B20MOVA,#44H;发出温度转换命令LCALLWRITE_18B20这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALLDISPLAYLCALLINIT_18B20;准备读温度前先复位MOVA,#0CCH;跳过ROM匹配LCALLWRITE_18B20MOVA,#0BEH;发出读温度命令LCALLWRITE_18B20LCALL READ_18B20;将读出的温度数据保存到35H/36HRETWRITE_18B20:;写DS18B20的子程序(有具体的时序。
3.数字温度计的设计开题报告及设计啊
传统的温度计有反应速度慢、读数麻烦、测量精度不高、误差大等缺点而下面利用集成温度传感器AD590设计并制作了一款基于AT89C51的4位数码管显示的数字温度计,其电路简单,软硬件结构模块化,易于实现。
该数字温度计利用AD590集成温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由模数转换器ADC0804转换成单片机能够处理的数字信号,然后送到单片机AT89C51中进行处理变换,最后将温度值显示在D4、D3、D2、D1共4位七段码LED显示器上。
系统以AT89C51单片机为控制核心,加上AD590测温电路、ADC模数转换电路、4位温度数据显示电路以及外围电源、时钟电路等组成。
4.基于AT89S52和DS18B20的数字温度计的设计报告
#include <AT89X51.H>#include<intrins.h>unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f};unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71, 0x00,0x40};unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,25, 28,31,34,38,41,44,48, 50,53,56,59,63,66,69, 72,75,78,81,84,88,91,94,97};unsigned char displaycount;unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};signed int timecount;unsigned char readdata[8];sbit DQ=P3^7;bit sflag;bit resetpulse(void){ unsigned char i; DQ=0; for(i=255;i>0;i--); DQ=1; for(i=60;i>0;i--); return(DQ); for(i=200;i>0;i--);}void writecommandtods18b20(unsigned char command) { unsigned char i; unsigned char j; for(i=0;i<8;i++) { if((command&0x01)==0) { DQ=0; for(j=35;j>0;j--); DQ=1; } else { DQ=0; for(j=2;j>0;j--); DQ=1; for(j=33;j>0;j--); } command=_cror_(command,1); } } unsigned char readdatafromds18b20(void) { unsigned char i; unsigned char j; unsigned char temp; temp=0; for(i=0;i<8;i++) { temp=_cror_(temp,1); DQ=0; _nop_(); _nop_(); DQ=1; for(j=10;j>0;j--); if(DQ==1) { temp=temp|0x80; } else { temp=temp|0x00; } for(j=200;j>0;j--); } return(temp); } void main(void) { TMOD=0x01; TH0=(65535-4000)/256; TL0=(65535-4000)%256; ET0=1; EA=1; while(resetpulse()); writecommandtods18b20(0xcc); writecommandtods18b20(0x44); TR0=1; while(1) { ; } } void t0 (void) interrupt 1 using 0 { unsigned char x; unsigned int result; TH0=(65535-4000)/256; TL0=(65535-4000)%256; if(displaycount==2) { P0=displaycode[displaybuf[displaycount]]|0x80; } else { P0=displaycode[displaybuf[displaycount]]; } P2=displaybit[displaycount]; displaycount++; if(displaycount==8) { displaycount=0; } timecount++; if(timecount==500) { timecount=0; while(resetpulse()); writecommandtods18b20(0xcc); writecommandtods18b20(0xbe); readdata[0]=readdatafromds18b20(); readdata[1]=readdatafromds18b20(); for(x=0;x<8;x++) { displaybuf[x]=16; } sflag=0; if((readdata[1]&0xf8)!=0x00) { sflag=1; readdata[1]=~readdata[1]; readdata[0]=~readdata[0]; result=readdata[0]+1; readdata[0]=result; if(result>255) { readdata[1]++; } } readdata[1]=readdata[1]<<4; readdata[1]=readdata[1]&0x70; x=readdata[0]; x=x>>4; x=x&0x0f; readdata[1]=readdata[1]|x; x=2; result=readdata[1]; while(result/10) { displaybuf[x]=result%10; result=result/10; x++; } displaybuf[x]=result; if(sflag==1) { displaybuf[x+1]=17; } x=readdata[0]&0x0f; x=x<<1; displaybuf[0]=(dotcode[x])%10; displaybuf[1]=(dotcode[x])/10; while(resetpulse()); writecommandtods18b20(0xcc); writecommandtods18b20(0x44); } } 好不好使不知道,也是摘抄的,错了别介意啊,呵呵。
5.数字温度计的设计
ICL7107是数字表专用芯片,这里可以用它来测量温度。
可以下载它的PDF文档,里面有典型应用电路和相关的设计资料。1.温度传感器看用途而定,搜索关键词;2.调理电路:以0-200℃为测量范围,根据温度传感器的输出电压而定;3.片内集成3位半AD转换器;4.市售任意4位共阳LED数码管(带小数点),接法请搜索关键词:着重讨论下传感器选择和信号调理部分:传感器选择:(可以联系供应商为你专业指导,这里只是提供参考)1.使用环境:如果测室温,那么传感器可以在温度计内部,这时,使用裸热敏电阻,如果要测液体,高温环境,可用热电偶2.温度范围:看你的描述,至少要能到200℃的温度3.测量精度,成本:根据具体的应用有不同要求信号调理:也许很麻烦,但只要记住一件事,就好:ICL7107的有效信号输入范围是0-200mV所以,需要将0-200℃的温度变化对应到0-200mV的输入范围。
6.温度传感器而做的电子温度计毕业论文
基于DS18B20温度传感器的数字温度计设计字数:9092,页数:26 论文编号:JD457 价格:120元基于DS18B20温度传感器的数字温度计设计摘要:本文介绍了一种基于DS18B20的数字温度计设计方案。
方案利用AT89S52单片机控制DS18B20进行数据采集并由HS1602液晶显示模块显示结果,另外,采集结果可由RS-232-C接口送入计算机显示并存储。按键控制实现过界报警温度设定和实时监控,利用AT24C08芯片进行存储,实现温度测量存储与再现。
关键字:温度采集,存储再现,过界报警,串行通信目 录摘要。
1关键字。
.11 引言。
.22 总体设计。
..22.1 方案论证。
..22.2 总体设计。
33 硬件设计。
..33.1 单片机系统 。
.33.2 温度传感器模块。
..43.3 存储模块。
.73.4 液晶显示模块 。
93.5 串口通信模块。
113.6 电源模块 。
124 软件设计。
134.1 主程序流程。
..134.2 DS18B20模块程序设计。
134.3 HS1602驱动程序设计。
.164.4 AT24C08存储模块程序设计。
184.5 RS-232-C串口通信模块程序设计。
.195 测试及结果分析 。
.226 附录 。
.237 参考资料。
.24以上回答来自: /42-2/2760.htm。
7.数字温度计的设计(DS18B20)
提供参考/********************************************************* DS18B20温度传感器 ** C51 ** yajou 2008-06-28 无CRC *********************************************************/#include "reg51.h"#include "intrins.h"#include "DS18B20.h"/********************************************************* us延时程序 *********************************************************/void Delayus(uchar us) {while(us--); //12M,一次6us,加进入退出14us(8M晶振,一次9us) }/********************************************************* DS18B20初始化 *********************************************************/bit Ds18b20_Init(void) //存在返0,否则返1{bit temp = 1;uchar outtime = ReDetectTime; //超时时间while(outtime-- && temp){Delayus(10); //(250)1514us时间可以减小吗ReleaseDQ();Delay2us();PullDownDQ();Delayus(100); //614us(480-960)ReleaseDQ();Delayus(10); //73us(>60)temp = dq;Delayus(70); //us}return temp;}/********************************************************* 写bit2DS18B20 *********************************************************/void Ds18b20_WriteBit(bit bitdata){if(bitdata){PullDownDQ();Delay2us(); //2us(>1us)ReleaseDQ(); //(上述1-15)Delayus(12); //86us(45- x,总时间>60)}else{PullDownDQ();Delayus(12); //86us(60-120)}ReleaseDQ();Delay2us(); //2us(>1us)}/********************************************************* 写Byte DS18B20 *********************************************************/void Ds18b20_WriteByte(uchar chrdata){uchar ii;for(ii = 0; ii < 8; ii++){Ds18b20_WriteBit(chrdata & 0x01);chrdata >>= 1;}}/********************************************************* 写 DS18B20 *********************************************************///void Ds18b20_Write(uchar *p_readdata, uchar bytes)//{// while(bytes--)// {// Ds18b20_WriteByte(*p_readdata);// p_readdata++;// }//}/********************************************************* 读bit From DS18B20 *********************************************************/bit Ds18b20_ReadBit(void){bit bitdata;PullDownDQ();Delay2us(); //2us( >1us)ReleaseDQ();Delay8us(); //8us( <15us)bitdata = dq;Delayus(7); //86us(上述总时间要>60us)return bitdata;}/********************************************************* 读Byte DS18B20 *********************************************************/uchar Ds18b20_ReadByte(void){uchar ii,chardata;for(ii = 0; ii < 8; ii++){chardata >>= 1;if(Ds18b20_ReadBit()) chardata |= 0x80;}return chardata;}/********************************************************* 读 DS18B20 ROM *********************************************************/bit Ds18b20_ReadRom(uchar *p_readdata) //成功返0,失败返1{uchar ii = 8;if(Ds18b20_Init()) return 1;Ds18b20_WriteByte(ReadROM);while(ii--){*p_readdata = Ds18b20_ReadByte();p_readdata++;}return 0;}/********************************************************* 读 DS18B20 EE *********************************************************/bit Ds18b20_ReadEE(uchar *p_readdata) //成功返0,失败返1{uchar ii = 2;if(Ds18b20_Init()) return 1;Ds18b20_WriteByte(SkipROM);Ds18b20_WriteByte(ReadScr);while(ii--){*p_readdata = Ds18b20_ReadByte();p_readdata++;}return 0;}/********************************************************* 温度采集计算 *********************************************************/bit TempCal(float *p_wendu) //成功返0,失败返1 (温度范围-55 --- +128){uchar temp[9],ii;uint tmp;float tmpwendu;TR1 = 0;TR0 = 0;//读暂存器和CRC值-----------------------if(Ds18b20_ReadEE(temp)){TR1 = 1;TR0 = 1;return 1;}//------------------------------------- //CRC校验------------------------------////此处应加入CRC校验等//////-------------------------------------//使温度值写入相应的wendu[i]数组中-----for(ii = i; ii > 0; ii--) {p_wendu++;}i++;if(i > 4) i = 0;//-------------------------------------//温度正负数处理-----------------------////-------------------------------------//温度计算-----------------------------tmp = temp[1]; //tmp <<= 8; //tmp |= temp[0]; //组成温度的两字节合并tmpwendu = tmp;*p_wendu = tmpwendu / 16;//-------------------------------------//开始温度转换-------------------------if(Ds18b20_Init()){TR1 = 1;TR0 = 1;return 1;}Ds18b20_WriteByte(SkipROM);Ds18b20_WriteByte(Convert);ReleaseDQ(); //寄生电源时要拉高DQ//------------------------------------TR1 = 1;TR0 = 1;return 0;}//////////DS18B20.h//////////////////////////********************************************************* I/O口定义 *********************************************************/sbit dq = P1^3;sbit dv = P1^4; //DS18B20强上拉电源/********************************************************* 命令字定义 *********************************************************/#define uchar unsigned char#define uint unsigned int#define ReleaseDQ() dq = 1; //上拉/释放总线#define PullDownDQ() dq = 0; //下拉总线#define Delay2us() _nop_();_nop_(); //延时2us,每nop 1us#define Delay8us() _nop_();。
转载请注明出处众文网 » 基于fpga数字温度计的毕业设计论文