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

📄 ds18b20-lcd1602-温度控制.asm

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;*******************************************************************
;*                                                                 *
;* ME500单片机开发系统演示程序 - DS18B20温度控制程序               *
;*                                                                 *
;* LCD1602显示                                                     *
;*                                                                 *
;* 版本: V1.0 (2006/11/20)                                        *
;* 作者: gguoqing (Email: gguoqing@willar.com)                    *
;* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) *
;* 邮箱: support@willar.com                                       *
;*                                                                 *
;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved  *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       *
;*                                                                 *
;*******************************************************************

          TEMP_ZH   DATA  24H     ;实时温度值存放单元
          TEMPL     DATA  25H     ;温度低位值存放单元
          TEMPH     DATA  26H     ;温度高位值存放单元
          TEMP_TH   DATA  27H     ;高温报警值存放单元
          TEMP_TL   DATA  28H     ;低温报警值存放单元

;-----------------------------------------------------------
          T0_CONU   DATA  30H     ;中断计数单元
          TIME_L    DATA  31H     ;中断定时常数 TL0
          TIME_H    DATA  32H     ;中断定时常数 TH0
;-----------------------------------------------------------
          K1        EQU   P1.4    ;独立键
          K2        EQU   P1.5
          K3        EQU   P1.6
          K4        EQU   P1.7
;-----------------------------------------------------------
          DATE_LINE EQU   P3.3     ;DS18B20 数据线
          BEEP      EQU   P3.7     ;蜂鸣器控制线
          RELAY     EQU   P1.3     ;继电器控制线
;-----------------------------------------------------------
          LCD_X     EQU   2FH      ;LCD 地址变量
          LCD_RS    EQU   P2.0     ;LCD 数据/命令选择端
          LCD_RW    EQU   P2.1     ;LCD 读/写选择端
          LCD_EN    EQU   P2.2     ;LCD 使能信号
;-----------------------------------------------------------
          FLAG1     BIT  20H.0     ;DS18B20是否存在标志
          KEY_UD    BIT  20H.1     ;设定 KEY 的UP与DOWN 标志
          FLAG2     BIT  20H.2     ;闪烁标志
          FLAG3     BIT  20H.3     ;温度正负标志
          FLAG4     BIT  20H.4     ;蜂鸣器静音标志
;===========================================================
           ORG  0000H
           JMP  MAIN
           ORG  000BH
           JMP  INT_T0
           ORG  0030H
;===========================================================
MAIN:     MOV  SP,#60H
          MOV  A,#00H
          MOV  R0,#20H         ;将 20H-2FH 单元清零
          MOV  R1,#10H
CLEAR:    MOV  @R0,A
          INC  R0
          DJNZ  R1,CLEAR

          MOV  TMOD,#01H       ;T0,方式1
          MOV  TIME_L,#00H     ;50ms定时值
          MOV  TIME_H,#4CH
          MOV  T0_CONU,#00H    ;中断计数
          MOV  IE,#82H         ;EA=1,ET0=1
          SETB  TR0
          CALL  SET_LCD        ;初始化 LCD 1602
START:
          CALL  RESET          ;18B20复位子程序
          JNB   FLAG1,START1   ;DS1820不存在
          CALL  MENU_OK        ;
          CALL  TEMP_BJ        ;显示温度标记
          JMP   START3
START1:
          CALL  MENU_ERROR     ;
          CLR  TR0
START2:
          CALL  RESET          ;18B20复位子程序
          JB   FLAG1,START
          CALL  BEEP_BL        ;DS1820不正常时,报警。
          JMP  START2

;-----------------------------------------------------------
START3:
          CALL  RESET          ;DS18B20 复位与检测
          JNB  FLAG1,START1    ;DS1820不存在
          CALL  READ_TEMP      ;读出温度与报警数据
          CALL CONVTEMP
          CALL TEMP_COMP       ;温度比较子程序
          CALL CONV
          CALL  PROC_KEY       ;键功能扫描
          SJMP	START3
;-----------------------------------------------
;T0,50ms中断子程序
;500ms对闪动标记 20H.2 取反一次
;-----------------------------------------------
INT_T0:
          PUSH  ACC              ;入栈保护
          PUSH  PSW
          MOV  TL0,TIME_L        ;重装定时值
          MOV  TH0,TIME_H        ;
          INC  T0_CONU           ;中断次数加1
          MOV  A,T0_CONU
          CJNE  A,#0AH,INT_END   ;500ms 是否到?
          MOV  T0_CONU,#00H
          CPL  20H.2             ;闪动标记取反
INT_END:
          POP  PSW               ;出栈
          POP  ACC
          RETI
