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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3198|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+DS18B20倉(cāng)庫(kù)溫濕度控制器匯編語(yǔ)言源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)基本要求
(1) 設(shè)計(jì)倉(cāng)庫(kù)溫度檢測(cè)控制器的硬件電路和控制程序,實(shí)現(xiàn)如下功能。
(2) 該倉(cāng)庫(kù)溫度檢測(cè)控制器可以檢測(cè)倉(cāng)庫(kù)內(nèi)的溫度,并對(duì)其進(jìn)行控制。
(3) 能實(shí)現(xiàn)通過(guò)鍵盤(pán)對(duì)倉(cāng)庫(kù)溫度上下限的設(shè)定。
(4) 在倉(cāng)庫(kù)溫度低于溫度下限時(shí),啟動(dòng)加熱器加熱,同時(shí)報(bào)警。
(5) 在倉(cāng)庫(kù)溫度高于溫度上下時(shí),啟動(dòng)風(fēng)機(jī)降溫,同時(shí)報(bào)警。
(6) 能顯示各個(gè)測(cè)溫點(diǎn)的溫度和倉(cāng)庫(kù)的平均溫度。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. ;



  2.           TEMP_ZH   DATA  24H     ;實(shí)時(shí)溫度值存放單元
  3.           TEMPL     DATA  25H     ;
  4.           TEMPH     DATA  26H     ;
  5.           TEMP_TH   DATA  27H     ;高溫報(bào)警值存放單元
  6.           TEMP_TL   DATA  28H     ;低溫報(bào)警值存放單元
  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是否存在標(biāo)記
  20.           KEY_UD    EQU  20H.1    ;設(shè)定 KEY 的UP與DOWN 標(biāo)記
  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復(fù)位子程序
  35.           JNB   FLAG1,START1   ;DS1820不存在
  36.           CALL  MENU_OK
  37.           CALL  READ_E2
  38.           CALL  TEMP_BJ        ;顯示溫度標(biāo)記
  39.           JMP   START2
  40. START1:   CALL  MENU_ERROR
  41.           CALL  TEMP_BJ        ;顯示溫度標(biāo)記
  42.           JMP  $

  43. START2:
  44.           CALL  RESET
  45.           JNB  FLAG1,START1    ;DS1820不存在
  46.           MOV   A,#0CCH        ; 跳過(guò)ROM匹配
  47.           CALL  WRITE
  48.           MOV   A,#44H         ; 發(fā)出溫度轉(zhuǎn)換命令
  49.           CALL  WRITE
  50.           CALL  RESET
  51.           MOV   A,#0CCH        ; 跳過(guò)ROM匹配
  52.           CALL  WRITE
  53.           MOV   A,#0BEH        ; 發(fā)出讀溫度命令
  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           ;將設(shè)定的TH,TL值寫(xiě)入DS18B20內(nèi)
  83.          CALL  WRITE_E2
  84. PROC_K2:
  85.          CALL  MENU_OK
  86.          CALL  TEMP_BJ
  87. PROC_END:
  88.          RET
  89. ;============================================
  90. ;設(shè)定報(bào)警值 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 標(biāo)記
  100. AS00:    JB  20H.1,ASZ01       ;20H.1=1,UP
  101.          JMP  ASJ01            ;20H.1=0,DOWN

  102. ASZ01:   JB  K2,ASZ02          ;TH值調(diào)整(增加)
  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值調(diào)整(增加)
  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          ;確定調(diào)整 OK
  123.          CALL  BEEP_BL
  124.          JNB  K4,$
  125.          RET

  126. ASJ01:
  127.          JB  K2,ASJ02          ;TH值調(diào)整 (減少)
  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值調(diào)整(減少)
  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  ;指針指到顯示信息區(qū)
  153.           MOV  A,#1            ;顯示在第一行
  154.           CALL  LCD_PRINT
  155.           RET
  156. RESET_A1:
  157.      DB  "RESET ALERT CODE"
  158. ;====================================================
  159. ;實(shí)際溫度值與標(biāo)記溫度值比較子程序
  160. ;====================================================
  161. TEMP_COMP:
  162.           MOV  A,TEMP_TH      
  163.           SUBB  A,TEMP_ZH       ;減數(shù)>被減數(shù),則
  164.           JC  CHULI1            ;借位標(biāo)志位C=1,轉(zhuǎn)
  165.           MOV  A,TEMP_ZH
  166.           SUBB  A,TEMP_TL       ;減數(shù)>被減數(shù),則
  167.           JC  CHULI2            ;借位標(biāo)志位C=1,轉(zhuǎn)
  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           ;繼電器關(guān)閉
  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. ;顯示溫度標(biāo)記子程序
  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         ;主機(jī)發(fā)出延時(shí)復(fù)位低脈沖
  249.         mov r1,#04h
  250. tsr1:   djnz r0,$
  251.         mov r0,#6bh
  252.         djnz r1,tsr1
  253.         setb date_line        ;然后拉高數(shù)據(jù)線
  254.         nop
  255.         nop
  256.         nop
  257.         mov r0,#32h
  258. tsr2:   jnb date_line,tsr3   ;等待DS18B20回應(yīng)
  259.         djnz r0,tsr2
  260.         jmp tsr4             ; 延時(shí)
  261. tsr3:   setb flag1           ; 置標(biāo)志位,表示DS1820存在
  262.         jmp tsr5
  263. tsr4:   clr flag1            ; 清標(biāo)志位,表示DS1820不存在
  264.         jmp tsr7
  265. tsr5:   mov r0,#06bh
  266. tsr6:   djnz r0,$            ; 時(shí)序要求延時(shí)一段時(shí)間
  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       ;跳過(guò)ROM匹配
  276.         LCALL  WRITE
  277.         MOV  A,#4EH        ;寫(xiě)暫存寄存器
  278.         LCALL  WRITE
  279.         MOV  A,TEMP_TH     ;TH(報(bào)警上限)
  280.         LCALL  WRITE
  281.         MOV  A,TEMP_TL     ;TL(報(bào)警下限)
  282.         LCALL  WRITE
  283.         MOV  A,#7FH        ;12位精確度
  284.         LCALL  WRITE
  285.         RET
  286. ;------------------------------------------------------------
  287. WRITE_E2:
  288.         CALL  RESET
  289.         MOV  A,#0CCH        ;跳過(guò)ROM匹配
  290.         LCALL  WRITE
  291.         MOV  A,#48H         ;把暫存器里的溫度報(bào)警值拷貝到EEROM
  292.         LCALL  WRITE
  293.         RET
  294. ;--------------------------------------------------------------
  295. READ_E2:
  296.         CALL  RESET
  297.         MOV  A,#0CCH        ;跳過(guò)ROM匹配
  298.         LCALL  WRITE
  299.         MOV  A,#0B8H        ;把EEROM里的溫度報(bào)警值拷貝回暫存器
  300.         CALL  WRITE
  301.         RET
  302. ;--------------------------------------------------------------
  303. ;將自定義字符寫(xiě)入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      ;寫(xiě)入數(shù)據(jù)
  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位數(shù)據(jù)
  322.         CLR  C
  323. wr1:
  324.         clr date_line        ;開(kāi)始寫(xiě)入DS18B20總線要處于復(fù)位(低)狀態(tài)
  325.         mov r3,#07
  326.         djnz r3,$            ;總線復(fù)位保持16微妙以上
  327.         rrc a                ;把一個(gè)字節(jié)DATA 分成8個(gè)BIT環(huán)移給C
  328.         mov date_line,c      ;寫(xiě)入一個(gè)BIT
  329.         mov r3,#3CH
  330.         djnz r3,$            ;等待100微妙
  331.         setb date_line       ;重新釋放總線
  332.         nop
  333.         djnz r2,wr1          ;寫(xiě)入下一個(gè)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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

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




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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天天天操 | 成人在线免费视频观看 | 亚洲婷婷六月天 | 免费观看一级特黄欧美大片 | 日日夜夜免费精品 | 精品亚洲一区二区 | 国产亚洲精品久久久久久牛牛 | 亚洲成人精品国产 | 久久精品| 国产成人99久久亚洲综合精品 | 国产丝袜一区二区三区免费视频 | 欧美成人一区二区三区片免费 | xxx视频| 青青青伊人 | 中文字幕av免费 | 新超碰97| 日韩成人在线观看 | 99久久婷婷国产综合精品电影 | 免费观看a级毛片在线播放 黄网站免费入口 | 丁香六月激情 | 精品福利视频一区二区三区 | www.日韩系列 | 伊人超碰在线 | xxx.在线观看 | 日本精品一区二区三区在线观看 | 中文字幕一区二区三区乱码在线 | 美女久久 | eeuss国产一区二区三区四区 | 久久av一区 | 亚洲第一区久久 | 北条麻妃视频在线观看 | 欧美成人精品一区二区男人看 | 成人免费毛片在线观看 | 亚洲不卡| 激情国产 | 欧产日产国产精品v | 做a网站 | 亚洲区一区二区 | 精品视频国产 | 久久蜜桃av | 九九九国产 |