温度测量设计报告

上传人:1888****888 文档编号:37086179 上传时间:2021-11-02 格式:DOC 页数:21 大小:159KB
收藏 版权申诉 举报 下载
温度测量设计报告_第1页
第1页 / 共21页
温度测量设计报告_第2页
第2页 / 共21页
温度测量设计报告_第3页
第3页 / 共21页
资源描述:

《温度测量设计报告》由会员分享,可在线阅读,更多相关《温度测量设计报告(21页珍藏版)》请在装配图网上搜索。

1、摘要随着技术的进步,单片机在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度检测和温度控制。本次设计是一个基于AT89C51单片机的测温系统,该系统使用了美国DALLAS公司生产的DS18B20作为温度传感器,利用液晶12864进行显示,使用键盘进行上下限报警温度的设置,实现了最简单的温度检测系统。该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。关键词: 单片机 DS18B20 温度传感器 目录1课程设计意义-2方案论证-1.1方案1- 1.2方案2-3单片机温度控制系统总体设计及原理-2.1系统的主要功能-2.2系统的工作原理-2.3系统的

2、总原理图-2.3系统的主要技术指标-4温度控制系统的硬件设计-3.1温度采集模块电路-3.11 数字温度传感器18B20的工作原理-3.12数字温度传感器18B20的工作电路- 3.2显示电路-3.3控制电路-3.4报警电路-5温度控制系统的软件设计-4.1主程序流程图-4.2读出温度子程序-4.3温度转换命令子程序-4.4计算温度子程序-4.5显示子程序-4.51显示当前温度子程序-4.52显示上下限温度子程序-4.6键盘扫描控制子程序-6总结与体会-7致谢-8参考文献-附:总程序1课程设计意义本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。特别是对单片机的系统设计有很大帮

3、助。本课程设计由一个人完成,在锻炼了自己的同时也增强了自己的独立科学创新的精神。2方案论证 2.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。2.2 方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,

4、可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。3单片机温度控制系统总体设计及原理3.1系统的主要功能控制器采用单片机AT89C51,温度传感器采用DS18B20,用3位LED液晶12864以并口传送数据实现温度显示,增加四个独立键盘调节温度上下限,报警采用蜂鸣器。3.2系统的工作原理AT89S51LED显示DS18B20温 度 传 感 器单片机复位时钟振荡报警温度调整键蜂鸣器,指示灯3.3系统的总原理图3.

5、4系统的主要技术指标1、基本测温范围55C +125C (67F +257F)。2、测温精度误差小于0.5C。 3、三位LED液晶12864温度显示范围0C +125C。4、上下限报警温度显示精度为1C。3温度控制系统的硬件设计3.1温度采集模块电路3.11 数字温度传感器18B20的工作原理1.DS18B20的主要特性(1)电压范围:3.05.5V(2)独特的单线接口方式。(3)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内(4)温范围55125,在-10+85时精度为0.5(5)可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.2

