⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20-lcd1602-温度控制.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
0298 D8FE            387     TSR6:   DJNZ R0,$             ; 时序要求延时一段时间
029A D2B3            388     TSR7:   SETB DATE_LINE
029C 22              389             RET
                     390     
                     391     ;==========================================================
                     392     ;重新对 DS18B20 初始化
                     393     ;将设定的温度报警值写入 DS18B20
                     394     ;==========================================================
029D                 395     RE_18B20:
029D 200001          396             JB  FLAG1,RE_18B20A
02A0 22              397             RET
02A1                 398     RE_18B20A:
02A1 5171            399             CALL  RESET
02A3 74CC            400             MOV  A,#0CCH       ;跳过ROM匹配
02A5 1202F1          401             LCALL  WRITE
02A8 744E            402             MOV  A,#4EH        ;写暂存寄存器
02AA 1202F1          403             LCALL  WRITE
02AD E527            404             MOV  A,TEMP_TH     ;TH(报警上限)
02AF 1202F1          405             LCALL  WRITE
02B2 E528            406             MOV  A,TEMP_TL     ;TL(报警下限)
02B4 1202F1          407             LCALL  WRITE
02B7 747F            408             MOV  A,#7FH        ;12位精确度
02B9 1202F1          409             LCALL  WRITE
02BC 22              410             RET
                     411     ;------------------------------------------------------------
                     412     ;把 DS18B20 暂存器里的温度报警值拷贝到EEROM
                     413     ;------------------------------------------------------------
02BD                 414     WRITE_E2:
02BD 5171            415             CALL  RESET
02BF 74CC            416             MOV  A,#0CCH        ;跳过ROM匹配
02C1 1202F1          417             LCALL  WRITE
02C4 7448            418             MOV  A,#48H         ;把暂存器里的温度报警值拷贝到EEROM
02C6 1202F1          419             LCALL  WRITE
02C9 22              420             RET
                     421     ;--------------------------------------------------------------
                     422     ;把 DS18B20 EEROM 里的温度报警值拷贝回暂存器
                     423     ;-------------------------------------------------------------
02CA                 424     READ_E2:
02CA 5171            425             CALL  RESET
02CC 74CC            426             MOV  A,#0CCH        ;跳过ROM匹配
02CE 1202F1          427             LCALL  WRITE
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE     8

02D1 74B8            428             MOV  A,#0B8H        ;把EEROM里的温度报警值拷贝回暂存器
02D3 51F1            429             CALL  WRITE
02D5 22              430             RET
                     431     ;--------------------------------------------------------------
                     432     ;将自定义字符“℃”写入 LCD1602 的 CGRAM 中
                     433     ;--------------------------------------------------------------
02D6                 434     STORE_DATA:
02D6 7440            435             MOV  A,#40H          ;指定地址
02D8 B107            436             CALL  WCOM
02DA 7A08            437             MOV  R2,#08H         ;共取 8 个数
02DC 9002E9          438             MOV  DPTR,#D_DATA
02DF 7B00            439             MOV  R3,#00H
02E1                 440     S_DATA:
02E1 EB              441             MOV  A,R3
02E2 93              442             MOVC  A,@A+DPTR      ;查表取数
02E3 B114            443             CALL  WDATA          ;写入数据
02E5 0B              444             INC  R3
02E6 DAF9            445             DJNZ  R2,S_DATA      ;没有取完,继续
02E8 22              446             RET
                     447     
02E9                 448     D_DATA:
02E9 0C12120C        449         DB  0CH,12H,12H,0CH,00H,00H,00H,00H   ;字符 “°”
02ED 00000000                
                     450     ;------------------------------------------------------------------
                     451     ;DS18B20 写命令、数据子程序
                     452     ;根据命令的内容,进行写操作
                     453     ;------------------------------------------------------------------
02F1                 454     WRITE:
02F1 7A08            455             MOV R2,#8            ;8位数据长度
02F3 C3              456             CLR  C
02F4                 457     WR1:
02F4 C2B3            458             CLR DATE_LINE        ;开始写入DS18B20总线要处于复位(低)状态
02F6 7B08            459             MOV R3,#08
02F8 DBFE            460             DJNZ R3,$            ;总线复位保持16微妙以上
02FA 13              461             RRC A                ;把一个字节DATA 分成8个BIT环移给C
02FB 92B3            462             MOV DATE_LINE,C      ;写入一个BIT
02FD 7B3C            463             MOV R3,#3CH
02FF DBFE            464             DJNZ R3,$            ;等待120微妙
0301 D2B3            465             SETB DATE_LINE       ;重新释放总线
0303 00              466             NOP
0304 DAEE            467             DJNZ R2,WR1          ;写入下一个BIT
0306 D2B3            468             SETB DATE_LINE
0308 22              469             RET
                     470     ;--------------------------------------------------------------------
                     471     ;DS18B20 读温度子程序
                     472     ; 将温度低位、高位、TH、TL从DS18B20中读出
                     473     ; 分别存入 25H、26H、27H、28H 单元中
                     474     ;--------------------------------------------------------------------
0309                 475     READ_TEMP:
0309 C28C            476              CLR  TR0
030B 74CC            477              MOV   A,#0CCH        ; 跳过ROM匹配
030D 51F1            478              CALL  WRITE
030F 7444            479              MOV   A,#44H         ; 发出温度转换命令
0311 51F1            480              CALL  WRITE
0313 5171            481              CALL  RESET
0315 74CC            482              MOV   A,#0CCH        ; 跳过ROM匹配
0317 51F1            483              CALL  WRITE
0319 74BE            484              MOV   A,#0BEH        ; 发出读温度命令
031B 51F1            485              CALL  WRITE          ;先写入命令
                     486     
