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

📄 ds18b20-lcd.asm

📁 温度控制?
💻 ASM
📖 第 1 页 / 共 3 页
字号:
          op        equ  21H.0
          com       equ  22H.1
          hw        equ  22H.2 

          K1        EQU  P1.4
          K2        EQU  P1.5
          K3        EQU  P1.6
          K4        EQU  P1.7

          BEEP      EQU  P3.7
          RELAY     EQU  P1.3
          LCD_X     EQU  2FH      ;LCD 地址变量
          LCD_RS    EQU  P2.0
          LCD_RW    EQU  P2.1
          LCD_EN    EQU  P2.2
          flag1     equ  20H.0    ;DS18B20是否存在标记
          KEY_UD    EQU  20H.1    ;设定 KEY 的UP与DOWN 标记
          date_line equ   p3.3
	  count1    data  0BH
          count2    data  0CH
          flag      data  08H
          iraddr1   data  09H
          iraddr2   data  0AH
          endcount1 data  0DH
          endcount2 data  0EH
          TEMP_ZH   DATA  24H     ;实时温度值存放单元
          TEMPL     DATA  25H     ;
          TEMPH     DATA  26H     ;
          TEMP_TH   DATA  27H     ;高温报警值存放单元
          TEMP_TL   DATA  28H     ;低温报警值存放单元
          TEMPHC    DATA  29H     ;
          TEMPLC    DATA  2AH
          TEMPPOINT DATA  2BH
;=====================================================
           ORG  0000H
           JMP  MAIN
	   org  000BH
	   JMP  timeint

MAIN:     MOV  SP,#60H
          MOV  A,#00H
          MOV  R0,#20H       ;将 20H-2FH 单元清零
          MOV  R1,#10H
CLEAR:    MOV  @R0,A
          INC  R0
          DJNZ  R1,CLEAR

          CALL  SET_LCD
          CALL  RE_18B20
START0:   call tran
          
start:    JB  K1,start11
          setb hw
           
          jmp  start22
start11:  jB  k2,start 
          setb com    	
start22:  CALL  RESET 
          CALL  TRAN1
           jb   hw,start33
           jb    com,setcom 
setcom:   MOV	TMOD,#20H		; 定时器1工作于8位自动重载模式,用于产生波特率
	  MOV	TH1,#0FDH
	  MOV	TL1,#0FDH		; 波特率9600
	  MOV	SCON,#50H		; 设定串行口工作方式
	  ANL	PCON,#0EFH		; 波特率不倍增
	  SETB	TR1			; 启动定时器1              ;18B20复位子程序
          MOV	IE,#0
start33:  JNB   FLAG1,START1   ;DS1820不存在
          JB    HW,MEUM1
	  JB    COM,MEUM2
MEUM1:    CALL  TRAN2
          JMP   START44     
MEUM2:    CALL  TRAN1
START44:  CALL  READ_E2
          CALL  TEMP_BJ        ;显示温度标记
          JMP   START2
START1:   CALL  MENU_ERROR
          CALL  TEMP_BJ        ;显示温度标记
          JMP  $

START2:
          CALL  RESET
         
	  
          JNB  FLAG1,START1    ;DS1820不存在
          MOV   A,#0CCH        ; 跳过ROM匹配
          CALL  WRITE
          MOV   A,#44H         ; 发出温度转换命令
          CALL  WRITE
          CALL  RESET
          MOV   A,#0CCH        ; 跳过ROM匹配
          CALL  WRITE
          MOV   A,#0BEH        ; 发出读温度命令
          CALL  WRITE
          CALL  READ
          call CONVTEMP
          Call DISPBCD
          CALL CONV
          CALL TEMP_COMP
	  jb    com,chuangkou
	  jb    hw,hongwai
hongwai:  call  main1
          jmp   main3
chuangkou:mov   a,#0xee
	  call  sendchar
	  mov   a,temp_zh
	  call  sendchar
	  mov   a,temppoint
	  call  sendchar
	  mov   a,temphc
	  call  sendchar  
main3:	  clr  tr0
          CALL  PROC_KEY       ; 键扫描
         
	  SJMP	START2
sendchar: MOV	SBUF,A
	  JNB	TI,$			; 等特数据传送
	  CLR	TI
          ret
;-----------------------------------------------------
PROC_KEY:
	 JB  K1,PROC_K1		  ; 按键K1处理
         CALL  BEEP_BL
         JNB  K1,$
         MOV  DPTR,#M_ALAX1
         MOV  A,#1
         CALL  LCD_PRINT
         CALL  LOOK_ALARM
         JB  K3,$
         CALL  BEEP_BL
         JMP  PROC_K2
PROC_K1:			  ; 按键K2处理
         JB  K2,PROC_END
         CALL  BEEP_BL
         JNB  K2,$
         MOV   DPTR,#RESET_A1
         MOV   A,#1
         CALL  LCD_PRINT
         CALL  SET_ALARM
         CALL  RE_18B20           ;将设定的TH,TL值写入DS18B20内
         CALL  WRITE_E2
PROC_K2:
         CALL  MENU_OK
         CALL  TEMP_BJ
	 JMP   PROC_END                
PROC_END:
         RET
;============================================
;设定报警值 TH、TL
;============================================
SET_ALARM:
         ;CALL  RESET_ALARM
         CALL  LOOK_ALARM
AS0:
         JB   K1,AS00
         CALL  BEEP_BL
         JNB  K1,$
         CPL  20H.1            ;UP/DOWN 标记
AS00:    JB  20H.1,ASZ01       ;20H.1=1,UP
         JMP  ASJ01            ;20H.1=0,DOWN

ASZ01:   JB  K2,ASZ02          ;TH值调整(增加)
         CALL  BEEP_BL
         INC  TEMP_TH
         MOV  A,TEMP_TH
         CJNE  A,#120,ASZ011
         MOV  TEMP_TH,#0
ASZ011:  CALL  LOOK_ALARM
         MOV  R5,#10
         CALL  DELAY
         JMP  ASZ01

ASZ02:   JB  K3,ASZ03          ;TL值调整(增加)
         CALL  BEEP_BL
         INC  TEMP_TL
         MOV  A,TEMP_TL
         CJNE  A,#99,ASZ021
         MOV  TEMP_TL,#00H
ASZ021:  CALL  LOOK_ALARM    ;
         MOV  R5,#10
         CALL  DELAY
         JMP  ASZ02
ASZ03:   JB  K4,AS0          ;确定调整 OK
         CALL  BEEP_BL
         JNB  K4,$
         RET

ASJ01:
         JB  K2,ASJ02          ;TH值调整 (减少)
         CALL  BEEP_BL
         DEC   TEMP_TH
         MOV  A,TEMP_TH
         CJNE  A,#0FFH,ASJ011
         JMP  ASJ022
ASJ011:  CALL  LOOK_ALARM
         MOV  R5,#10
         CALL  DELAY
         JMP  AS0

ASJ02:   JB  K3,ASJ03         ;TL值调整(减少)
         CALL  BEEP_BL
         DEC  TEMP_TL
         MOV  A,TEMP_TL
         CJNE  A,#0FFH,ASJ021
         JMP  ASJ022
ASJ021:  CALL  LOOK_ALARM    ;
         MOV  R5,#10
         CALL  DELAY
         JMP  AS0
ASJ022:  CPL  20H.1
         JMP  ASZ01
ASJ03:   JMP  ASZ03
         RET


RESET_ALARM:
          MOV  DPTR,#RESET_A1  ;指针指到显示信息区
          MOV  A,#1            ;显示在第一行
          CALL  LCD_PRINT
          RET
RESET_A1:
     DB  "RESET ALERT CODE"

TEMP_COMP:
          MOV  A,TEMP_TH       
          SUBB  A,TEMP_ZH       ;减数>被减数,则
          JC  CHULI1            ;借位标志位C=1,转
          MOV  A,TEMP_ZH
          SUBB  A,TEMP_TL       ;减数>被减数,则
          JC  CHULI2            ;借位标志位C=1,转
          MOV  DPTR,#BJ5
          CALL  TEMP_BJ3
          CLR   RELAY           ;继电器吸合
          RET
 CHULI1:
          MOV  DPTR,#BJ3
          CALL  TEMP_BJ3
          SETB  RELAY           ;继电器关闭
          CALL  BEEP_BL
          RET
 CHULI2:
          MOV  DPTR,#BJ4
          CALL  TEMP_BJ3
          CALL  BEEP_BL
          RET
