单片机课程设计——数字温度计_第1页
单片机课程设计——数字温度计_第2页
单片机课程设计——数字温度计_第3页
单片机课程设计——数字温度计_第4页
单片机课程设计——数字温度计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机课程设计报告数字温度计2009 年6月 15日摘要随着电子技术的进步和发展,单片机的应用已经普及到我们生活、工作、科研等各个领域,其技术日趋成熟和完善。本设计是一个基于at89s52单片机,采用“一线总线”数字化温度传感器ds18b20的测温系统。采用wave6000集成调试软件编写汇编程序实现温度的转化、数值计算以及数码管显示当前温度功能,并且可以通过按键设置高低温报警温度,对应配置报警器和报警指示灯。数码管显示采取动态扫描的方法,简化了硬件电路;温度调整运用中断处理,保证了报警温度调整的实时性。本设计可以方便快捷的实现温度的采集和显示,具有精度高、测温范围宽、体积小、功耗低等优点,适

2、用于我们日常生活和工、农业生产中的温度测量,也可以作为温度处理模块嵌入其它系统中,作为其他主系统的扩展电路。ds18b20与at89s52结合实现最简温度检测系统,结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。关键词:一线总线 动态扫描 中断处理 报警温度目录1 概述31.1 设计目的与意义31.2 设计任务及要求32 系统总体方案及硬件设计42.1数字温度计设计方案论证:42.1.1 方案一42.1.2 方案二42.1.3 方案三42.2 选用方案的设计思路42.2.1 主控芯片52.2.2 显示电路52.2.3 报警温度调整电路52.2.4 报警电路52.2.

3、5 温度传感器52.3 ds18b20温度传感器与单片机的接口电路62.4 系统整体硬件电路73 软件设计93.1主程序93.2读温度子程序103.3报警温度调整子程序113.4 显示子程序124 实验仿真134.1 温度显示134.2 报警温度调节155 课程设计体会17参考文献17附件1: 源程序代码18附件2: 系统原理图271 概述随着电子技术水平的不断提高,单片机在日常生活中的应用也越来越广泛,它所给人类带来的方便也是有目共睹的,其中数字温度计就是一个典型的例子。随着人们对它的要求越来越高,要为现代人的生活、工作以及科研提供更为方便的设施还需要从单片机技术和更优越的温度传感器入手,一

4、切向着数字化控制,智能化控制方向发展。 我们设计的数字温度计与传统的温度计相比,具有读数直观、方便,测温范围广,测温准确等优点,其输出温度采用数码管显示。主要应用于对测温精度和测温范围要求比较高的场所,也可在科研实验室使用。该设计主控芯片使用at89s52单片机,测温传感器使用“一线总线”数字化温度传感器ds18b20,使用4位共阴极led数码管以动态扫描方式,实现温度显示,能准确达到以上要求。1.1 设计目的与意义综合利用所学单片机知识完成一个单片机应用系统设计并仿真实现所要求的功能,从而加深对单片机软硬件知识的理解和对相关传感器的原理和使用方法的掌握,获得进一步的应用实践经验,为走出校门从

5、事单片机应用的相关工作打下基础。该设计同时也是我们对所学理论知识进行的检测和验证,理论与实践相结合,探索知识的真理殿堂,不拘泥于课本,培养自己发现问题并独立解决问题的能力。1.2 设计任务及要求 1)基本范围-50-110 2)精度误差小于0.5 3)led数码直读显示 4)扩展功能 5)可以任意设定上下限报警温度2 系统总体方案及硬件设计2.1数字温度计设计方案论证:2.1.1 方案一 由于本设计是测温电路,可以使用热敏电阻等器件利用其感温效应,在把随温度变化的电压或电流采集过来进行a/d转换之后,再利用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到a/d转换

6、电路,感温电路比较麻烦,而且热敏电阻的线性度不高,测量精度。2.1.2 方案二 直接使用数字温度传感器来测温,可以使用“一线总线”数字化温度传感器ds18b20。此传感器可以直接读取被测温度值,只需进行简单转换,就可以得到所测环境的温度值。显示电路采用串口移位静态显示方式,采用串入并出移位芯片74ls164和数码管来实现温度的显示。2.1.3 方案三 也是直接使用数字温度传感器ds18b20来测温,但显示电路采用动态扫描的方式来实现,电路简单,容易实现,节约成本。 比较以上三种方案,很容易看出,采用方案三,硬件电路比较简单,软件设计也不难,是为最佳选择,故采用方案三。2.2 选用方案的设计思路

