找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机温度上下限监控警报系统设计 带课设论文 仿真 源码

[复制链接]
跳转到指定楼层
楼主
利用AT89S2051采用DS18B20作为测温传感器,用AT89C2051作处理器,用数码管显示,并用LED灯作报警器。当测量温度高于100℃或低于-20℃时,发出警报。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):




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

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

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

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

  92. BB:   CLR F0
  93.       MOV   R7,#0BFH ;负数让第1个数码管显示为"-"
  94.       MOV   A,2BH    ;负数补码求补
  95.       CPL   A
  96.       ADD   A,#1
  97.       MOV   2BH,A   ;负温度低字节求补后送2BH
  98.       MOV   A,2CH        
  99.       CPL   A              
  100.       ADDC  A,#0
  101.       MOV   2CH,A   ;负温度高字节求补后送2CH      
  102.       LJMP  ZHCH    ;负数求补后转到ZHCH
  103. ;*************************显示子程序**************************
  104. DISPL:MOV   A,R7      ;取显示的正负号
  105.       MOV    P1,A      ;发送字段代码
  106.       CLR    P3.5      ;Y5=0, K5=1
  107.       ACALL  DL2MS     ;符号位
  108.       SETB   P3.5      ;138A脚置1,关闭所有位码              

  109.       MOV    DPTR,#CSTAB;字段码表首址送DPTR     
  110.       MOV    R1,#40H
  111.       MOV    A,@R1
  112.       MOVC   A,@A+DPTR
  113.       MOV    P1,A
  114.       CLR    P3.4
  115.       CLR    P3.7       ;Y2=0,K1=1
  116.       ACALL  DL2MS      ;小数
  117.       SETB   P3.4
  118.       SETB   P3.7   

  119.       INC    R1
  120.       MOV    A,@R1
  121.       MOVC   A,@A+DPTR
  122.       ANL    A,#7FH    ;个位小数点亮 数码管的Dp段点亮,其他段跟随A中的值

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

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

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

所有资料51hei提供下载:
温度上下限 (4).zip (2.29 MB, 下载次数: 56)


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

使用道具 举报

沙发
ID:1 发表于 2017-7-4 01:37 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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