📄 ds18b20-lcd1602-温度控制.lst
字号:
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN DS18B20-LCD1602-温度控制.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE DS18B20-LCD1602-温度控制.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*******************************************************************
2 ;* *
3 ;* ME500单片机开发系统演示程序 - DS18B20温度控制程序 *
4 ;* *
5 ;* LCD1602显示 *
6 ;* *
7 ;* 版本: V1.0 (2006/11/20) *
8 ;* 作者: gguoqing (Email: gguoqing@willar.com) *
9 ;* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) *
10 ;* 时间: 2005/03/15 *
11 ;* *
12 ;*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved *
13 ;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
14 ;* *
15 ;*******************************************************************
16
0024 17 TEMP_ZH DATA 24H ;实时温度值存放单元
0025 18 TEMPL DATA 25H ;温度低位值存放单元
0026 19 TEMPH DATA 26H ;温度高位值存放单元
0027 20 TEMP_TH DATA 27H ;高温报警值存放单元
0028 21 TEMP_TL DATA 28H ;低温报警值存放单元
22
23 ;-----------------------------------------------------------
0030 24 T0_CONU DATA 30H ;中断计数单元
0031 25 TIME_L DATA 31H ;中断定时常数 TL0
0032 26 TIME_H DATA 32H ;中断定时常数 TH0
27 ;-----------------------------------------------------------
0094 28 K1 EQU P1.4 ;独立键
0095 29 K2 EQU P1.5
0096 30 K3 EQU P1.6
0097 31 K4 EQU P1.7
32 ;-----------------------------------------------------------
00B3 33 DATE_LINE EQU P3.3 ;DS18B20 数据线
00B7 34 BEEP EQU P3.7 ;蜂鸣器控制线
0093 35 RELAY EQU P1.3 ;继电器控制线
36 ;-----------------------------------------------------------
002F 37 LCD_X EQU 2FH ;LCD 地址变量
00A0 38 LCD_RS EQU P2.0 ;LCD 数据/命令选择端
00A1 39 LCD_RW EQU P2.1 ;LCD 读/写选择端
00A2 40 LCD_EN EQU P2.2 ;LCD 使能信号
41 ;-----------------------------------------------------------
0000 42 FLAG1 BIT 20H.0 ;DS18B20是否存在标志
0001 43 KEY_UD BIT 20H.1 ;设定 KEY 的UP与DOWN 标志
0002 44 FLAG2 BIT 20H.2 ;闪烁标志
0003 45 FLAG3 BIT 20H.3 ;温度正负标志
0004 46 FLAG4 BIT 20H.4 ;蜂鸣器静音标志
47 ;===========================================================
0000 48 ORG 0000H
0000 802E 49 JMP MAIN
000B 50 ORG 000BH
000B 806C 51 JMP INT_T0
0030 52 ORG 0030H
53 ;===========================================================
0030 758160 54 MAIN: MOV SP,#60H
0033 7400 55 MOV A,#00H
0035 7820 56 MOV R0,#20H ;将 20H-2FH 单元清零
0037 7910 57 MOV R1,#10H
0039 F6 58 CLEAR: MOV @R0,A
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 2
003A 08 59 INC R0
003B D9FC 60 DJNZ R1,CLEAR
61
003D 758901 62 MOV TMOD,#01H ;T0,方式1
0040 753100 63 MOV TIME_L,#00H ;50ms定时值
0043 75324C 64 MOV TIME_H,#4CH
0046 753000 65 MOV T0_CONU,#00H ;中断计数
0049 75A882 66 MOV IE,#82H ;EA=1,ET0=1
004C D28C 67 SETB TR0
004E 91AE 68 CALL SET_LCD ;初始化 LCD 1602
0050 69 START:
0050 5171 70 CALL RESET ;18B20复位子程序
0052 300006 71 JNB FLAG1,START1 ;DS1820不存在
0055 510F 72 CALL MENU_OK ;
0057 31FA 73 CALL TEMP_BJ ;显示温度标记
0059 800D 74 JMP START3
005B 75 START1:
005B 5140 76 CALL MENU_ERROR ;
005D C28C 77 CLR TR0
005F 78 START2:
005F 5171 79 CALL RESET ;18B20复位子程序
0061 2000EC 80 JB FLAG1,START
0064 B123 81 CALL BEEP_BL ;DS1820不正常时,报警。
0066 80F7 82 JMP START2
83
84 ;-----------------------------------------------------------
0068 85 START3:
0068 5171 86 CALL RESET ;DS18B20 复位与检测
006A 3000EE 87 JNB FLAG1,START1 ;DS1820不存在
006D 7109 88 CALL READ_TEMP ;读出温度与报警数据
006F 7144 89 CALL CONVTEMP
0071 3185 90 CALL TEMP_COMP ;温度比较子程序
0073 9135 91 CALL CONV
0075 1194 92 CALL PROC_KEY ;键功能扫描
0077 80EF 93 SJMP START3
94 ;-----------------------------------------------
95 ;T0,50ms中断子程序
96 ;500ms对闪动标记 20H.2 取反一次
97 ;-----------------------------------------------
0079 98 INT_T0:
0079 C0E0 99 PUSH ACC ;入栈保护
007B C0D0 100 PUSH PSW
007D 85318A 101 MOV TL0,TIME_L ;重装定时值
0080 85328C 102 MOV TH0,TIME_H ;
0083 0530 103 INC T0_CONU ;中断次数加1
0085 E530 104 MOV A,T0_CONU
0087 B40A05 105 CJNE A,#0AH,INT_END ;500ms 是否到?
008A 753000 106 MOV T0_CONU,#00H
008D B202 107 CPL 20H.2 ;闪动标记取反
008F 108 INT_END:
008F D0D0 109 POP PSW ;出栈
0091 D0E0 110 POP ACC
0093 32 111 RETI
112 ;-------------------------------------------------
113 ;按键功能处理子程序
114 ;K1: 查看报警值, K3: 退出查看状态
115 ;K2: 设定报警值
116 ;-------------------------------------------------
0094 117 PROC_KEY:
0094 209415 118 JB K1,PROC_K1 ; 按键K1处理
0097 B123 119 CALL BEEP_BL ;蜂鸣器响一声
0099 3094FD 120 JNB K1,$ ;等待 K1 释放
009C 9000D0 121 MOV DPTR,#M_ALAX1
009F 7401 122 MOV A,#1
00A1 91D4 123 CALL LCD_PRINT
00A3 719F 124 CALL LOOK_ALARM ;查看报警值
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 3
00A5 2096FD 125 JB K3,$ ;等待 K3 键按下
00A8 B123 126 CALL BEEP_BL
00AA 8015 127 JMP PROC_K2
00AC 128 PROC_K1: ; 按键K2处理
00AC 209516 129 JB K2,PROC_K4
00AF B123 130 CALL BEEP_BL ;蜂鸣器响一声
00B1 3095FD 131 JNB K2,$ ;等待 K2 释放
00B4 9000E1 132 MOV DPTR,#RESET_A1
00B7 7401 133 MOV A,#1
00B9 91D4 134 CALL LCD_PRINT
00BB 11F2 135 CALL SET_ALARM ;设定报警值
00BD 519D 136 CALL RE_18B20 ;将设定的TH,TL值写入DS18B20内
00BF 51BD 137 CALL WRITE_E2 ;温度报警值拷贝到EEROM
00C1 138 PROC_K2:
00C1 510F 139 CALL MENU_OK
00C3 31FA 140 CALL TEMP_BJ
00C5 141 PROC_K4:
00C5 209707 142 JB K4,PROC_END ;按键K4处理
00C8 B123 143 CALL BEEP_BL ;蜂鸣器响一声
00CA 3097FD 144 JNB K4,$ ;等待 K4 释放
00CD B204 145 CPL FLAG4
00CF 146 PROC_END:
00CF 22 147 RET
148 ;---------------------------------------------
00D0 149 M_ALAX1:
00D0 204C4F4F 150 DB " LOOK ALERT CODE",0
00D4 4B20414C
00D8 45525420
00DC 434F4445
00E0 00
00E1 151 RESET_A1:
00E1 52455345 152 DB "RESET ALERT CODE",0
00E5 5420414C
00E9 45525420
00ED 434F4445
00F1 00
153 ;============================================
154 ;设定报警值 TH、TL
155 ;K1: 选择 UP/DOWN 方式
156 ;K2: 设定 TH 值,K3: 设定 TL 值
157 ;K4: 确定与退出
158 ;============================================
00F2 159 SET_ALARM:
00F2 719F 160 CALL LOOK_ALARM
00F4 161 AS0:
00F4 209407 162 JB K1,AS00
00F7 B123 163 CALL BEEP_BL
00F9 3094FD 164 JNB K1,$
00FC B201 165 CPL 20H.1 ;UP/DOWN 标记
00FE 200102 166 AS00: JB 20H.1,ASZ01 ;20H.1=1,UP
0101 8037 167 JMP ASJ01 ;20H.1=0,DOWN
168
0103 209514 169 ASZ01: JB K2,ASZ02 ;TH值调整(增加)
0106 B123 170 CALL BEEP_BL
0108 0527 171 INC TEMP_TH
010A E527 172 MOV A,TEMP_TH
010C B47803 173 CJNE A,#120,ASZ011 ;没有到设定上限值,转
010F 752700 174 MOV TEMP_TH,#0
0112 719F 175 ASZ011: CALL LOOK_ALARM ;显示设定值
0114 7D0A 176 MOV R5,#10 ;
0116 B136 177 CALL DELAY
0118 80E9 178 JMP ASZ01
179
011A 209614 180 ASZ02: JB K3,ASZ03 ;TL值调整(增加)
011D B123 181 CALL BEEP_BL
011F 0528 182 INC TEMP_TL
A51 MACRO ASSEMBLER DS18B20_LCD1602_温禵縚制 12/20/2006 22:01:59 PAGE 4
0121 E528 183 MOV A,TEMP_TL
0123 B46303 184 CJNE A,#99,ASZ021 ;没有到设定上限值,转
0126 752800 185 MOV TEMP_TL,#00H
0129 719F 186 ASZ021: CALL LOOK_ALARM ;显示设定值
012B 7D0A 187 MOV R5,#10
012D B136 188 CALL DELAY
012F 80E9 189 JMP ASZ02
0131 2097C0 190 ASZ03: JB K4,AS0 ;确定调整 OK
0134 B123 191 CALL BEEP_BL
0136 3097FD 192 JNB K4,$
0139 22 193 RET
194
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -