📄 ds18b20-lcd1602.lst
字号:
A51 MACRO ASSEMBLER DS18B20_LCD1602 06/11/2005 16:41:49 PAGE 1
MACRO ASSEMBLER A51 V6.12
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
4
0024 5 TEMP_ZH DATA 24H ;实时温度值存放单元
0025 6 TEMPL DATA 25H ;
0026 7 TEMPH DATA 26H ;
0027 8 TEMP_TH DATA 27H ;高温报警值存放单元
0028 9 TEMP_TL DATA 28H ;低温报警值存放单元
0029 10 TEMPHC DATA 29H ;
002A 11 TEMPLC DATA 2AH
12
0094 13 K1 EQU P1.4
0095 14 K2 EQU P1.5
0096 15 K3 EQU P1.6
0097 16 K4 EQU P1.7
17
00B7 18 BEEP EQU P3.7
0093 19 RELAY EQU P1.3
002F 20 LCD_X EQU 2FH ;LCD 地址变量
00A0 21 LCD_RS EQU P2.0
00A1 22 LCD_RW EQU P2.1
00A2 23 LCD_EN EQU P2.2
0000 24 flag1 equ 20H.0 ;DS18B20是否存在标记
0001 25 KEY_UD EQU 20H.1 ;设定 KEY 的UP与DOWN 标记
00B3 26 date_line equ p3.3
27 ;=====================================================
0000 28 ORG 0000H
0000 8000 29 JMP MAIN
30
0002 758160 31 MAIN: MOV SP,#60H
0005 7400 32 MOV A,#00H
0007 7820 33 MOV R0,#20H ;将 20H-2FH 单元清零
0009 7910 34 MOV R1,#10H
000B F6 35 CLEAR: MOV @R0,A
000C 08 36 INC R0
000D D9FC 37 DJNZ R1,CLEAR
38
000F 9115 39 CALL SET_LCD
0011 31EF 40 CALL RE_18B20
41
0013 31C3 42 start: CALL RESET ;18B20复位子程序
0015 300008 43 JNB FLAG1,START1 ;DS1820不存在
0018 3161 44 CALL MENU_OK
001A 511C 45 CALL READ_E2
001C 314C 46 CALL TEMP_BJ ;显示温度标记
001E 8006 47 JMP START2
0020 3192 48 START1: CALL MENU_ERROR
0022 314C 49 CALL TEMP_BJ ;显示温度标记
0024 80FE 50 JMP $
51
0026 52 START2:
0026 31C3 53 CALL RESET
0028 3000F5 54 JNB FLAG1,START1 ;DS1820不存在
002B 74CC 55 MOV A,#0CCH ; 跳筊OM匹配
002D 5143 56 CALL WRITE
002F 7444 57 MOV A,#44H ; 发出温度转换命令
0031 5143 58 CALL WRITE
A51 MACRO ASSEMBLER DS18B20_LCD1602 06/11/2005 16:41:49 PAGE 2
0033 31C3 59 CALL RESET
0035 74CC 60 MOV A,#0CCH ; 跳筊OM匹配
0037 5143 61 CALL WRITE
0039 74BE 62 MOV A,#0BEH ; 发出读温度命令
003B 5143 63 CALL WRITE
003D 515B 64 CALL READ
003F 5180 65 call CONVTEMP
0041 719B 66 Call DISPBCD
0043 71CF 67 CALL CONV
0045 3110 68 CALL TEMP_COMP
0047 114B 69 CALL PROC_KEY ; 键扫描
70
0049 80DB 71 SJMP START2
72 ;-----------------------------------------------------
004B 73 PROC_KEY:
004B 209415 74 JB K1,PROC_K1 ; 按键K1处理
004E 91A4 75 CALL BEEP_BL
0050 3094FD 76 JNB K1,$
0053 900319 77 MOV DPTR,#M_ALAX1
0056 7401 78 MOV A,#1
0058 9148 79 CALL LCD_PRINT
005A 51FB 80 CALL LOOK_ALARM
005C 2096FD 81 JB K3,$
005F 91A4 82 CALL BEEP_BL
0061 8015 83 JMP PROC_K2
0063 84 PROC_K1: ; 按键K2处理
0063 209516 85 JB K2,PROC_END
0066 91A4 86 CALL BEEP_BL
0068 3095FD 87 JNB K2,$
006B 900100 88 MOV DPTR,#RESET_A1
006E 7401 89 MOV A,#1
0070 9148 90 CALL LCD_PRINT
0072 117D 91 CALL SET_ALARM
0074 31EF 92 CALL RE_18B20 ;将设定的TH,TL值写入DS18B20内
0076 510F 93 CALL WRITE_E2
0078 94 PROC_K2:
0078 3161 95 CALL MENU_OK
007A 314C 96 CALL TEMP_BJ
007C 97 PROC_END:
007C 22 98 RET
99 ;============================================
100 ;设定报警值 TH、TL
101 ;============================================
007D 102 SET_ALARM:
103 ;CALL RESET_ALARM
007D 51FB 104 CALL LOOK_ALARM
007F 105 AS0:
007F 209407 106 JB K1,AS00
0082 91A4 107 CALL BEEP_BL
0084 3094FD 108 JNB K1,$
0087 B201 109 CPL 20H.1 ;UP/DOWN 标记
0089 200102 110 AS00: JB 20H.1,ASZ01 ;20H.1=1,UP
008C 8037 111 JMP ASJ01 ;20H.1=0,DOWN
112
008E 209514 113 ASZ01: JB K2,ASZ02 ;TH值调整(增加)
0091 91A4 114 CALL BEEP_BL
0093 0527 115 INC TEMP_TH
0095 E527 116 MOV A,TEMP_TH
0097 B47803 117 CJNE A,#120,ASZ011
009A 752700 118 MOV TEMP_TH,#0
009D 51FB 119 ASZ011: CALL LOOK_ALARM
009F 7D0A 120 MOV R5,#10
00A1 91B7 121 CALL DELAY
00A3 80E9 122 JMP ASZ01
123
00A5 209614 124 ASZ02: JB K3,ASZ03 ;TL值调整(增加)
A51 MACRO ASSEMBLER DS18B20_LCD1602 06/11/2005 16:41:49 PAGE 3
00A8 91A4 125 CALL BEEP_BL
00AA 0528 126 INC TEMP_TL
00AC E528 127 MOV A,TEMP_TL
00AE B46303 128 CJNE A,#99,ASZ021
00B1 752800 129 MOV TEMP_TL,#00H
00B4 51FB 130 ASZ021: CALL LOOK_ALARM ;
00B6 7D0A 131 MOV R5,#10
00B8 91B7 132 CALL DELAY
00BA 80E9 133 JMP ASZ02
00BC 2097C0 134 ASZ03: JB K4,AS0 ;确定调整 OK
00BF 91A4 135 CALL BEEP_BL
00C1 3097FD 136 JNB K4,$
00C4 22 137 RET
138
00C5 139 ASJ01:
00C5 209513 140 JB K2,ASJ02 ;TH值调整 (减少)
00C8 91A4 141 CALL BEEP_BL
00CA 1527 142 DEC TEMP_TH
00CC E527 143 MOV A,TEMP_TH
00CE B4FF02 144 CJNE A,#0FFH,ASJ011
00D1 801E 145 JMP ASJ022
00D3 51FB 146 ASJ011: CALL LOOK_ALARM
00D5 7D0A 147 MOV R5,#10
00D7 91B7 148 CALL DELAY
00D9 80A4 149 JMP AS0
150
00DB 209617 151 ASJ02: JB K3,ASJ03 ;TL值调整(减少)
00DE 91A4 152 CALL BEEP_BL
00E0 1528 153 DEC TEMP_TL
00E2 E528 154 MOV A,TEMP_TL
00E4 B4FF02 155 CJNE A,#0FFH,ASJ021
00E7 8008 156 JMP ASJ022
00E9 51FB 157 ASJ021: CALL LOOK_ALARM ;
00EB 7D0A 158 MOV R5,#10
00ED 91B7 159 CALL DELAY
00EF 808E 160 JMP AS0
00F1 B201 161 ASJ022: CPL 20H.1
00F3 8099 162 JMP ASZ01
00F5 80C5 163 ASJ03: JMP ASZ03
00F7 22 164 RET
165
166
00F8 167 RESET_ALARM:
00F8 900100 168 MOV DPTR,#RESET_A1 ;指针指到显示信息区
00FB 7401 169 MOV A,#1 ;显示在第一行
00FD 9148 170 CALL LCD_PRINT
00FF 22 171 RET
0100 172 RESET_A1:
0100 52455345 173 DB "RESET ALERT CODE"
0104 5420414C
0108 45525420
010C 434F4445
174 ;====================================================
175 ;实际温度值与标记温度值比较子程序
176 ;====================================================
0110 177 TEMP_COMP:
0110 E527 178 MOV A,TEMP_TH
0112 9524 179 SUBB A,TEMP_ZH ;减
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -