基于单片机的数字温度计设计课程设计.docx
- 文档编号:12287293
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:26
- 大小:493.09KB
基于单片机的数字温度计设计课程设计.docx
《基于单片机的数字温度计设计课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字温度计设计课程设计.docx(26页珍藏版)》请在冰点文库上搜索。
基于单片机的数字温度计设计课程设计
摘要
温度的检测与控制是工业消费过程中比拟典型的应用。
本设计以AT89C52单片机为核心,采用DS18B20温度传感器检测温度,由温度采集、温度显示,温度报警等功能模块组成。
基于题目根本要求,本系统对温度采集和温度显示系统行了重点设计。
本系统大局部功能能由软件实现,吸收了硬件软件化的思想。
实际操作时,各功能在开发板上也能完美实现。
本系统实现了要求的根本功能,其余发挥局部也能实现。
关键字:
AT89C52单片机、DS18B20温度传感器、数码管显示、温度采集
附录1源程序
附录2元件清单及PCB图
一.绪论
随着时代的开展,控制智能化,仪器小型化,功耗微量化得到广泛关注。
单片机控制系统无疑在这些忙面起到了举足轻重的作用。
单片机的应用系统设计业已成为新的技术热点,其中数字温度计就是一个典型的例子。
人民的生活与环境的温度息息相关,在工业消费过程中需要实时测量温度,在农业消费中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
测量温度的关键是温度传感器,温度传感器的开展经历了三个开展阶段:
①传统的分立式温度传感器
②模拟集成温度传感器
③智能集成温度传感器。
目前的智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术(ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。
社会的开展使人们对传感器的要求也越来越高,如今的温度传感器正在基于单片机的根底上从模拟式向数字式,从集成化向智能化、网络化的方向飞速开展,并朝着高精度、多功能、总线标准化、高可靠性及平安性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速开展,与传统的温度计相比,其具有读数方便,测温范围广,测温准确,输出温度采用数字显示,主要用于对测温要求比拟准确的场所,或科研实验室使用。
该设计控制器使用ATMEL公司的AT89C52单片机,测温传感器使用DALLAS公司DS18B20,用数码管来实现温度显示。
二.设计目的
1.掌握单片机的工作原理;
2.可以进展单片机简单系统的设计,包括电源模块、复位模块、键盘模块及相应控制模块的设计;
3.掌握单片机的指令系统及程序的编制构造,可以对详细的设计要求编写相应的控制程序;
4.可以根据相应的控制要求选择外围器件实现控制任务;
学习proteus仿真软件
三.设计要求
利用51单片机设计一数字温度计,要求适宜的传感器及相应的AD转换芯片,通过传感器来采集室内温度,并由LED进展显示。
详细要求如下:
1.设计单片机工作电源模块及其复位电路;
2.设计显示模块:
两个LED显示当前温度值;
3.设计传感器模块,将选择的传感器与A/D转换芯片相连,并通过单片机采集其数据;
4.绘制控制软件流程图;
5.编写相应的控制程序;
利用proteus进展仿真。
。
四.设计思路
1.根据设计要求,选择AT89C52单片机为核心器件。
2.温度检测器件采用DS18B20数字式温度传感器。
与单片机的接口为引脚。
3.键盘采用独立式按键,由三个按键组成,分别是:
设置键〔SET〕,加一建〔+1〕,确认键〔RET〕。
SET键〔上下限温度设置键〕:
当该键按下时,进入上下限温度设置功能。
通过引脚接入。
+1键〔加一调整键〕:
在输入上下限温度时,该键按下一次,被调整位加一。
通过引脚接入。
RET键〔确认键〕:
当该键按下时,指向下一个要调整的位。
通过引脚接入。
4.声音报警蜂鸣器通过引脚接入。
硬件电路设计总体框图为图:
图
五、系统的硬件构成及功能
1.主控制器
单片机AT89S52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
很合适便携手持式产品的设计使用。
AT89S52在仿真软件中的图像为图
图
2.显示电路
显示电路采用四位共阳LED数码管,从P3口RXD,TXD串口输出段码。
LED数码管在仿真软件中如图
图
3.温度传感器
DS18B20是美国DALLAS半导体公司最新推出的一种改良型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
•独特的单线接口仅需一个端口引脚进展通讯
•简单的多点分布应用
•无需外部器件
•可通过数据线供电
•零待机功耗
•测温范围-55~+125℃,以℃递增。
华氏器件-67~+2570F,以0.90F递增
•温度以9位数字量读出
•温度数字量转换时间200ms〔典型值〕
•用户可定义的非易失性温度报警设置
•报警搜索命令识别并标志超过程序限定温度〔温度报警条件〕的器件。
DS18B20内部构造主要由四局部组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置存放器。
DS18B20的管脚排列、各种封装形式如图所示,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
其电路图如下图.。
图.1外部封装形式
在仿真软件中如下图
图
DS18B20的测温原理如下图,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门翻开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进展计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置入减法计数器1和温度存放器中,减法计数器1和温度存放器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进展减法计数,当减法计数器1的预置值减到0时温度存放器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开场对低温度系数晶振产生的脉冲信号进展计数,如此循环直到减法计数器2计数到0时,停顿温度存放器值的累加,此时温度存放器中的数值即为所测温图中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度存放器值到达被测温度值,这就是DS18B20的测温原理。
另外,由于DS18B20单线通信功能是分时完成的,有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作必须按协议进展。
操作协议为:
初始化DS18B20〔发复位脉冲〕→发ROM功能命令→发存储器操作命令→处理数据。
图
在正常测温情况下,DS1820的测温分辨力为℃,可采用下述方法获得高分辨率的温度测量结果:
首先用DS1820提供的读暂存器指令〔BEH〕读出以℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位〔LSB〕,得到所测实际温度的整数局部Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。
考虑到DS1820测量温度的整数局部以℃、℃为进位界限的关系,实际温度Ts可用下式计算:
表1.局部温度值对应的二进制温度数据。
温度/℃
二进制表示
十六进制表示
+125
0000011111010000
07D0H
+85
0000010101010000
0550H
0000000110010000
0191H
0000000010100001
00A2H
0000000000000010
0008H
0
0000000000001000
0000H
1111111111110000
FFF8H
1111111101011110
FF5EH
1111111001101111
FE6FH
-55
1111110010010000
FC90H
六.系统整体硬件电路
根据设计要求与设计思路,硬件电路设计框图如下图,在仿真软件Proteus上完成。
其中LED数码管以动态扫描法实现温度显示,由四个PNP型晶体管Q2,Q3,Q4,Q5和八个电阻组成,基极与单片机的,连接。
DS18B20的数据I/O端与单片机引脚连接。
外部晶振为12MHz。
蜂鸣器通过Q1放大后与引脚相连。
图中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。
图中的按健复位电路是上电复位加手动复位,使用比拟方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。
图系统总体硬件电路
七.系统程序设计
数字式温度计的应用程序主要包括主程序,温度检测程序,温度转换程序,LED显示程序等。
系统的主程序主要用来初始化一些系统参数,对DS18B20的配置数据进展一系列的设定。
温度检测程序是对DS18B20的状态不断地查询,读出RAM中的9字节,在读出时需进展CRC校验,校验有错时不进展温度数据的改写,读取当前的温度值后,进展温度转化程序,对温度符号处理和温度值的BCD码处理,进展温度值正负的断定,将其段码送至显示缓冲区,以备定时扫描效劳程序处理。
LED显示程序主要对显示缓冲器中的显示数据进展刷新操作,当最高显示位为0时,将符号显示位移入下一位。
总程序程序代码见附录一
八.测量及其结果分析
仿真结果
软件方面,在Proteus编译下进展,源程序编译及仿真调试。
在软件中选定传感器后可对其进展环境温度设置,如图,将环境温度设为。
图
然后点击软件执行键,按操作步骤施行后,观察LED数码管示数,此时示数如图。
图
可见本次软件测试结果良好。
2.硬件测试结果
在硬件测试方面,检查电路板及焊接的质量情况,在检查无误后通电检查LED显示器。
其中DS18B20实物图为
在室温下,LED显示器示数如图,为摄氏度
图
用手盖住温度传感器后,LED显示器示数如图,为摄氏度。
比拟可知,硬件调试结果也到达了要求。
九.设计心得体会
本次课设对我来说是一次难得的经历,首先是第一次接触了仿真软件Proteus,在使用时经历了很屡次失败,因为这款软件与以前使用的各种软件有很多不同,使用时不停出错,接线时由于元件放置不合理而接的杂乱无章;输入源程序时还较为顺利,显示结果比拟满意。
其次是程序设计,我们在参考别人成功先例的根底上根据自己设计的需要编制程序,其中历经不少曲折,最后我的收获是,编程一定要细心,针对每一个细节,稍有忽略,程序就不能正常工作。
最后是单片机理论操作,由于我自己已买了一块开发板,所以硬件调试比拟顺利,效果也不错,就是DS18B20温度传感器灵敏度不太高,示数变化不大。
另外,我前期花了一些时间专门学习这块芯片,理解了DS18B20的工作原理的时序图。
在这次的理论与学习中,尽管期间困难重重,但我还是从中学习了不少新的知识与技能和解决困难的方法,也终于体验到了经历困难到最终获得成功的那种无以言表的喜悦之情,总之,本次课设是我收获最多的一次,也希望自己在以后的各项研究活动中能坚持这种精神。
十.参考文献
【1】李朝青单片机原理及接口技术。
北京航空航天大学出版社,2005年
【2】李群芳肖看单片机原理、接口及应用。
清华大学出版社,2005年
【3】陈汝全电子技术常用器件应用手册。
机械工业出版社,2004年
【4】将辉平,基于proteus的单片机系统设计与仿真实例,2007年
张俊谟单片机中级教程原理与应用。
北京航空航天大学出版社,2000年
附录一源程序
#include
#include"DS18B20.h"
#defineuintunsignedint
#defineucharunsignedchar//宏定义
#defineSETP3_1//定义调整键
#defineDECP3_2//定义减少键
#defineADDP3_3//定义增加键
#defineBEEPP3_7//定义蜂鸣器
bitshanshuo_st;//闪烁间隔标志
bitbeep_st;//蜂鸣器间隔标志
sbitDIAN=P2^7;//小数点
ucharx=0;//计数器
signedcharm;//温度值全局变量
ucharn;//温度值全局变量
ucharset_st=0;//状态标志
signedcharshangxian=38;//上限报警温度,默认值为38
signedcharxiaxian=15;//下限报警温度,默认值为5
ucharcodeLEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/*****延时子程序*****/
voidDelay(uintnum)
{
while(--num);
}
/*****初始化定时器0*****/
voidInitTimer(void)
{
TMOD=0x1;
TH0=0x4c;
TL0=0x00;//50ms〔晶振12M〕
}
/*****定时器0中断效劳程序*****/
voidtimer0(void)interrupt1
{
TH0=0x4c;
TL0=0x00;
x++;
}
/*****外部中断0效劳程序*****/
voidint0(void)interrupt0
{
EX0=0;//关外部中断0
if(DEC==0&&set_st==1)
{
shangxian--;
if(shangxian } elseif(DEC==0&&set_st==2) { xiaxian--; if(xiaxian<0)xiaxian=0; } } /*****外部中断1效劳程序*****/ voidint1(void)interrupt2 { EX1=0;//关外部中断1 if(ADD==0&&set_st==1) { shangxian++; if(shangxian>99)shangxian=99; } elseif(ADD==0&&set_st==2) { xiaxian++; if(xiaxian>shangxian)xiaxian=shangxian; } } /*****读取温度*****/ voidcheck_wendu(void) { uinta,b,c; c=ReadTemperature()-5;//获取温度值并减去DS18B20的温漂误差 a=c/100;//计算得到十位数字 b=c/10-a*10;//计算得到个位数字 m=c/10;//计算得到整数位 n=c-a*100-b*10;//计算得到小数位 if(m<0){m=0;n=0;}//设置温度显示上限 if(m>99){m=99;n=9;}//设置温度显示上限 } /*****显示开机初始化等待画面*****/ Disp_init() { P2=0xbf; P1=0xfe; Delay(200); P2=0xbf; P1=0xfd; Delay(200); P2=0xbf; P1=0xfb; Delay(200); P2=0xbf; P1=0xf7;//第四 Delay(200); P1=0xff;//关闭显示 } /*****显示温度子程序*****/ Disp_Temperature()//显示温度 { P2=0xc6;//显示C P1=0xf7;// Delay(300); P2=LEDData[n];//显示个位 P1=0xfb;// Delay(300); P2=LEDData[m%10];//显示小数点 DIAN=0; P1=0xfd; Delay(300); P2=LEDData[m/10];//显示百位 P1=0xfe; Delay(300); P1=0xff;//关闭显示 } /*****显示报警温度子程序*****/ Disp_alarm(ucharbaojing) { P2=0xc6;//显示C P1=0xf7; Delay(200); P2=LEDData[baojing%10];//显示十位 P1=0xfb; Delay(200); P2=LEDData[baojing/10];//显示百位 P1=0xfd; Delay(200); if(set_st==1)P2=0x89; elseif(set_st==2)P2=0xc7;//上限H、下限L标示 P1=0xfe; Delay(200); P1=0xff; } /*****报警子程序*****/ voidAlarm() { if(x>=10){beep_st=~beep_st;x=0;} if((m>=shangxian&&beep_st==1)||(m elseBEEP=1; } /*****主函数*****/ voidmain(void) { uintz; InitTimer();//初始化定时器 EA=1;//全局中断开关 TR0=1; ET0=1;//开启定时器0 IT0=1; IT1=1; check_wendu(); check_wendu(); for(z=0;z<300;z++) { Disp_init(); } while (1) { if(SET==0) { Delay(2000); do{}while(SET==0); set_st++;x=0;shanshuo_st=1; if(set_st>2)set_st=0; } if(set_st==0) { EX0=0;//关闭外部中断0 EX1=0;//关闭外部中断1 check_wendu(); Disp_Temperature(); Alarm();//报警检测 } elseif(set_st==1) { BEEP=1;//关闭蜂鸣器 EX0=1;//开启外部中断0 EX1=1;//开启外部中断1 if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st){Disp_alarm(shangxian);} } elseif(set_st==2) { BEEP=1;//关闭蜂鸣器 EX0=1;//开启外部中断0 EX1=1;//开启外部中断1 if(x>=10){shanshuo_st=~shanshuo_st;x=0;} if(shanshuo_st){Disp_alarm(xiaxian);} } } } /*****END*****/ DS18B20.h: #include #defineDQP3_6//定义DS18B20总线I/O /*****延时子程序*****/ voidDelay_DS18B20(intnum) { while(num--); } /*****初始化DS18B20*****/ voidInit_DS18B20(void) { unsignedcharx=0; DQ=1;//DQ复位 Delay_DS18B20(8);//稍做延时 DQ=0;//单片机将DQ拉低 Delay_DS18B20(80);//准确延时,大于480us DQ=1;//拉高总线 Delay_DS18B20(14); x=DQ;//稍做延时后,假如x=0那么初始化成功,x=1那么初始化失败 Delay_DS18B20(20); } /*****读一个字节*****/ unsignedcharReadOneChar(void) { unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; Delay_DS18B20(4); } return(dat); } /*****写一个字节*****/ voidWriteOneChar(unsignedchardat) { unsignedchari=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; Delay_DS18B20(5); DQ=1; dat>>=1; } } /*****读取温度*****/ intReadTemperature(void) { unsignedchara=0; unsignedcharb=0; intt=0; floattt=0; Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0x44);//启动温度转换 Init_DS18B20(); WriteOneChar(0xCC);//跳过读序号列号的操作 WriteOneChar(0xBE);//读取温度存放器 a=ReadOneChar();//读低8位 b=ReadOneChar();//读高8位 t=b; t<<=8; t=t|a; tt=t*0.0625; t=tt*10+0.5;//放大10倍输出并四舍五入 return(t); } /*****END*****/ 附录二元件清单及PCB图 数字温度计电路元器件清单 元器件名称 参数 数量 元器件名称 参数 数量 单片机 89C52 1 数码管 1 晶体振荡器 12MHz 1 蜂鸣器 1 电容 3 温度传感器 DS18B20 1 电阻 19 PCB图 基于单片机数字温度计设计 设计题目
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 温度计 设计 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)