找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2765|回复: 3
打印 上一主题 下一主题
收起左侧

单片机温度计制作及调试(超上下限报警)课程设计论文

[复制链接]
跳转到指定楼层
楼主
本科生专业课程设计
     题目      数字温度计            
       学    院 电子信息工程学院
       专    业 电气工程及其自动化
学    号 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、附录

单片机源程序如下:
  1.       ORG   0000H
  2.       LJMP  MAIN
  3.       ORG   0030H
  4. MAIN:LCALL  CSH0    ;DS18B20初始化
  5.      MOV    A,#0CCH ;单点测温时执行跳过ROM命令节省访问时间
  6.      LCALL  WRITE
  7.      MOV    A,#44H  ;发开始温度转换命令
  8.      LCALL  WRITE
  9.      LCALL  CSH0    ;DS18B20初始化                                
  10.      MOV    A,#0CCH ;单点测温时执行跳过ROM命令节省访问时间         
  11.      LCALL  WRITE                                                  
  12.      MOV  A,#0BEH ;读存储器命令(读的字节暂存存储器,此后读操作)
  13.      LCALL  WRITE   
  14.      LCALL  READ   ;读出已转换的温度值低字节
  15.      MOV    2BH,A
  16.      LCALL  READ   ;读出已转换的温度值高字节
  17.      MOV    2CH,A
  18.      LCALL  ERSH    ;二进制转化成十进制
  19.      LCALL  DISPL   ;调用动态显示的子程序
  20.               LCALL  MAXorMIN;***判断是否超出上下限***
  21.      LJMP   MAIN   
  22. ;******************第一个DS18B20初始化子程序*******************
  23. CSH0:CLR    P3.0         
  24.      MOV    R2,#250
  25. CSH1:DJNZ   R2, CSH1  ;主机发置位脉冲持续2μs*240=480μs
  26.      SETB   P3.0      ;主机释放总线控制P3.2口改为输入
  27.      MOV    R2,#30
  28. CSH4:DJNZ   R2, CSH4  ;DS18B20等待2μs*30=60μs
  29.      JB     P3.0,CSH0 ;DS18B20没准备好,重来
  30.      MOV    R3,#120     ;DS18B20数据线变低
  31. CSH5:DJNZ   R3,CSH5   ;DS18B20数据线低电平状态可持续2μs*120=240us
  32.      JB     P3.0,CSH3 ;18B20数据线变高,初始化成功
  33.      LJMP   CSH0       ;初始化失败,重来
  34. CSH3:MOV   R2,#240
  35. CSH2:DJNZ  R2, CSH2;18B20应答过程最少2μs*240=480μs
  36.       RET
  37. ;******************写DS18B20子程序**********************
  38. WRITE:MOV   R3,#8
  39. WR1: SETB   P3.0  ;保证连续写2位间的间隙大于1μs
  40.       MOV   R4,#7

  41.       CLR   P3.0
  42.       RRC   A
  43. WR2: DJNZ   R4,WR2 ;18B20数据线变低后2μs*7+1=15μs开始采样数据
  44.      MOV    P3.0,C ;将命令字从低位按位依次送18B20
  45.      MOV    R4,#22
  46. WR3: DJNZ   R4,WR3;保证整个写过程持续2μs*22+1=45μS
  47.      DJNZ   R3,WR1;送完整个命令字
  48.      SETB   P3.0
  49.      RET
  50. ;********************读DS18B20子程序*********************
  51. READ:MOV   R3,#8
  52. RE1: CLR   P3.0
  53.      MOV   R4,#4
  54.      NOP          ;低电平持续2μs
  55.      SETB  P3.0   ;P3.0口设为输入口
  56. RE2: DJNZ  R4,RE2 ;等待2μs*4=8μs
  57.      MOV   C,P3.0  ;主机(从低位)按位读入18B20数据
  58.      RRC   A       ;数据逐位(先低位后高位)送入A
  59.      MOV   R4,#30
  60. RE3: DJNZ  R4,RE3 ;保证读数据过程持续2μs*30=60μs
  61.      DJNZ  R3,RE1 ;读完整个转换值(不含符号位)并存21H中
  62.      RET
  63. ;************判断是否为负、温度精度转换********************
  64. ERSH: MOV   A,2CH  ;把温度的高字节给了A
  65.       JB    ACC.7,BB ;温度为负转变补(BB)程序段
  66.                 SETB               F0 ;F0作为是否为负数的标志
  67.       MOV   R7,#0FFH ;温度为正不点亮
  68. ZHCH: MOV   A,2BH   ;屏蔽温度低字节的小数位      
  69.       ANL   A,#0F0H
  70.       SWAP  A   
  71.       MOV   2DH,A
  72.       MOV   A,2CH    ;屏蔽温度高字节的符号位
  73.       ANL   A,#07H
  74.       SWAP  A
  75.       ADD   A,2DH         
  76. CFZH: MOV   B,#10
  77.       DIV   AB
  78.       MOV   41H,B    ;41H中为个位

  79.       MOV   B,#10
  80.       DIV   AB
  81.       MOV   42H,B    ;42H中存放十位

  82.       MOV   B,#10
  83.       DIV   AB
  84.       MOV   43H,B    ;43H中为百位

  85. ESHD: MOV   A,2BH    ;低精度二十进制转换小数处理程序
  86.       JB    ACC.3,XS ;小数十分位为1,则跳转到XS
  87.       MOV   40H,#00H      
  88.       RET
  89. XS:   MOV   40H,#05H ;43H中存放小数位
  90.       RET

  91. BB:   CLR F0
  92.       MOV   R7,#0BFH ;负数让第1个数码管显示为"-"
  93.       MOV   A,2BH    ;负数补码求补
  94.       CPL   A
  95.       ADD   A,#1
  96.       MOV   2BH,A   ;负温度低字节求补后送2BH
  97.       MOV   A,2CH      
  98.       CPL   A            
  99.       ADDC  A,#0
  100.       MOV   2CH,A   ;负温度高字节求补后送2CH      
  101.       LJMP  ZHCH    ;负数求补后转到ZHCH
  102. ;*************************显示子程序**************************
  103. DISPL:MOV   A,R7      ;取显示的正负号
  104.       MOV    P1,A      ;发送字段代码
  105.       CLR    P3.5      ;Y5=0, K5=1
  106.       ACALL  DL2MS     ;符号位
  107.       SETB   P3.5      ;138A脚置1,关闭所有位码            
  108.       MOV    DPTR,#CSTAB;字段码表首址送DPTR   
  109.       MOV    R1,#40H
  110.       MOV    A,@R1
  111.       MOVC   A,@A+DPTR
  112.       MOV    P1,A
  113.       CLR    P3.4
  114.       CLR    P3.7       ;Y2=0,K1=1
  115.       ACALL  DL2MS      ;小数
  116.       SETB   P3.4
  117.       SETB   P3.7   
  118.       INC    R1
  119.       MOV    A,@R1
  120.       MOVC   A,@A+DPTR
  121.       ANL    A,#7FH    ;个位小数点亮 数码管的Dp段点亮,其他段跟随A中的值

  122.       MOV    P1,A
  123.       CLR    P3.7     ;Y3=0,K2=1
  124.       ACALL  DL2MS    ;个位
  125.       SETB   P3.7      

  126.       INC    R1
  127.       MOV    A,@R1
  128.       MOVC   A,@A+DPTR   
  129.       MOV    P1,A
  130.       CLR    P3.4      ;Y3=0,K3=1
  131.       CLR    P3.5
  132.       ACALL  DL2MS     ;十位
  133.       SETB   P3.4
  134.       SETB   P3.5

  135.       INC    R1
  136.       MOV    A,@R1
  137.       MOVC   A,@A+DPTR  
  138.       MOV    P1,A   
  139.       CLR    P3.4      ;Y6=0,K4=1
  140.       ACALL  DL2MS     ;百位
  141.       SETB   P3.4      
  142.       RET
  143. ;*************************上下限判断子程序**************************
  144. MAXorMIN: PUSH ACC
  145.           JNB F0,MIN                                         
  146.      MAX: MOV A,43H                            ;正温度时,判断是否超过上限100℃
  147. ……………………




  148. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
http://www.51hei.com/bbs/dpj-89441-1.html



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:521983 发表于 2019-4-26 10:41 | 只看该作者
感谢楼主,最近正好要用这个,顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表