7、 数字温度计电路设计总体设计方框图如图2-1所示,主控芯片采at89s52,温度传感器采用ds18b20,用4位led数码管以动态扫描方式实现温度显示,报警温度调整采用独立按键,报警电路由蜂鸣器和报警指示灯组成。 图2-1 系统总体框图2.2.1 主控芯片 at89s52价格便宜、体积小,很适合便携手持式产品的设计,4个io端口和2个外部中断完全能满足本设计的需要。2.2.2 显示电路显示电路采用4位共阴led数码管,从p0口输出段码,接470上拉电阻,用p2口的p2.4-p2.7脚来输出数码管动态扫描位选信号。2.2.3 报警温度调整电路采用独立键盘,分别用外部中断0和1来调整高温报警温度和

8、低温报警温度,在中断中查询加减按键的动作来调整温度,进入中断后,清ea,然后将与中断1即p3.3脚相连的按键作为确定键使用。2.2.4 报警电路采用蜂鸣器来发出报警声音,超高亮发光二极管作为报警指示灯,由于at89s52的驱动能力较弱,所以蜂鸣器要加三极管驱动,报警灯外接上拉电阻,单片机用灌电流方式点亮它,可获得较高的亮度!2.2.5 温度传感器 ds18b20温度传感器是美国dallas半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它可根据实际要求通过简单的编程实现912位的分辨率的设定。ds18b20的性能特点如下: 零待机功耗;温度以9或12位数字;用户可

9、定义报警设置;可通过数据线供电,电压范围为3.05.5v;独特的单线接口,仅需要一个端口引脚进行通信;多个ds18b20可以并联在一条线上,轻松实现传感器网络组建;报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件。 ds18b20内部高速暂存ram为8字节的存储器,前2个字节包含测得的温度信息,第3和第4字节th和tl的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。ds18b20温度转换得时间比较长,而且分辨率越高,所需要得温度数据转换时间越长。具体得分辨率转换为相应精度得温度数值所需时间如表2-1所示。我们的设计采用12位

10、精度,因此对18b20操作时要对时序根据表2-1来调整。当ds18b20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节中。单片机可以通过单线接口读出该数据,读数据时低8位在先,高8位在后,数据格式以0.0625lsb形式表示。当符号位s0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位s1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2-1 ds18b20温度转换时间表r1r0分辨率/位温度最大转换时间00993.750110187.510113751112750另外,由于d

11、s18b20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对ds18b20的各种操作按协议进行。操作协议为:初使化ds18b20(发复位脉冲)发rom功能命令发存储器操作命令处理数据。1、初始化:单总线的所有处理均从初始化开始。初始化过程是主机通过向作为从机的ds18b20芯片发一个具有一定时间宽度的初始化脉冲实现的。初始化后,才可进行读写操作。2 、rom操作命令:总线主机检测到ds18b20的存在 便可以发出rom操作命令。rom操作命令如表2-2所示:表2-2 rom操作命令指令代码read rom(读rom)33hmatch rom(匹配rom)55hskip

12、rom(跳过rom)cchsearch rom(搜索rom)f0halarm search(告警搜索)ech3、存储器操作:存储器操作命令如表2-3所示:4、时序:主机使用时间隙(time slots)来读写ds18b20的数据位和写命令字的位。2.3 ds18b20温度传感器与单片机的接口电路ds18b20可以采用两种方式供电,一种是采用电源供电方式,此时ds18b20的1脚接地,2脚作为信号线,3脚接电源;另一种是寄生电源供电方式。本设计采用第一种供电方式,为保证在有效的ds18b20时钟周期内提供足够的电流,可在信号线与电源线之间接上拉电阻,接口电路如图2-2所示。表2-3 存储区操作命

13、令指令代码write scratchpad(写暂存存储器)4ehread scratchpad(读暂存存储器)behcopy scratchpad(复制暂存存储器)48hconvert temperature(温度变换)44hrecall eprom(重新调用)b8hread power supply(读电源)b4h图2-2 ds18b20与单片机的接口电路2.4 系统整体硬件电路系统整体硬件电路包括:传感器数据采集电路,温度显示电路,上下限报警温度调整电路和报警电路,如图2-3所示。图中有4个独立式按键可以分别调整温度计的上下限报警温度,蜂鸣器可以在被测温度超出上下限范围内时,发出报警鸣叫声

14、音,同时报警指示灯超高亮发光二极管将被点亮。图中画出来的是上电复位电路,实际电路将采用按健加上电复位电路,使用比较方便,在程序跑飞时,可以手动复位,这样就不用重启单片机电源,就可以实现复位。显示电路采用动态扫描方式,这样不仅使用单片机端口较少,而且外围电路也比较简单。图2-3 系统整体硬件电路3 软件设计系统程序主要包括主程序,读温度子程序,报警温度调整子程序和显示子程序。3.1主程序主程序的主要功能是负责温度的实时显示、读出并处理ds18b20测量的当前温度值,其程序流程如图3-1所示。图3-1 主程序流程图3.2读温度子程序读出温度子程序的主要功能是读出温度转换之后ram中的前2个字节中暂

