久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3181|回復: 0
打印 上一主題 下一主題
收起左側

單片機+DS18B20倉庫溫濕度控制器匯編語言源程序

[復制鏈接]
跳轉到指定樓層
樓主
設計基本要求
(1) 設計倉庫溫度檢測控制器的硬件電路和控制程序,實現如下功能。
(2) 該倉庫溫度檢測控制器可以檢測倉庫內的溫度,并對其進行控制。
(3) 能實現通過鍵盤對倉庫溫度上下限的設定。
(4) 在倉庫溫度低于溫度下限時,啟動加熱器加熱,同時報警。
(5) 在倉庫溫度高于溫度上下時,啟動風機降溫,同時報警。
(6) 能顯示各個測溫點的溫度和倉庫的平均溫度。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. ;



  2.           TEMP_ZH   DATA  24H     ;實時溫度值存放單元
  3.           TEMPL     DATA  25H     ;
  4.           TEMPH     DATA  26H     ;
  5.           TEMP_TH   DATA  27H     ;高溫報警值存放單元
  6.           TEMP_TL   DATA  28H     ;低溫報警值存放單元
  7.           TEMPHC    DATA  29H     ;
  8.           TEMPLC    DATA  2AH

  9.           K1     EQU  P3.4
  10.           K2     EQU  P3.5
  11.           K3     EQU  P3.6
  12.           K4     EQU  P3.7

  13.           BEEP   EQU  P1.0
  14.           RELAY  EQU  P1.3
  15.           LCD_X     EQU  2FH      ;LCD 地址變量
  16.           LCD_RS    EQU  P2.5
  17.           LCD_RW    EQU  P2.6
  18.           LCD_EN    EQU  P2.7
  19.           flag1     equ  20H.0    ;DS18B20是否存在標記
  20.           KEY_UD    EQU  20H.1    ;設定 KEY 的UP與DOWN 標記
  21.           date_line equ p2.0
  22. ;=====================================================
  23.            ORG  0000H
  24.            JMP  MAIN

  25. MAIN:     MOV  SP,#60H
  26.           MOV  A,#00H
  27.           MOV  R0,#20H       ;將 20H-2FH 單元清零
  28.           MOV  R1,#10H
  29. CLEAR:    MOV  @R0,A
  30.           INC  R0
  31.           DJNZ  R1,CLEAR

  32.           CALL  SET_LCD
  33.           CALL  RE_18B20

  34. start:    CALL  RESET          ;18B20復位子程序
  35.           JNB   FLAG1,START1   ;DS1820不存在
  36.           CALL  MENU_OK
  37.           CALL  READ_E2
  38.           CALL  TEMP_BJ        ;顯示溫度標記
  39.           JMP   START2
  40. START1:   CALL  MENU_ERROR
  41.           CALL  TEMP_BJ        ;顯示溫度標記
  42.           JMP  $

  43. START2:
  44.           CALL  RESET
  45.           JNB  FLAG1,START1    ;DS1820不存在
  46.           MOV   A,#0CCH        ; 跳過ROM匹配
  47.           CALL  WRITE
  48.           MOV   A,#44H         ; 發出溫度轉換命令
  49.           CALL  WRITE
  50.           CALL  RESET
  51.           MOV   A,#0CCH        ; 跳過ROM匹配
  52.           CALL  WRITE
  53.           MOV   A,#0BEH        ; 發出讀溫度命令
  54.           CALL  WRITE
  55.           CALL  READ
  56.           call CONVTEMP
  57.           Call DISPBCD
  58.           CALL CONV
  59.           CALL TEMP_COMP
  60.           CALL  PROC_KEY       ; 鍵掃描

  61.           SJMP        START2
  62. ;-----------------------------------------------------
  63. PROC_KEY:
  64.          JB  K1,PROC_K1                  ; 按鍵K1處理
  65.          CALL  BEEP_BL
  66.          JNB  K1,$
  67.          MOV  DPTR,#M_ALAX1
  68.          MOV  A,#1
  69.          CALL  LCD_PRINT
  70.          CALL  LOOK_ALARM
  71.          JB  K3,$
  72.          CALL  BEEP_BL
  73.          JMP  PROC_K2
  74. PROC_K1:                          ; 按鍵K2處理
  75.          JB  K2,PROC_END
  76.          CALL  BEEP_BL
  77.          JNB  K2,$
  78.          MOV   DPTR,#RESET_A1
  79.          MOV   A,#1
  80.          CALL  LCD_PRINT
  81.          CALL  SET_ALARM
  82.          CALL  RE_18B20           ;將設定的TH,TL值寫入DS18B20內
  83.          CALL  WRITE_E2
  84. PROC_K2:
  85.          CALL  MENU_OK
  86.          CALL  TEMP_BJ
  87. PROC_END:
  88.          RET
  89. ;============================================
  90. ;設定報警值 TH、TL
  91. ;============================================
  92. SET_ALARM:
  93.          ;CALL  RESET_ALARM
  94.          CALL  LOOK_ALARM
  95. AS0:
  96.          JB   K1,AS00
  97.          CALL  BEEP_BL
  98.          JNB  K1,$
  99.          CPL  20H.1            ;UP/DOWN 標記
  100. AS00:    JB  20H.1,ASZ01       ;20H.1=1,UP
  101.          JMP  ASJ01            ;20H.1=0,DOWN

  102. ASZ01:   JB  K2,ASZ02          ;TH值調整(增加)
  103.          CALL  BEEP_BL
  104.          INC  TEMP_TH
  105.          MOV  A,TEMP_TH
  106.          CJNE  A,#120,ASZ011
  107.          MOV  TEMP_TH,#0
  108. ASZ011:  CALL  LOOK_ALARM
  109.          MOV  R5,#10
  110.          CALL  DELAY
  111.          JMP  ASZ01

  112. ASZ02:   JB  K3,ASZ03          ;TL值調整(增加)
  113.          CALL  BEEP_BL
  114.          INC  TEMP_TL
  115.          MOV  A,TEMP_TL
  116.          CJNE  A,#99,ASZ021
  117.          MOV  TEMP_TL,#00H
  118. ASZ021:  CALL  LOOK_ALARM    ;
  119.          MOV  R5,#10
  120.          CALL  DELAY
  121.          JMP  ASZ02
  122. ASZ03:   JB  K4,AS0          ;確定調整 OK
  123.          CALL  BEEP_BL
  124.          JNB  K4,$
  125.          RET

  126. ASJ01:
  127.          JB  K2,ASJ02          ;TH值調整 (減少)
  128.          CALL  BEEP_BL
  129.          DEC   TEMP_TH
  130.          MOV  A,TEMP_TH
  131.          CJNE  A,#0FFH,ASJ011
  132.          JMP  ASJ022
  133. ASJ011:  CALL  LOOK_ALARM
  134.          MOV  R5,#10
  135.          CALL  DELAY
  136.          JMP  AS0

  137. ASJ02:   JB  K3,ASJ03         ;TL值調整(減少)
  138.          CALL  BEEP_BL
  139.          DEC  TEMP_TL
  140.          MOV  A,TEMP_TL
  141.          CJNE  A,#0FFH,ASJ021
  142.          JMP  ASJ022
  143. ASJ021:  CALL  LOOK_ALARM    ;
  144.          MOV  R5,#10
  145.          CALL  DELAY
  146.          JMP  AS0
  147. ASJ022:  CPL  20H.1
  148.          JMP  ASZ01
  149. ASJ03:   JMP  ASZ03
  150.          RET


  151. RESET_ALARM:
  152.           MOV  DPTR,#RESET_A1  ;指針指到顯示信息區
  153.           MOV  A,#1            ;顯示在第一行
  154.           CALL  LCD_PRINT
  155.           RET
  156. RESET_A1:
  157.      DB  "RESET ALERT CODE"
  158. ;====================================================
  159. ;實際溫度值與標記溫度值比較子程序
  160. ;====================================================
  161. TEMP_COMP:
  162.           MOV  A,TEMP_TH      
  163.           SUBB  A,TEMP_ZH       ;減數>被減數,則
  164.           JC  CHULI1            ;借位標志位C=1,轉
  165.           MOV  A,TEMP_ZH
  166.           SUBB  A,TEMP_TL       ;減數>被減數,則
  167.           JC  CHULI2            ;借位標志位C=1,轉
  168.           MOV  DPTR,#BJ5
  169.           CALL  TEMP_BJ3
  170.           CLR   RELAY           ;繼電器吸合
  171.           RET
  172. CHULI1:
  173.           MOV  DPTR,#BJ3
  174.           CALL  TEMP_BJ3
  175.           SETB  RELAY           ;繼電器關閉
  176.           CALL  BEEP_BL
  177.           RET
  178. CHULI2:
  179.           MOV  DPTR,#BJ4
  180.           CALL  TEMP_BJ3
  181.           CALL  BEEP_BL
  182.           RET
  183. ;-----------------------------------------
  184. TEMP_BJ3:
  185.           MOV  A,#0CEH
  186.           CALL WCOM
  187.           MOV  R1,#0
  188.           MOV  R0,#2

  189. BBJJ3:    MOV  A,R1
  190.           MOVC A,@A+DPTR
  191.           CALL  WDATA
  192.           INC R1
  193.           DJNZ  R0,BBJJ3
  194.           RET
  195. BJ3:
  196.       DB  ">H"
  197. BJ4:
  198.       DB  "<L"
  199. BJ5:
  200.       DB  " R"
  201. ;==================================================
  202. ;顯示溫度標記子程序
  203. ;==================================================
  204. TEMP_BJ:
  205.           MOV  A,#0CBH
  206.           CALL WCOM
  207.           MOV  DPTR,#BJ1  ;指針指到顯示消息
  208.           MOV  R1,#0
  209.           MOV  R0,#2

  210. BBJJ1:    MOV  A,R1
  211.           MOVC A,@A+DPTR
  212.           CALL  WDATA
  213.           INC R1
  214.           DJNZ  R0,BBJJ1
  215.           RET
  216. BJ1:
  217.       DB  00H,"C"
  218. ;=================================================
  219. MENU_OK:

  220.           MOV  DPTR,#M_OK1  ;指針指到顯示消息
  221.           MOV  A,#1          ;顯示在第一行
  222.           CALL  LCD_PRINT
  223.           MOV  DPTR,#M_OK2  ;指針指到顯示消息
  224.           MOV  A,#2          ;顯示在第一行
  225.           CALL  LCD_PRINT

  226.           RET
  227. M_OK1:
  228.     DB   "   DS18B20 OK   ",0
  229. M_OK2:
  230.     DB   " TEMP:          ",0
  231. ;-----------------------------------------------
  232. MENU_ERROR:
  233.           MOV  DPTR,#M_ERROR1  ;指針指到顯示消息1
  234.           MOV  A,#1          ;顯示在第一行
  235.           CALL  LCD_PRINT
  236.           MOV  DPTR,#M_ERROR2  ;指針指到顯示消息1
  237.           MOV  A,#2          ;顯示在第一行
  238.           CALL  LCD_PRINT
  239.           RET
  240. M_ERROR1:
  241.     DB   " DS18B20 ERROR  ",0
  242. M_ERROR2:
  243.     DB   " TEMP: ----     ",0
  244. ;====================================================
  245. reset:  setb date_line
  246.         nop
  247.         clr date_line
  248.         mov r0,#6bh         ;主機發出延時復位低脈沖
  249.         mov r1,#04h
  250. tsr1:   djnz r0,$
  251.         mov r0,#6bh
  252.         djnz r1,tsr1
  253.         setb date_line        ;然后拉高數據線
  254.         nop
  255.         nop
  256.         nop
  257.         mov r0,#32h
  258. tsr2:   jnb date_line,tsr3   ;等待DS18B20回應
  259.         djnz r0,tsr2
  260.         jmp tsr4             ; 延時
  261. tsr3:   setb flag1           ; 置標志位,表示DS1820存在
  262.         jmp tsr5
  263. tsr4:   clr flag1            ; 清標志位,表示DS1820不存在
  264.         jmp tsr7
  265. tsr5:   mov r0,#06bh
  266. tsr6:   djnz r0,$            ; 時序要求延時一段時間
  267. tsr7:   setb date_line
  268.         ret
  269. ;=======================================================
  270. RE_18B20:
  271.         JB  FLAG1,RE_18B20A
  272.         RET
  273. RE_18B20A:
  274.         CALL  RESET
  275.         MOV  A,#0CCH       ;跳過ROM匹配
  276.         LCALL  WRITE
  277.         MOV  A,#4EH        ;寫暫存寄存器
  278.         LCALL  WRITE
  279.         MOV  A,TEMP_TH     ;TH(報警上限)
  280.         LCALL  WRITE
  281.         MOV  A,TEMP_TL     ;TL(報警下限)
  282.         LCALL  WRITE
  283.         MOV  A,#7FH        ;12位精確度
  284.         LCALL  WRITE
  285.         RET
  286. ;------------------------------------------------------------
  287. WRITE_E2:
  288.         CALL  RESET
  289.         MOV  A,#0CCH        ;跳過ROM匹配
  290.         LCALL  WRITE
  291.         MOV  A,#48H         ;把暫存器里的溫度報警值拷貝到EEROM
  292.         LCALL  WRITE
  293.         RET
  294. ;--------------------------------------------------------------
  295. READ_E2:
  296.         CALL  RESET
  297.         MOV  A,#0CCH        ;跳過ROM匹配
  298.         LCALL  WRITE
  299.         MOV  A,#0B8H        ;把EEROM里的溫度報警值拷貝回暫存器
  300.         CALL  WRITE
  301.         RET
  302. ;--------------------------------------------------------------
  303. ;將自定義字符寫入LCD1602的CGRAM中
  304. ;--------------------------------------------------------------
  305. STORE_DATA:
  306.         MOV  A,#40H
  307.         CALL  WCOM
  308.         MOV  R2,#08H
  309.         MOV  DPTR,#D_DATA
  310.         MOV  R3,#00H
  311. S_DATA:
  312.         MOV  A,R3
  313.         MOVC  A,@A+DPTR
  314.         CALL  WDATA      ;寫入數據
  315.         INC  R3
  316.         DJNZ  R2,S_DATA
  317.         RET

  318. D_DATA:
  319.     DB  0CH,12H,12H,0CH,00H,00H,00H,00H
  320. ;==============================================================
  321. write:  mov r2,#8            ;一共8位數據
  322.         CLR  C
  323. wr1:
  324.         clr date_line        ;開始寫入DS18B20總線要處于復位(低)狀態
  325.         mov r3,#07
  326.         djnz r3,$            ;總線復位保持16微妙以上
  327.         rrc a                ;把一個字節DATA 分成8個BIT環移給C
  328.         mov date_line,c      ;寫入一個BIT
  329.         mov r3,#3CH
  330.         djnz r3,$            ;等待100微妙
  331.         setb date_line       ;重新釋放總線
  332.         nop
  333.         djnz r2,wr1          ;寫入下一個BIT
  334.         setb date_line
  335.         ret
  336. ;--------------------------------------------------------------------
  337. read:    mov r4,#4          ; 將溫度低位、高位、TH、TL從DS18B20中讀出
  338.          mov r1,#TEMPL        ; 存入25H、26H、27H、28H
  339. re00:    mov r2,#8
  340. re01:    clr cy
  341.          setb date_line
  342.          nop
  343.          nop
  344.          clr date_line        ;讀前總線保持為低
  345.          nop
  346.          nop
  347.          
  348. ……………………

  349. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
