本科生专业课程设计 题目: 数字温度计 学 院 电子信息工程学院 专 业 电气工程及其自动化 学 号 2011448024 姓 名 田志兴 2014年 8月 5日 目录 0、 前言………………………………………………………………2 - 任务要求与效果呈现……………………………………………2
- 任务分析…………………………………………………………2
- 硬件与软件设计…………………………………………………3
- 仿真及调试………………………………………………………5
- 总结………………………………………………………………6
6、 附录………………………………………………………………6
前言
对于现代工业生产过程,温度是一个非常重要的参数,例如,仓库温度,锅炉热水温度等。对温度的监测,需要满足实时性,下面介绍一种简易的温度监控系统,其兼具良好的经济和高效性。 1、任务要求与效果呈现 设计温度监控系统,采用DS18B20作为测温传感器,用AT89C2051作处理器,用数码管显示,并用LED灯作报警器。当测量温度高于100℃或低于-20℃时,发出警报。其效果如图1所示。 (a)规定温度范围内的正温度,数码管显示温度,LED不亮即不报警 (b)规定温度范围内的负温度,数码管显示温度,LED不亮即不报警 (c)超出温度上限(100℃),数码管显示温度,LED亮即报警 (d)超出温度下限(-20℃),数码管显示温度,LED亮即报警 图1 2、任务分析 DS18B20作为温度传感器,可以实现现场温度的快速采集与反馈,并且其外部只有一个信号引脚,使用方便简洁。使用AT89C2051作为处理器使得在不影响其处理效果的前提下,有效的精简了系统结构。数码管显示经济适用,简单明了。 在实际工作中,温度往往要有一定的变化范围,避免出现安全故障。因而,在此处设置了温度的上限,即100℃,温度下限,即-20℃。当温度超出规定范围-20℃~100℃时,作为报警装置的LED的被点亮,实现温度报警,保障了生产过程的安全性。 3、硬件与软件设计 3.1、硬件设计 3.1.1、硬件原理图(Proteus) 图2 说明:利用138译码器配合以反相器7404,实现了用三个IO口控制五个数码管的通断,节约了资源。 3.1.2、硬件PCB图 图3
3.1.3 硬件实物图 图4 说明:此处使用的电源是2节4V电池,即8V电源,所以采用7805稳压芯片构成的简易稳压电路,将8V输入转换成5V输出,给测温系统供电。 3.2、软件设计 3.2.1、其程序流程图如图5所示。 (见附录) 3.2.2、程序(见附录) 4、仿真及调试 4.1、HEX文件的生成 打开Keil ,新建建项目“tian”,编写“tian.asm”程序代码。经调试、编译和链接,无误后生成“ttian.hex”文件如图6所示。 图6 4.2、仿真调试 在已用Proteus画好的电路图中,双击单片机“AT89C2051”,加载“tian.hex”,再单击开始,就可以看到图7所示的设计效果了。 图7 5、总结 这次课程设计让我切实体会到了用DS18B20测温的便捷。通过动手焊接实际硬件电路,我也感觉到:相比51单片机,使用2051,在硬件电路上相当简洁,因而也节省了整个电路板的空间,使得系统小型化。还有就是软件方面,这次设计让我温习了keil和Proteus的使用,而且增加了对这两个软件的使用技能以及熟练程度。 6、附录
单片机源程序如下:- ORG 0000H
- LJMP MAIN
- ORG 0030H
- MAIN:LCALL CSH0 ;DS18B20初始化
- MOV A,#0CCH ;单点测温时执行跳过ROM命令节省访问时间
- LCALL WRITE
- MOV A,#44H ;发开始温度转换命令
- LCALL WRITE
- LCALL CSH0 ;DS18B20初始化
- MOV A,#0CCH ;单点测温时执行跳过ROM命令节省访问时间
- LCALL WRITE
- MOV A,#0BEH ;读存储器命令(读的字节暂存存储器,此后读操作)
- LCALL WRITE
- LCALL READ ;读出已转换的温度值低字节
- MOV 2BH,A
- LCALL READ ;读出已转换的温度值高字节
- MOV 2CH,A
- LCALL ERSH ;二进制转化成十进制
- LCALL DISPL ;调用动态显示的子程序
- LCALL MAXorMIN;***判断是否超出上下限***
- LJMP MAIN
- ;******************第一个DS18B20初始化子程序*******************
- CSH0:CLR P3.0
- MOV R2,#250
- CSH1:DJNZ R2, CSH1 ;主机发置位脉冲持续2μs*240=480μs
- SETB P3.0 ;主机释放总线控制P3.2口改为输入
- MOV R2,#30
- CSH4:DJNZ R2, CSH4 ;DS18B20等待2μs*30=60μs
- JB P3.0,CSH0 ;DS18B20没准备好,重来
- MOV R3,#120 ;DS18B20数据线变低
- CSH5:DJNZ R3,CSH5 ;DS18B20数据线低电平状态可持续2μs*120=240us
- JB P3.0,CSH3 ;18B20数据线变高,初始化成功
- LJMP CSH0 ;初始化失败,重来
- CSH3:MOV R2,#240
- CSH2:DJNZ R2, CSH2;18B20应答过程最少2μs*240=480μs
- RET
- ;******************写DS18B20子程序**********************
- WRITE:MOV R3,#8
- WR1: SETB P3.0 ;保证连续写2位间的间隙大于1μs
- MOV R4,#7
-
- CLR P3.0
- RRC A
- WR2: DJNZ R4,WR2 ;18B20数据线变低后2μs*7+1=15μs开始采样数据
- MOV P3.0,C ;将命令字从低位按位依次送18B20
- MOV R4,#22
- WR3: DJNZ R4,WR3;保证整个写过程持续2μs*22+1=45μS
- DJNZ R3,WR1;送完整个命令字
- SETB P3.0
- RET
- ;********************读DS18B20子程序*********************
- READ:MOV R3,#8
- RE1: CLR P3.0
- MOV R4,#4
- NOP ;低电平持续2μs
- SETB P3.0 ;P3.0口设为输入口
- RE2: DJNZ R4,RE2 ;等待2μs*4=8μs
- MOV C,P3.0 ;主机(从低位)按位读入18B20数据
- RRC A ;数据逐位(先低位后高位)送入A
- MOV R4,#30
- RE3: DJNZ R4,RE3 ;保证读数据过程持续2μs*30=60μs
- DJNZ R3,RE1 ;读完整个转换值(不含符号位)并存21H中
- RET
- ;************判断是否为负、温度精度转换********************
- ERSH: MOV A,2CH ;把温度的高字节给了A
- JB ACC.7,BB ;温度为负转变补(BB)程序段
- SETB F0 ;F0作为是否为负数的标志
- MOV R7,#0FFH ;温度为正不点亮
- ZHCH: MOV A,2BH ;屏蔽温度低字节的小数位
- ANL A,#0F0H
- SWAP A
- MOV 2DH,A
- MOV A,2CH ;屏蔽温度高字节的符号位
- ANL A,#07H
- SWAP A
- ADD A,2DH
- CFZH: MOV B,#10
- DIV AB
- MOV 41H,B ;41H中为个位
-
- MOV B,#10
- DIV AB
- MOV 42H,B ;42H中存放十位
-
- MOV B,#10
- DIV AB
- MOV 43H,B ;43H中为百位
-
- ESHD: MOV A,2BH ;低精度二十进制转换小数处理程序
- JB ACC.3,XS ;小数十分位为1,则跳转到XS
- MOV 40H,#00H
- RET
- XS: MOV 40H,#05H ;43H中存放小数位
- RET
-
- BB: CLR F0
- MOV R7,#0BFH ;负数让第1个数码管显示为"-"
- MOV A,2BH ;负数补码求补
- CPL A
- ADD A,#1
- MOV 2BH,A ;负温度低字节求补后送2BH
- MOV A,2CH
- CPL A
- ADDC A,#0
- MOV 2CH,A ;负温度高字节求补后送2CH
- LJMP ZHCH ;负数求补后转到ZHCH
- ;*************************显示子程序**************************
- DISPL:MOV A,R7 ;取显示的正负号
- MOV P1,A ;发送字段代码
- CLR P3.5 ;Y5=0, K5=1
- ACALL DL2MS ;符号位
- SETB P3.5 ;138A脚置1,关闭所有位码
- MOV DPTR,#CSTAB;字段码表首址送DPTR
- MOV R1,#40H
- MOV A,@R1
- MOVC A,@A+DPTR
- MOV P1,A
- CLR P3.4
- CLR P3.7 ;Y2=0,K1=1
- ACALL DL2MS ;小数
- SETB P3.4
- SETB P3.7
- INC R1
- MOV A,@R1
- MOVC A,@A+DPTR
- ANL A,#7FH ;个位小数点亮 数码管的Dp段点亮,其他段跟随A中的值
-
- MOV P1,A
- CLR P3.7 ;Y3=0,K2=1
- ACALL DL2MS ;个位
- SETB P3.7
-
- INC R1
- MOV A,@R1
- MOVC A,@A+DPTR
- MOV P1,A
- CLR P3.4 ;Y3=0,K3=1
- CLR P3.5
- ACALL DL2MS ;十位
- SETB P3.4
- SETB P3.5
-
- INC R1
- MOV A,@R1
- MOVC A,@A+DPTR
- MOV P1,A
- CLR P3.4 ;Y6=0,K4=1
- ACALL DL2MS ;百位
- SETB P3.4
- RET
- ;*************************上下限判断子程序**************************
- MAXorMIN: PUSH ACC
- JNB F0,MIN
- MAX: MOV A,43H ;正温度时,判断是否超过上限100℃
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
http://www.51hei.com/bbs/dpj-89441-1.html
|