;-----------------------------------------
TEMP_BJ3:
          MOV  A,#0CEH
          CALL WCOM
          MOV  R1,#0
          MOV  R0,#2

BBJJ3:    MOV  A,R1
          MOVC A,@A+DPTR
          CALL  WDATA
          INC R1
          DJNZ  R0,BBJJ3
          RET
BJ3:
      DB  ">H"
BJ4:
      DB  "<L"
BJ5:
      DB  " !"

TEMP_BJ:
          MOV  A,#0CBH
          CALL WCOM
          MOV  DPTR,#BJ1  ;指针指到显示消息
          MOV  R1,#0
          MOV  R0,#2

BBJJ1:    MOV  A,R1
          MOVC A,@A+DPTR
          CALL  WDATA
          INC R1
          DJNZ  R0,BBJJ1
          RET
BJ1:
      DB  00H,"C"
;=================================================
MENU_OK:

          MOV  DPTR,#M_OK1  ;指针指到显示消息
          MOV  A,#1          ;显示在第一行
          CALL  LCD_PRINT
          MOV  DPTR,#M_OK2  ;指针指到显示消息
          MOV  A,#2          ;显示在第一行
          CALL  LCD_PRINT

          RET
TRAN:     
          MOV  DPTR,#M_HW  ;指针指到显示消息
          MOV  A,#1          ;显示在第一行
          CALL  LCD_PRINT
          MOV  DPTR,#M_COM  ;指针指到显示消息
          MOV  A,#2          ;显示在第一行
          CALL  LCD_PRINT

          RET
TRAN1:    MOV  DPTR,#M_OK3  ;指针指到显示消息
          MOV  A,#1          ;显示在第一行
          CALL  LCD_PRINT
          MOV  DPTR,#M_OK2  ;指针指到显示消息
          MOV  A,#2          ;显示在第一行
          CALL  LCD_PRINT
          RET
TRAN2:    MOV  DPTR,#M_OK1  ;指针指到显示消息
          MOV  A,#1          ;显示在第一行
          CALL  LCD_PRINT
          MOV  DPTR,#M_OK2  ;指针指到显示消息
          MOV  A,#2          ;显示在第一行
          CALL  LCD_PRINT
	  RET

        
M_OK1:
    DB   "DS18B20 hw  OK   ",0
M_OK2:
    DB   " TEMP:          ",0
m_OK3:
    db   "DS18B20 COM 0K  ",0
M_HW:
   DB    "HW  SELECT K1   ",0
M_COM:
   DB    "COM SELECT K2  ",0
;-----------------------------------------------
MENU_ERROR:
          MOV  DPTR,#M_ERROR1  ;指针指到显示消息1
          MOV  A,#1          ;显示在第一行
          CALL  LCD_PRINT
          MOV  DPTR,#M_ERROR2  ;指针指到显示消息1
          MOV  A,#2          ;显示在第一行
          CALL  LCD_PRINT
          RET
M_ERROR1:
    DB   " DS18B20 ERROR  ",0
M_ERROR2:
    DB   " TEMP: ----     ",0
;====================================================
reset:  setb date_line
        nop
        clr date_line
        mov r0,#6bh         ;主机发出延时复位低脉冲
        mov r1,#04h
tsr1:   djnz r0,$
        mov r0,#6bh
        djnz r1,tsr1
        setb date_line        ;然后拉高数据线
        nop
        nop
        nop
        mov r0,#32h
tsr2:   jnb date_line,tsr3   ;等待DS18B20回应
        djnz r0,tsr2
        jmp tsr4             ; 延时
tsr3:   setb flag1           ; 置标志位,表示DS1820存在
        jmp tsr5
tsr4:   clr flag1            ; 清标志位,表示DS1820不存在
        jmp tsr7
tsr5:   mov r0,#06bh
tsr6:   djnz r0,$            ; 时序要求延时一段时间
tsr7:   setb date_line
        ret
;=======================================================
RE_18B20:

⌨️ 快捷键说明

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