源程序.zip (145.36 KB, 下載次數: 63)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区视频免费在线观看 | 国产高清在线精品 | 最近中文字幕在线视频1 | 看毛片的网站 | 日韩精品在线一区二区 | 国产精品美女久久久久aⅴ国产馆 | 中文字幕精品一区久久久久 | 99欧美精品| 久久精品日产第一区二区三区 | 免费久久精品视频 | 午夜影院在线 | av免费网站在线观看 | 国产精品免费av | 国产精品日韩一区 | av一区二区三区在线观看 | 本道综合精品 | 涩涩视频在线观看 | 狠狠色综合久久丁香婷婷 | 久久草在线视频 | 亚洲成人自拍 | 搞黄网站在线观看 | 国产免费人成xvideos视频 | 日韩成人在线免费观看 | 国产精品成av人在线视午夜片 | 亚洲一区二区在线视频 | 日本黄色不卡视频 | 三级黄片毛片 | 91精品国产综合久久福利软件 | 久久国产精品久久国产精品 | 插插插干干干 | 亚洲福利 | av日韩在线播放 | 国产精品国产三级国产aⅴ中文 | 夜夜爽99久久国产综合精品女不卡 | 久久综合狠狠综合久久综合88 | 91综合网| 99成人免费视频 | 国产精品永久 | 亚洲大片一区 | 黄色毛片在线播放 | 成人在线精品 |