6、5、0.125和0.0625,可实现高精度测温(6)测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力2. DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。 3 高速暂存存储器高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。4.DS18B20暂存寄存器分布寄存器内容字节地址温度值低位 (LS

7、 Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8ROM指令表指 令约定代码功 能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合 ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM0FOH用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令

8、。适用于单片工作。告警搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。表6: RAM指令表指 令约定代码功 能温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。读暂存器0BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。复制暂存器48H将RAM中第3 、4字节的内容复制到EEPROM中。重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第3 、4字节。读供电方式0B4H读DS1820的供电模式。寄生供电时

9、DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。3.12数字温度传感器18B20的工作电路在总图中,由DS18B20,电阻组成,DS18B20的1引脚接地,2引脚通过电阻接VCC,3引脚与P3.2相连。3.2显示电路在总图中,通过三个液晶12864进行温度显示,为了节约I/0端口,利用锁存器进行片选,锁存器的输入端数据来自P0口。3.3控制电路在总图中,由四个独立键盘进行上下限温度的控制,键3按下一次显示上限温度,再按下一次显示当前温度;键4按下一次显示下限温度,再按一次显示当前温度;在键3按下的前提下,键1按下表示上限温度加1,键2按下表示下限温度减1;在键4按下的前提

10、下,键1按下表示上限温度加1,键2按下表示下限温度减13.4报警电路在总图中,在利用蜂鸣器报警,输入引脚为P2.3,低电平时蜂鸣器叫,且LED闪烁。4温度控制系统的软件设计4.1主程序流程图中断服务程序流程图定时器初值装入调用键盘扫描子程序返回主程序流程图YNYN初始化判断是否有键按下读取温度控制报警比较调用显示上下限温度子程序调用报警电路调用显示温度子程序结束开始始4.2读出温度子程序uint get_temp() /读取寄存器中存储的温度数据 uchar a,b;/uint temp;float f_temp; dsreset(); delay(1); tempwritebyte(0xcc

11、); tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 temp=b; temp=8; /两个字节组合为1个字 temp=temp|a; f_temp=temp*0.0625; /温度在寄存器中为12位 分辨率位0.0625 temp=f_temp*10+0.5; /乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; /temp是整型4.3温度转换命令子程序void tempchange(void) / dsreset(); delay(1); tempwr

12、itebyte(0xcc); / 写跳过读ROM指令 tempwritebyte(0x44); / 写温度转换指令4.4计算温度子程序uint get_temp() /读取寄存器中存储的温度数据 uchar a,b;float f_temp; dsreset(); delay(1); tempwritebyte(0xcc);/向DS18B20写入一个字节的函数 tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 temp=b; temp=8; /两个字节组合为1个字 temp=temp|a; f_temp=temp*0.06

13、25; /温度在寄存器中为12位 分辨率位0.0625 temp=f_temp*10+0.5; /乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; /temp是整型4.5显示子程序显示当前温度和上下限温度的显示函数之所以不同是因为当前温度值精确到0.5摄氏度,而上下限温度精确到1度。4.51显示当前温度子程序void display(uchar num,uchar dat) uchar i; dula=0; P0=tabledat; dula=1; dula=0; P1=0XFF; wela=0; i=0XFF; i=i&(0

14、X01)(num); P0=i;void dis_tempnow(uint t) uchar i; i=t/100; display(0,i); delay(6); i=t%100/10; display(1,i+10);delay(6); i=t%100%10; display(2,i); delay(4);4.52显示上下限温度子程序void display(uchar num,uchar dat) uchar i; dula=0; P0=tabledat; dula=1; dula=0; P1=0XFF; wela=0; i=0XFF; i=i&(0X01)(num); P0=i;voi

15、d dis_temp(uchar t) uchar i; i=t/100; display(0,i); delay(6); i=t%100/10; display(1,i); delay(6); i=t%100%10; display(2,i); delay(4);flag=0flag=1Key3再次按下Key3按下key4按下Set=0KEY再次按下Set=14.6键盘扫描控制子程序void keyscan() if(key3=0) delay(10); if(key3=0) flag=!(flag);while(!key3);!flag!setgKey1按下NY高温值加1低温值加1 if(

16、key4=0)Key2按下!flag!set高温值减1低温值减1 delay(10); if(key4=0) set=!(set); while(!key4); if(key1=0) delay(10); if(key1=0)&(flag=0) high+; if(key1=0)&(set=0) low+; while(!key1); if(key2=0) delay(10); if(key2=0)&(flag=0) high-; if(key2=0)&(set=0) low-; while(!key2); 6总结与体会在这次设计中,我学会了很多东西,例如如何使用数字温度传感器,如何进行液晶1

17、2864扫描,以及键盘扫描。在设计的过程中,尤其是编程时,我也走了很多弯路,例如,在设置预报警温度时,我曾试图从DS18B20中的九字节RAM中读取和写入上下限温度,但效果不好且不稳定,后来上网查并咨询老师,才了解到这种方法并不适用。 所以,有时候遇到问题也应及时与别人交流,这样才能少走弯路,提高效率。7致谢谢谢在这次实训中无私提供帮助的各位老师以及提供好的想法的同学们。8参考文献【1】数字电子技术基础,阎石主编【2】郭天祥视屏教程【3】马忠梅,张凯,等. 单片机的C语言应用程序设计(第四版) 北京航空航天大学出版社 附:总程序#include#define uchar unsigned ch

18、ar#define uint unsigned intuchar m;sbit lcdrs=P10;sbit lcdrw=P11;sbit lcden=P12;sbit buzzer=P34;sbit p07=P07;sbit p00=P00;sbit p01=P01;sbit p02=P02;sbit p03=P03;uchar code t0=wendu : ;uchar code t1=h: l: ;uchar code wendu=0123456789- ; /利用一个温度表解决温度显示乱码char i=15,j=0;uchar code duan=0x3f,0x06,0x5b,0x4

19、f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/此数组为 ! 19 !uchar code wei=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07;/温度传感器定义sbit DQ = P33;/定义ds18B20总线IOvoid delay1(int z)int x,y;for(x=10;x0;x-)for(y=z;y0;y-);void jianp()if(p00=0)delay1(5);if(p00=0)while(p00=0);i+;if(p01=0)delay1(5);if(p01=0)while(p01=0);i-;if(p02=0)

20、delay1(5);if(p02=0)while(p02=0);j+;if(p03=0)delay1(5);if(p03=0)while(p03=0);j-;/#液晶显示模块#/void delay(uchar z)uchar x,y;for(x=1000;x1;x-)for(y=z;y1;y-);void write_com(uchar com)lcdrs=0;P2=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)lcdrs=1;P2=date;delay(5);lcden=1;delay(5);lcden=0

21、;void init_lcd()lcden=0;lcdrw=0;write_com(0x38);write_com(0x01);write_com(0x0c);write_com(0x06);write_com(0x80);for(m=0;m16;m+)write_date(t0m);delay(0);write_com(0x80+0x40);for(m=0;m0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;tmpDelay(4);return(dat);/*/void WriteOneChar(unsigned char da

22、t)/写一个字节unsigned char i=0;for (m=8; m0; m-)DQ = 0;DQ = dat&0x01;tmpDelay(5);DQ = 1;dat=1;/*/unsigned int Readtemp()/读取温度unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换Init_DS18B20();WriteOneChar(0xCC); /跳过读序号

23、列号的操作WriteOneChar(0xBE); /读取温度寄存器a=ReadOneChar(); /连续读两个字节数据 /读低8位b=ReadOneChar(); /读高8位t=b;t(10*i)|num=0)write_com(0x80+0x40+11);write_date(wenduj/10);write_com(0x80+0x40+12);write_date(wenduj%10);write_com(0x80+0x40+13);write_date(wendu11);elsechar k=-j;write_com(0x80+0x40+11);write_date(wendu10);write_com(0x80+0x40+12);write_date(wenduk/10);write_com(0x80+0x40+13);write_date(wenduk%10);/#温度解析显示函数end#/void main()p07=0;buzzer=1;init_lcd();while(1)display();jianp();buzzer=1;单片机设计报告测温报警系统姓 名: 学 号 专业班级: 指导老师: 所在学院: 20010年 12月 24日

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!