15、存的温度值,其程序流程图如图3-2所示。 图3-2 读温度流程图3.3报警温度调整子程序报警温度调整子程序主要是对按键的处理,具体流程如图3-3所示。 图3-3 报警温度调整流程图3.4 显示子程序显示子程序要先判断要显示的是18b20采集到的温度值还是报警温度值,再计算出温度值的百位(若温度值大于99c)、十位和个位并扫描显示,如图3-4。 图3-4 显示流程图4 实验仿真4.1 温度显示 由于18b20的测温范围是-55125c,所以当温度为负值时,第一位数码管用来显示温度的负号,如图4-1所示。图4-1 当温度值的十位数字为0时,不显示,如图4-2所示。图4-2 温度值为正且小于100c

16、时,第一位数码管也是用来显示符号,为正时不显示,如图4-3。图4-3当温度值大于等于100c时,第一位数码管用来显示温度的百位数字,如图4-4。图4-44.2 报警温度调节调节高温报警温度时,先按下高温调节按键,进入高温调节模式,此时4位数码管的第一位当报警温度小于100c时不显示,大于等于100c时显示百位数字,第二位显示报警温度的十位数字,第三位显示报警温度的个位,第四位显示“h” ,表示处于高温报警温度调节状态。按下加一键后报警温度值会加一并且数码管闪亮一次显示更新的高温报警温度值,按下减一键时执行同样操作。直到按下确定键,才退出设定状态。高温报警温度调节状态如图4-5所示。调节低温报警

17、温度时,先按下低温调节按键,进入低温调节模式,数码管显示和高温调节时相似,只是第四位显示“l” ,表示处于低温报警温度调节状态。按键操作也和高温调节时相同。低温报警温度调节状态如图4-6所示。在此值得一提的是低温调节按键和确认键是复用的,也就是说如果按下低温调节按键后再按一次,就会直接退出低温设定状态。另外低温调节按键还具有关报警电路的功能,当所测温度值超出上下限报警温度时,蜂鸣器响同时报警指示灯亮,此时连续按下2次确认键即可关掉报警,再连续按下2次确认键就又进入了报警状态。图4-5 高温报警温度调节图4-6 低温报警温度调节5 课程设计体会经过将近三周的学习与实践,终于成功的完成了我的数字温

18、度计的设计,它的各方面的性能基本上都已达到课程设计要求。 在本次设计过程中,我发现了很多的问题,而这些问题是在只学习课本知识时所不能遇到的,比如说由于at89s52的端口驱动能力较弱,用p0口送段码时要接上拉电阻,数码管的位选端理论上采用三极管驱动才能使数码管的亮度比较可观,可是在实际操作中,接上三极管驱动后出现了亮度不均匀的现象,而且很容受到干扰,去掉三极管驱动电路之后,显示正常,而且亮度也能满足要求,这就是理论与实践的差别。我在大量搜集资料的基础上,结合向同学和老师请教的策略,把遇到的问题都一一解决了,这使我增长了不少知识。尤其在用汇编语言编写单片机程序方面,我终于迈出了坚实的一步。从这次

19、的课程设计中,我真真切切的体会到了理论与实践的差距,所以在以后的学习中,我会更加注意理论联系实际,多亲自动手操作。把我所学的理论知识运用到实践当中去,在实践中检验理论知识,以此来加深对其的理解和掌握。这是我在这次课程设计中的最大收获。参考文献1 余发山,王福忠,单片机原理及应用技术,徐州:中国矿业大学出版社,2008,2 王为青,邱文勋,51单片机应用开发案例精选,北京:人民邮电出版社,2007.8,145-1583 ds18b20 pdf:附件1: 源程序代码;温度检测temper_l equ 29h ;温度低8位temper_h equ 28h ;温度高8位flag0 equ 35h ;温

20、度调整状态标志flag1 equ 36h ;是否检测到18b20标志位flag2 equ 37h ;报警标志位flag3 equ 38h ;高低温调整标志位flag4 equ 39h ;闪烁标志位f_bit equ 20h ;符号位a_bit equ 21h ;数码管个位b_bit equ 22h ;数码管十位x_bit equ 23h ;小数位h_tem equ 24h ;高温报警l_tem equ 25h ;低温报警dq bit p2.2 ;18b20数据线 org 0000h ljmp main org 0003h ljmp key_h org 0013h ljmp key_l org