031D 7C04            487              MOV R4,#4             ;存入4个单元中
031F 7925            488              MOV R1,#TEMPL         ;存入单元的首地址送入 R1
0321                 489     RE00:
0321 7A08            490              MOV R2,#8             ;8位数据长度
0323                 491     RE01:
0323 C2D7            492              CLR CY
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE     9

0325 D2B3            493              SETB DATE_LINE
0327 00              494              NOP
0328 00              495              NOP
0329 C2B3            496              CLR DATE_LINE        ;读前总线保持为低
032B 00              497              NOP
032C 00              498              NOP
032D 00              499              NOP
032E D2B3            500              SETB DATE_LINE       ;开始读总线释放
0330 7B07            501              MOV R3,#07           ;延时15微妙
0332 DBFE            502              DJNZ R3,$
0334 A2B3            503              MOV C,DATE_LINE      ;从DS18B20总线读得一个BIT
0336 7B3C            504              MOV R3,#3CH
0338 DBFE            505              DJNZ R3,$            ;等待100微妙
033A 13              506              RRC A                ;把读得的位值环移给A
033B DAE6            507              DJNZ R2,RE01         ;读下一个BIT
033D F7              508              MOV @R1,A
033E 09              509              INC R1
033F DCE0            510              DJNZ R4,RE00         ;没有读完,继续
0341 D28C            511              SETB  TR0
0343 22              512              RET
                     513     ;*****************************************************
                     514     ;处理温度 BCD 码子程序
                     515     ;整数部分:取出 TEMPL 高四位和 TEMPH 低四位进行重新组合
                     516     ;小数部分:取出 TEMPL 低四位,查小数码表
                     517     ;****************************************************
0344                 518     CONVTEMP:
0344 E526            519              MOV  A,TEMPH       ;判温度是否零下
0346 5480            520              ANL  A,#80H
0348 6013            521              JZ  TEMPC1         ;温度零上转
034A D203            522              SETB FLAG3         ;温度为负值
034C C3              523              CLR  C
034D E525            524              MOV  A,TEMPL       ;二进制数求补(双字节)
034F F4              525              CPL  A             ;取反加1
0350 2401            526              ADD  A,#01H
0352 F525            527              MOV  TEMPL,A
0354 E526            528              MOV  A,TEMPH
0356 F4              529              CPL  A
0357 3400            530              ADDC  A,#00H
0359 F526            531              MOV  TEMPH,A
035B 8002            532              JMP  TEMPC2
035D                 533     TEMPC1:
035D C203            534              CLR  FLAG3               ;温度为正值
035F                 535     TEMPC2:
035F E525            536              MOV  A,TEMPL
0361 540F            537              ANL  A,#0FH              ;取出小数部分
0363 75F00A          538              MOV  B,#10               ;将TEMP_L的低四位X10/16得小数后一位数.
0366 A4              539              MUL  AB
0367 75F010          540              MOV  B,#16
036A 84              541              DIV  AB
036B F570            542              MOV  70H,A               ;小数部分 BCD
                     543     
036D E525            544              MOV  A,TEMPL             ;整数部分
036F 54F0            545              ANL  A,#0F0H             ;取出高四位
0371 C4              546              SWAP  A
0372 F525            547              MOV  TEMPL,A
0374 E526            548              MOV  A,TEMPH             ;取出低四位
0376 540F            549              ANL  A,#0FH
0378 C4              550              SWAP  A
0379 4525            551              ORL  A,TEMPL             ;重新组合温度数据
037B F524            552              MOV  TEMP_ZH,A           ;重新组合的温度数据存入TEMP_ZH
037D 120391          553              LCALL  HEX2BCD1
                     554     
0380 F525            555              MOV  TEMPL,A             ;(A)=十位数和个位数
0382 54F0            556              ANL  A,#0F0H
0384 C4              557              SWAP  A
0385 F572            558              MOV  72H,A               ;十位数 BCD
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE    10

0387 E525            559              MOV  A,TEMPL
0389 540F            560              ANL  A,#0FH
038B F571            561              MOV  71H,A               ;个位数 BCD
                     562     
038D EC              563              MOV  A,R4                ;(R4)= 百位数
038E F573            564              MOV  73H,A
0390                 565     TEMPC3:
0390 22              566              RET
                     567     ;====================================================
                     568     ;单字节十六进制转BCD
                     569     ;入口:(A)=单字节十六进制的温度值
                     570     ;出口:(R4)= 百位数,(A)=十位数和个位数
                     571     ;====================================================
0391                 572     HEX2BCD1:
0391 75F064          573              MOV  B,#064H
0394 84              574              DIV  AB
0395 FC              575              MOV  R4,A             ;(R4)=百位数
0396 740A            576              MOV  A,#0AH
0398 C5F0            577              XCH  A,B
039A 84              578              DIV  AB
039B C4              579              SWAP  A
039C 45F0            580              ORL  A,B             ;(A)=十位数和个位数
039E 22              581              RET
                     582     
                     583     ;=====================================================
                     584     ;显示 TH 和 TL 值的子程序
                     585     ;=====================================================
039F                 586     LOOK_ALARM:
039F 9003BD          587               MOV  DPTR,#M_ALAX2   ;指针指到显示信息区
03A2 7402            588               MOV  A,#2            ;显示在第二行
03A4 91D4            589               CALL  LCD_PRINT      ;
                     590     
03A6 74C6            591               MOV  A,#0C6H         ;指定地址
03A8 71CE            592               CALL  TEMP_BJ1
03AA E527            593               MOV  A,TEMP_TH       ;加载 TH 数据
03AC 752F03          594               MOV  LCD_X,#3        ;设置位置变量
03AF 71E1            595               CALL  SHOW_DIG2H     ;显示 TH 数据
                     596     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -