51单片机设计报告-温度测量_第1页
51单片机设计报告-温度测量_第2页
51单片机设计报告-温度测量_第3页
51单片机设计报告-温度测量_第4页
51单片机设计报告-温度测量_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 mcs-51单片机课程设计任务书题 目: 温度测量 姓 名: 学 号: 学 院: 专 业: 年 级: 指导教师: 设 计 任 务一、技术要求使用单总线的ds18b20测量温度,进行led数码管显示,当温度超过50时,指示灯点亮,当温度低于45摄氏度时,指示灯熄灭。增加拓展功能-按键调节,实现温度上下限可调。2、 拟采用的方法(包括芯片的选型等)我们使用单片机实现对温度的控制,它的主要组成部分有:stc89c51单片机、温度传感器ds18b20、独立键盘、共阴led数码管显示电路、温度蜂鸣器报警及led灯指示电路。它可以实时的显示和设定上、下限温度,实现对设定温度的报警指示。 由于ds18b2

2、0将温度传感器、信号放大调理、a/d转换、接口全部集成于一芯片,与单片机连接简单、方便。并且选用数字温度传感器ds18b20,省却了采样保持电路、运放、数模转换电路以及进行长距离传输时的串并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。所以温度传感器采用ds18b20。根据实验的设计要求,选择ds18b20作为本系统的温度传感器,选择单片机stc89c51为测控系统的核心来完成数据采集、处理、显示、报警等功能。 采用传统的七段数码led显示器。led价格便宜,使用简单。3、 该同学在本设计中承担的任务(1) 收集整理相关资料;(2) 实验方案和结构框图的设计;(3) 程序流

3、程图设计;(4) 电路原理图设计;(5) 完成软件和硬件系统的调试,功能指标达到技术要求;设计任务书1、 主要思路与目标:我们使用单片机stc89c51实现对温度的控制;单总线的ds18b20温度传感器实现对温度的测量;将测得的温度用共阴led数码管显示;增加拓展功能通过三个独立按键实现温度测量和上、下限温度画面的切换和对上、下限温度的设置,即按下按键,由显示测量温度画面切换到显示上限温度,再按下按键,由显示上限温度画面切换到显示下限温度,再次按下按键,画面返回显示测量温度画面。通过另外两个按键,实现温度上下限的设定。高于上限值时蜂鸣器响起、指示灯亮起,直到温度低于下限温度时蜂鸣器和指示灯才关

4、闭。测量温度范围为0-99.9。默认上限报警温度为50,默认下限报警温度为45。报警可设置范围:最低上限报警温度等于当前下限报警值,最高下限报警值等于当前上限报警值。2、 所用到的主要元件:stc89c51单片机(包括周围复位电路、时钟电路)、ds18b20温度传感器、4位共阴led数码管、74hc573驱动芯片、3个按键、蜂鸣器、led灯、uln2003b、74ls14及若干电阻。3、 从接题开始收集相关材料,学习芯片的使用方法,准备设计;第二天画出设计框图,制定设计方案;第三天、第四天画出硬件电路图,编写软件程序,进行protues仿真;第五天开始进行硬件系统的调试和完善,同时开始准备编写

5、设计报告。 课程设计报告书课程名称: mcs-51单片机课程设计 题 目: 温度测量 姓 名: 学 号: 学 院: 专 业: 年 级: 指导教师: 目 录1.设计概述52.硬件电路图63.软件设计83.1流程图83.2程序94. 结论4.1测试结果194.2遇到问题和解决办法215.心得体会226.参考文献23附录:电路图24组员分工251、 设计概述温度控制广泛应用于人们的生产和生活中,人们使用温度计来采集温度,这样不但控制精度低、实时性差,而且操作人员的劳动强度大。即使有些用户采用半导体二极管作温度传感器,但由于其互换性差,效果也不理想。在某些行业中对温度的要求较高,由于工作环境温度不合理

6、而引发的事故时有发生,对工业生产可靠进行造成影响,甚至操作人员的安全。为了避免这些缺点,需要在某些特定的环境里安装数字温度测量及控制设备。本设计采用了单片机对温度进行测量,它测量精度较高,操作简单且价格低廉,能在超限的情况下进指示和报警,并能手动随时设置上、下限报警温度,即高于上限值时蜂鸣器响起、指示灯亮起,直到温度低于下限温度时蜂鸣器和指示灯才关闭。我们使用单片机stc89c51实现对温度的控制;单总线的ds18b20温度传感器实现对温度的测量;将测得的温度用共阴led数码管显示;增加拓展功能通过三个独立按键实现温度测量和上、下限温度画面的切换和对上、下限温度的设置,即按下按键,由显示测量温

7、度画面切换到显示上限温度,再按下按键,由显示上限温度画面切换到显示下限温度,再次按下按键,画面返回显示测量温度画面。通过另外两个按键,实现温度上下限的设定。高于上限值时蜂鸣器响起、指示灯亮起,直到温度低于下限温度时蜂鸣器和指示灯才关闭。测量温度范围为0-99.9。默认上限报警温度为50,默认下限报警温度为45。报警可设置范围:最低上限报警温度等于当前下限报警值,最高下限报警值等于当前上限报警值。2、 硬件电路图 根据学习开发板的原理图,我们共设计了五个部分,分别为cpu部分、温度测量部分、led显示部分、报警指示部分和独立按键部分。用protues画出的各模块电路图如下:图2 显示电路部分图1

8、 cpu部分(略去时钟电路)共阴led数码管显示电路部分如图2所示,我们采用动态显示的方式显示温度及上、下限设置值。以单片机p2口作为段选口,p0口作为片选口。其中p2.7是小数点位,将在第二位显示时置1让其显示为小数点。我们所用的温度传感器ds18b20的主要特性如下:(1)电压范围:3.05.5v;图3 温度测量部分(2)独特的单线接口方式;(3)ds18b20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。因此如图3所示,我们将ds18b20的dq单数据总线与单片机p3.7连接,gnd、vcc分别和电压地和5伏电源连接。如图4,在报警指示电路部分,由于

9、反相器和uln2003的作用,当p1.4、p1.5口输出为“0”时,light和beep口输出为低电平,从而点亮led灯、使蜂鸣器响,当p1.4、p1.5口输出为“1”时,uln2003无输出,保证了led灯和蜂鸣器处于关闭状态。如图5,独立按键部分,按键1用于进入设置上限、设置下限、当前温度状态切换;2、3两个按键分别接于单片机的外部中断0和外部中断1口,在中断打开的情况下,当其按下时,即进入中断子程序进行温度上、下限的设置。图5 独立按键部分图4 报警指示部分3、 软件设计3.1流程图按下3次按下1次按下2次yynn定时器初始化开中断检测温度判断是否有键按下关闭中断检测温度显示温度检测报警

10、报警比较调用显示下限温度子程序结束开始始开机画面调用显示上限温度子程序当按下add键时将限值温度进行加运算;当按下dec键时将限值温度进行减运算;超过上限温度报警、指示;低于下限温度关闭报警指示图6 主程序流程图主程序流程图如图6所示:3.2程序#include #define uint unsigned int#define uchar unsigned char bit f_st=0; /闪烁间隔标志sbit dq=p37; /ds18b20数据端sbit set=p31; /显示温度上、下限键sbit dec=p32; /减少键sbit add=p33; /增加键sbit beep=p1

11、5; /蜂鸣器sbit light=p14; /指示灯sbit dp = p27; /小数点位uchar x=0; /计数值uchar m,n; /温度值uchar set_st=0; /状态标志uchar h=50; /上限报警温度,默认值为35uchar l=45; /下限报警温度,默认值为27uchar codeled=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/*延时子程序*/void delay(uint num)while( num- );/*初始化定时器0*/void inittimer(void)tmod=0x

12、01;th0=0x3c;tl0=0xb0; /50ms/*定时器0中断服务程序*/void timer0(void) interrupt 1th0=0x3c;tl0=0xb0;x+;/*外部中断0服务程序*/void int0(void) interrupt 0 ex0=0; /关外部中断0if(dec=0&(set_st=1|set_st=2)delay(200);/延时去抖if(dec=0&set_st=1)h-;if(hl)h=l;else if(dec=0&set_st=2)l-;if(l99)h=99;else if(add=0&set_st=2)l+;if(lh)l=h; /*初始

13、化ds18b20*/void init_ds18b20(void)uchar x=0;p2=0x00;dq = 1; /dq复位delay(8); /稍做延时dq = 0; /单片机将dq拉低delay(80); /精确延时,大于480usdq = 1; /拉高总线delay(14);x = dq; /稍做延时后,如果x=0则初始化成功,x=1则初始化失败delay(20);/*读一个字节*/unsigned char readonechar(void)uchar i=0;uchar dat = 0;for (i=8;i0;i-)dq = 0; / 给脉冲信号dat=1;dq = 1; / 给

14、脉冲信号if(dq=1)dat=dat|0x80;delay(4);return(dat);/*写一个字节*/void writeonechar(uchar dat)uchar i=0;for (i=8; i0; i-)dq = 0;dq = dat&0x01;delay(5);dq = 1;dat=1;/*读取温度*/unsigned int readtemperature(void)uchar a=0;uchar b=0;uint t=0;float tt=0;init_ds18b20();writeonechar(0xcc); /跳过读序号列号的操作writeonechar(0x44);

15、 /启动温度转换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);/*读取温度*/void check_temperature(void)uint a,b,c;c=readtemperature()-5; /获取温度值并减去ds18b20的温漂误差a=c/100; /计算得到十位数字b=

16、c/10-a*10; /计算得到个位数字m=c/10; /计算得到整数位n=c-a*100-b*10; /计算得到小数位if(m99)m=99;n=9; /设置温度显示上限 /*显示开机初始化等待画面*/void disp_init() p2 = 0x40; /显示-p0 = 0xf7;delay(200);p0 = 0xfb;delay(200); p0 = 0xfd;delay(200);p0 = 0xfe;delay(200);p0 = 0xff;/*显示温度子程序*/void disp_temperature() p0 =0xf7; p2 =0x39; /显示c标示delay(200)

17、; p0 = 0xfb;p2 =ledn; /显示小数位delay(200);p0 = 0xfd; p2 =ledm%10; /显示个位dp = 1; /显示小数点 delay(200);p0 = 0xfe;p2 =ledm/10; /显示十位delay(200);p0 = 0xff;/*显示报警温度子程序*/void disp_alarm(uchar warning)p0 = 0xf7;p2 =0x39; /显示c标示delay(200);p0 = 0xfb;p2 =ledwarning%10; /显示个位delay(200);p0 = 0xfd;p2 =ledwarning/10; /显示

18、十位delay(200);p0 = 0xfe;if(set_st=1)p2 =0x76; /上限h标示if(set_st=2)p2 =0x38; /下限l标示delay(200);p0 = 0xff;/*报警子程序*/void alarm()if(m=h)light=0;beep=0;if(ml)light=1;beep=1;/*主函数*/void main(void)uint z;inittimer(); /初始化定时器ea=1; /全局中断开关tr0=1;et0=1; /开启定时器0it0=1; it1=1;check_temperature();for(z=0;z2)set_st=0;i

19、f(set_st=0)ex0=0; /关闭外部中断0ex1=0; /关闭外部中断1check_temperature();disp_temperature();alarm(); /报警检测else if(set_st=1)beep=1; /关闭蜂鸣器light=1; /关闭指示灯ex0=1; /开启外部中断0ex1=1; /开启外部中断1if(x=10)f_st=f_st;x=0;if(f_st) disp_alarm(h);else if(set_st=2)beep=1; /关闭蜂鸣器light=1; /关闭指示灯ex0=1; /开启外部中断0ex1=1; /开启外部中断1if(x=10)f

20、_st=f_st;x=0;if(f_st) disp_alarm(l);/*end*/4、 结论4.1测试结果 温度显示:使用仿真软件protues,系统的仿真图如图所示:图7.1 系统仿真图正常显示温度图7.2 系统仿真图闪烁显示上限温度 图7.3 系统仿真图闪烁显示下限温度 图7.4 系统仿真图超过上限温度报警指示 图7.5 系统仿真图低于下限温度报警指示关闭实现了基础的温度测量功能。通过按键调节,可调节上限温度和下限温度。实现当温度到达上限温度时,蜂鸣器响,指示灯亮起;当温度降到下限温度,蜂鸣器停止,指示灯灭。在实验室中,利用单片机学习板和ds18b20芯片,实现了同样的功能。符合实验要

21、求,并顺利完成实验的拓展功能温度上下限可调。4.2遇到问题和解决办法1、实验中所要求用的的ds18b20芯片,没有学习过,对其使用方法陌生。除了上网找资料和借阅相关书籍,还找来其他专业的同学进行指导。2、设计实验时,为了配合实验要求,将默认上限报警温度设为50,默认下限报警温度设为45,可在实验室的实际操作中,这样的温度是很难实现的。我们想到在程序中修改默认值,但每次均要调试到合适的温度让其报警,让其停止,很是麻烦。于是,我们想到如果将上下限温度做成可调的,不仅能省去麻烦,也能自我挑战,自我提升。3、在使用仿真软件protues进行仿真时,发现基本温度测量功能和显示温度可以实现,但是发现显示温

22、度时,温度显示不是特别稳定。修改程序,先送位选,再送段选,可使得其显示的更稳定。4、在实验的硬件调试中,发现显示温度时,总有数值覆盖在显示的温度上。经过查找和调试,发现在显示温度子程序中显示后添加关闭显示就可以解决该问题。5、在实验的硬件调试中,发现显示上限温度时,本应该上限温度标志h与上限温度一起闪烁,如h35c,可是h与35c却是先显示h,再显示35c,然后再分别闪烁。经过讨论,发现是延时的问题,修改显示报警温度子程序,问题解决。6、在实验的硬件调试中,发现基本温度测量功能和显示温度可以实现,也可以进行温度显示,上下限温度画面的切换,可是设置上下限温度的按键却不起作用。发现问题出在程序并没有进入外部中断,几经修改程序却无法解决。最后才发现,我们竟粗心的将接口接错了,将接口改回p3.2和p3.3,问题解决。7、在实验的硬件调试中,发现在通过按键加减上下限温度时,有时按下一次,温度却增加了2,修改程序,在外部中断服务程序0和外部中断服务程序1中加入延时去抖,问题解决。5、 心得体会这次课程设计让我深刻体会到实践的重要性,课上学的理论知识,如果没有经过实践,理解上的错误和容易出现的错误不容易被自己发现,由此得到的体会有以下几点:(

温馨提示

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

评论

0/150

提交评论