21、0050hmain: mov sp,#57h mov tcon,#00h ;定义中断方式 setb ex0 setb ex1 setb ea mov 24h,#35 ;送高温报警初值 mov 25h,#15 ;送低温报警初值 clr flag2main0: lcall get_temper ;读转换温度 mov a,28h anl a,#0f0h jz zheng ;判断符号位 clr c mov a,29h cpl a inc a mov 29h,a mov a,28h cpl a jnc aaa inc aaaa: mov 28h,a mov f_bit,#10 ajmp bbbzheng

22、: mov f_bit,#11bbb: mov a,29h anl a,#0fh mov dptr,#numtab2 ;查表求得小数位值 movc a,a+dptr mov x_bit,a mov a,29h mov c,40h rrc a mov c,41h rrc a mov c,42h rrc a mov c,43h rrc a jb flag2,above ;若报警标志位为1,关报警 cjne a,24h,bud ;若报警标志位为0,则判断是否bud: jc below ;报警 setb p2.0 clr p2.1 ajmp dddbelow: cjne a,25h,bud0bud0:

23、 jnc above setb p2.0 clr p2.1 ajmp dddabove: clr p2.0 setb p2.1ddd: mov 29h,a clr flag0 lcall display ;调用显示子程序 ajmp main0 ;循环处理;ds18b20复位初始化init_18b20: setb dq nop clr dq mov r1,#3tsr1: mov r0,#107 djnz r0,$ djnz r1,tsr1 setb dq nop nop nop mov r0,#25tsr2: jnb dq,tsr3 djnz r0,tsr2 ljmp tsr4tsr3: set

24、b flag1 ljmp tsr5tsr4: clr flag1 ljmp tsr7tsr5: mov r0,#117tsr6: djnz r0,tsr6tsr7: setb dq ret;读出转换后的温度get_temper: setb dq lcall init_18b20 jb flag1,tss2 clr dq rettss2: mov a,#0cch lcall write_18b20 mov a,#44h lcall write_18b20 lcall display lcall init_18b20 mov a,#0cch lcall write_18b20 mov a,#0be

25、h lcall write_18b20 lcall read_18b20 ret;写ds18b20write_18b20: mov r2,#8 clr cwr1: clr dq mov r3,#5 djnz r3,$ rrc a mov dq,c mov r3,#21 djnz r3,$ setb dq nop djnz r2,wr1 setb dq ret;读18b20的子程序read_18b20: mov r4,#2 mov r1,#29hre00: mov r2,#8re01: clr c setb dq nop nop clr dq nop nop nop setb dq mov r3

26、,#8re10: djnz r3,re10 mov c,dq mov r3,#21re20: djnz r3,re20 rrc a djnz r2,re01 mov r1,a dec r1 djnz r4,re00 ret;报警温度调整子程序key_h: acall d5ms jb p3.2,over push acc push psw setb rs0 clr ea setb flag0 ;置位温度调整标志位 setb flag3 ;置位高温报警调整标志位 mov a,24h mov 30h,akey_ch: jb p3.4,jj_h acall d20ms jb p3.4,jj_h inc

27、 24h mov a,24h mov 30h,a acall displayjj_h: jb p3.5,qd_h acall d20ms jb p3.5,qd_h dec 24h mov a,24h mov 30h,a acall displayqd_h: jb p3.3,key_ch acall d5ms jb p3.3,key_ch clr flag0 ;即将退出调整,清零调整状态位 clr rs0 pop psw pop acc setb eaover: retikey_l: acall d20ms jb p3.3,over0 push acc push psw setb rs0 set

28、b flag0 ;置位温度调整标志位 cpl flag2 ;对报警标志位取反 clr flag3 ;清零高温报警调整标志位 clr ea mov a,25h mov 30h,akey_cl: jb p3.4,jj_l acall d20ms jb p3.4,jj_l inc 25h mov a,25h mov 30h,a acall displayjj_l: jb p3.5,qd_l acall d20ms jb p3.5,qd_l dec 25h mov a,25h mov 30h,a acall displayqd_l: jb p3.3,key_cl acall d20ms jb p3.3

29、,key_cl clr flag0 ;即将退出调整,清零调整状态位 clr rs0 pop psw pop acc setb eaover0: reti;显示子程序display: jb flag0,jian ;调整状态位为1,报警温度送显示处理 mov a,29h ;否则处理温度传感器读取的温度值 ajmp temjian: mov a,30htem: cjne a,#100,nx ;若温度=100,符号位用来显示百位nx: jc nnn mov b,#100 div ab mov f_bit,a mov 29h,b mov a,29h ajmp mmnnn: jnb flag0,mm mov f_bit,#11 ;若符号位值为0,不显示mm:

温馨提示

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

评论

0/150

提交评论