;-------------------------------------------------
;按键功能处理子程序
;K1: 查看报警值, K3: 退出查看状态
;K2: 设定报警值
;-------------------------------------------------
PROC_KEY:
	 JB  K1,PROC_K1		   ; 按键K1处理
         CALL  BEEP_BL             ;蜂鸣器响一声
         JNB  K1,$                 ;等待 K1 释放
         MOV  DPTR,#M_ALAX1
         MOV  A,#1
         CALL  LCD_PRINT
         CALL  LOOK_ALARM          ;查看报警值
         JB  K3,$                  ;等待 K3 键按下
         CALL  BEEP_BL
         JMP  PROC_K2
PROC_K1:			  ; 按键K2处理
         JB  K2,PROC_K4
         CALL  BEEP_BL            ;蜂鸣器响一声
         JNB  K2,$                ;等待 K2 释放
         MOV   DPTR,#RESET_A1
         MOV   A,#1
         CALL  LCD_PRINT
         CALL  SET_ALARM          ;设定报警值
         CALL  RE_18B20           ;将设定的TH,TL值写入DS18B20内
         CALL  WRITE_E2           ;温度报警值拷贝到EEROM
PROC_K2:
         CALL  MENU_OK
         CALL  TEMP_BJ
PROC_K4:
         JB  K4,PROC_END          ;按键K4处理
         CALL  BEEP_BL            ;蜂鸣器响一声
         JNB  K4,$                ;等待 K4 释放
         CPL  FLAG4
PROC_END:
         RET
;---------------------------------------------
M_ALAX1:
     DB   " LOOK ALERT CODE",0
RESET_A1:
     DB   "RESET ALERT CODE",0
;============================================
;设定报警值 TH、TL
;K1: 选择 UP/DOWN 方式
;K2: 设定 TH 值,K3: 设定 TL 值
;K4: 确定与退出
;============================================
SET_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             ;DOWN/UP 转换标记
         JMP  ASZ01
ASJ03:   JMP  ASZ03
         RET
;===================================================
;在LCD1602的第一行显示"RESET ALERT CODE"
;===================================================
RESET_ALARM:
          MOV  DPTR,#RESET_A2  ;指针指到显示信息区
          MOV  A,#1            ;显示在第一行
          CALL  LCD_PRINT
          RET
RESET_A2:
     DB  "RESET ALERT CODE"
;====================================================
;实时温度值与设定报警温度值 TH、TL 比较子程序
;当实际温度大于 TH 的设定值时,显示“>H”,继电器关闭
;当实际温度小于 TH 的设定值时,显示“!!”,继电器吸合
;当实际温度小于 TL 的设定值时,显示“<L”,蜂鸣器响
;闪动显示标记符 >H、<L、!!
;====================================================
TEMP_COMP:
         ; SETB  TR0             ;启动中断
          MOV  A,TEMP_ZH
          CJNE  A,TEMP_TH,T_COMP0
T_COMP0:
          JNC   CHULI1
          MOV  A,TEMP_ZH
          SUBB  A,TEMP_TL       ;减数>被减数,则
          JC  CHULI2            ;借位标志位C=1,转
          JNB  FLAG2,T_COMP1    ;FLAG2=0,显示标记字符
          MOV  LCD_X,#0EH       ;FLAG2=1,清屏,形成闪动效果
          LCALL  CLR_TWO2
          JMP  T_COMP2
T_COMP1:  MOV  DPTR,#BJ5        ;显示"!!"
          CALL  TEMP_BJ3
T_COMP2:  CLR   RELAY           ;继电器吸合
         ; CLR  TR0              ;关闭中断
          RET
CHULI1:                         ;超温处理
          JNB  FLAG2,CHULI10
          MOV  LCD_X,#0EH
          LCALL  CLR_TWO2
          JMP  CHULI11
CHULI10:  MOV  DPTR,#BJ3        ;显示">H"
          CALL  TEMP_BJ3
          SETB  RELAY           ;继电器关闭
          JB  FLAG4,CHULI11
          CALL  BEEP_BL         ;蜂鸣器响
CHULI11:  ;CLR  TR0              ;关闭中断
          RET
CHULI2:                         ;欠温处理
          JNB  FLAG2,CHULI20
          MOV  LCD_X,#0EH
          LCALL  CLR_TWO2
          JMP  CHULI21
CHULI20:  MOV  DPTR,#BJ4        ;显示"<L"
          CALL  TEMP_BJ3
          JB  FLAG4,CHULI21
          CALL  BEEP_BL         ;蜂鸣器响
CHULI21: ; CLR  TR0              ;关闭中断
          RET
;==========================================
;清两个字符(闪烁功能用)
;==========================================
CLR_TWO2:
          MOV  A,#' '
          MOV  B,LCD_X
          CALL  LCDP2
          INC  LCD_X
          MOV  A,#' '
          MOV  B,LCD_X
          CALL  LCDP2
          RET
;=========================================
;标记字符写入子程序
;=========================================
TEMP_BJ3:
          MOV  A,#0CEH        ;指定写入地址
          CALL WCOM

⌨️ 快捷键说明

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