📄 ex10-4.sdi
字号:
,,,
,,, TEMP_ZH EQU 24H ;实测温度值存放单元
,,, TEMPL EQU 25H
,,, TEMPH EQU 26H
,,, TEMP_TH EQU 27H ;高温报警值存放单元
,,, TEMP_TL EQU 28H ;低温报警值存放单元
,,, TEMPHC EQU 29H ;正、负温度值标记
,,, TEMPLC EQU 2AH
,,, TEMPFC EQU 2BH
000B,,, K1 EQU P1.4 ;查询按键
000B,,, K2 EQU P1.5 ;设置/调整键
000B,,, K3 EQU P1.6 ;调整键
000B,,, K4 EQU P1.7 ;确定键
000B,,, BEEP EQU P3.7 ;蜂鸣器
000B,,, RELAY EQU P1.3 ;指示灯
,,, LCD_X EQU 2FH ;LCD 字符显示位置
000B,,, LCD_RS EQU P2.0 ;LCD 寄存器选择信号
000B,,, LCD_RW EQU P2.1 ;LCD 读写信号
000B,,, LCD_EN EQU P2.2 ;LCD 允许信号
000B,,, FLAG1 EQU 20H.0 ;DS18B20是否存在标志
000B,,, KEY_UD EQU 20H.1 ;设定按键的增、减标志
000B,,, DQ EQU P3.3 ;DS18B20数据信号
,,, ORG 0000H
0000,02 00 30,, LJMP MAIN
,,, ORG 0030H
0030,75 81 60,MAIN,MAIN: MOV SP,#60H
0033,74 00,, MOV A,#00H
0035,78 20,, MOV R0,#20H ;将20H~2FH 单元清零
0037,79 10,, MOV R1,#10H
0039,F6,CLEAR,CLEAR: MOV @R0,A
003A,08,, INC R0
003B,D9 FC,, DJNZ R1,CLEAR
003D,12 04 A6,, LCALL SET_LCD
0040,12 02 6B,, LCALL RE_18B20
0043,12 02 3C,START,START: LCALL RST ;调用18B20复位子程序
0046,30 00 15,, JNB FLAG1,START1 ;DS1820不存在
0049,12 01 D6,, LCALL MENU_OK ;DS1820存在,调用显示正确信息子程序
004C,75 27 55,, MOV TEMP_TH,#055H ;设置TH初值85度
004F,75 28 19,, MOV TEMP_TL,#019H ;设置TL初值25度
0052,12 02 6F,, LCALL RE_18B20A ;调用暂存器操作子程序
0055,12 02 8C,, LCALL WRITE_E2 ;写入DS18B20
0058,12 01 BF,, LCALL TEMP_BJ ;显示温度标记
005B,02 00 66,, JMP START2
005E,12 02 09,START1,START1: LCALL MENU_ERROR ;调用显示出错信息子程序
0061,12 01 BF,, LCALL TEMP_BJ ;显示温度标记
0064,80 FE,, SJMP $
0066,12 02 3C,START2,START2: LCALL RST ;调用DS18B20复位子程序
0069,30 00 F2,, JNB FLAG1,START1 ;DS18B20不存在
006C,74 CC,, MOV A,#0CCH ;跳过ROM匹配命令
006E,12 02 C5,, LCALL WRITE
0071,74 44,, MOV A,#44H ;温度转换命令
0073,12 02 C5,, LCALL WRITE
0076,12 02 3C,, LCALL RST
0079,74 CC,, MOV A,#0CCH ;跳过ROM匹配
007B,12 02 C5,, LCALL WRITE
007E,74 BE,, MOV A,#0BEH ;读温度命令
0080,12 02 C5,, LCALL WRITE
0083,12 02 DD,, LCALL READ ;调用DS18B20数据读取操作子程序
0086,12 03 02,, LCALL CONVTEMP ;调用温度数据BCD 码处理子程序
0089,12 04 32,, LCALL DISPBCD ;调用温度数据显示子程序
008C,12 04 4D,, LCALL CONV ;调用LCD显示处理子程序
008F,12 01 73,, LCALL TEMP_COMP ;调用实测温度值与设定温度值比较子程序
0092,12 00 97,, LCALL PROC_KEY ;调用键扫描子程序
0095,80 CF,, SJMP START2 ;循环
,,,;*************************** 键扫描子程序 *****************************
0097,20 94 1A,PROC_KEY,PROC_KEY:JB K1,PROC_K1
009A,12 05 51,, LCALL BEEP_BL
009D,30 94 FD,, JNB K1,$
00A0,90 03 A9,, MOV DPTR,#M_ALAX1
00A3,74 01,, MOV A,#1
00A5,12 04 E7,, LCALL LCD_PRINT
00A8,12 03 86,, LCALL LOOK_ALARM
00AB,20 96 FD,, JB K3,$
00AE,12 05 51,, LCALL BEEP_BL
00B1,02 00 CE,, JMP PROC_K2
00B4,20 95 1D,PROC_K1,PROC_K1: JB K2,PROC_END
00B7,12 05 51,, LCALL BEEP_BL
00BA,30 95 FD,, JNB K2,$
00BD,90 01 62,, MOV DPTR,#RST_A1
00C0,74 01,, MOV A,#1
00C2,12 04 E7,, LCALL LCD_PRINT
00C5,12 00 D5,, LCALL SET_ALARM
00C8,12 02 6B,, LCALL RE_18B20 ;将设定的TH,TL值写入DS18B20
00CB,12 02 8C,, LCALL WRITE_E2
00CE,12 01 D6,PROC_K2,PROC_K2: LCALL MENU_OK
00D1,12 01 BF,, LCALL TEMP_BJ
00D4,22,PROC_END,PROC_END:RET
,,,
,,,;*************************** 设定温度报警值 TH、TL ***************************
00D5,12 03 86,SET_ALARM,SET_ALARM:LCALL LOOK_ALARM
00D8,20 94 08,AS0,AS0: JB K1,AS00
00DB,12 05 51,, LCALL BEEP_BL
00DE,30 94 FD,, JNB K1,$
00E1,B2 01,, CPL 20H.1 ;UP/DOWN 标记
00E3,20 01 03,AS00,AS00: JB 20H.1,ASZ01 ;20H.1=1,增加
00E6,02 01 27,, JMP ASJ01 ;20H.1=0,减小
00E9,20 95 17,ASZ01,ASZ01: JB K2,ASZ02 ;TH值调整(增加)
00EC,12 05 51,, LCALL BEEP_BL
00EF,05 27,, INC TEMP_TH
00F1,E5 27,, MOV A,TEMP_TH
00F3,B4 78 03,, CJNE A,#120,ASZ011
00F6,75 27 00,, MOV TEMP_TH,#0
00F9,12 03 86,ASZ011,ASZ011: LCALL LOOK_ALARM
00FC,7D 0A,, MOV R5,#10
00FE,12 05 68,, LCALL DELAY
0101,80 E6,, JMP ASZ01
0103,20 96 17,ASZ02,ASZ02: JB K3,ASZ03 ;TL值调整(增加)
0106,12 05 51,, LCALL BEEP_BL
0109,05 28,, INC TEMP_TL
010B,E5 28,, MOV A,TEMP_TL
010D,B4 63 03,, CJNE A,#99,ASZ021
0110,75 28 00,, MOV TEMP_TL,#00H
0113,12 03 86,ASZ021,ASZ021: LCALL LOOK_ALARM
0116,7D 0A,, MOV R5,#10
0118,12 05 68,, LCALL DELAY
011B,80 E6,, JMP ASZ02
011D,20 97 B8,ASZ03,ASZ03: JB K4,AS0 ;确定调整
0120,12 05 51,, LCALL BEEP_BL
0123,30 97 FD,, JNB K4,$
0126,22,, RET
0127,20 95 17,ASJ01,ASJ01: JB K2,ASJ02 ;TH值调整(减少)
012A,12 05 51,, LCALL BEEP_BL
012D,15 27,, DEC TEMP_TH
012F,E5 27,, MOV A,TEMP_TH
0131,B4 FF 03,, CJNE A,#0FFH,ASJ011
0134,02 01 5B,, JMP ASJ022
0137,12 03 86,ASJ011,ASJ011: LCALL LOOK_ALARM
013A,7D 0A,, MOV R5,#10
013C,12 05 68,, LCALL DELAY
013F,80 97,, JMP AS0
0141,20 96 1B,ASJ02,ASJ02: JB K3,ASJ03 ;TL值调整(减少)
0144,12 05 51,, LCALL BEEP_BL
0147,15 28,, DEC TEMP_TL
0149,E5 28,, MOV A,TEMP_TL
014B,B4 FF 03,, CJNE A,#0FFH,ASJ021
014E,02 01 5B,, JMP ASJ022
0151,12 03 86,ASJ021,ASJ021: LCALL LOOK_ALARM ;
0154,7D 0A,, MOV R5,#10
0156,12 05 68,, LCALL DELAY
0159,01 D8,, JMP AS0
015B,B2 01,ASJ022,ASJ022: CPL 20H.1
015D,80 8A,, JMP ASZ01
015F,80 BC,ASJ03,ASJ03: JMP ASZ03
0161,22,, RET
0162,20 53 45 54,RST_A1,RST_A1: DB " SET ALERT CODE " ,0
,,,
,,,;*********************** 实测温度值与设定温度值比较子程序 **********************
0173,E5 27,TEMP_COMP,TEMP_COMP:MOV A,TEMP_TH
0175,95 24,, SUBB A,TEMP_ZH ;减数>被减数,则
0177,40 16,, JC CHULI1 ;借位标志位C=1,转
0179,E5 2B,, MOV A,TEMPFC
017B,B4 0B 02,, CJNE A,#0BH,COMP
017E,80 1B,, SJMP CHULI2
0180,E5 24,COMP,COMP: MOV A,TEMP_ZH
0182,95 28,, SUBB A,TEMP_TL ;减数>被减数,则
0184,40 15,, JC CHULI2 ;借位标志位C=1,转
0186,90 01 BD,, MOV DPTR,#BJ5
0189,12 01 A7,, LCALL TEMP_BJ3
018C,C2 93,, CLR RELAY ;点亮指示灯
018E,22,, RET
018F,90 01 B9,CHULI1, CHULI1: MOV DPTR,#BJ3
0192,12 01 A7,, LCALL TEMP_BJ3
0195,D2 93,, SETB RELAY ;熄灭指示灯
0197,12 05 51,, LCALL BEEP_BL ;蜂鸣器响
019A,22,, RET
019B,90 01 BB,CHULI2, CHULI2: MOV DPTR,#BJ4
019E,12 01 A7,, LCALL TEMP_BJ3
01A1,D2 93,, SETB RELAY ;熄灭指示灯
01A3,12 05 51,, LCALL BEEP_BL ;蜂鸣器响
01A6,22,, RET
,,,;-----------------------------------------
01A7,74 CE,TEMP_BJ3,TEMP_BJ3: MOV A,#0CEH
01A9,12 05 23,, LCALL WCOM
01AC,79 00,, MOV R1,#0
01AE,78 02,, MOV R0,#2
01B0,E9,BBJJ3,BBJJ3: MOV A,R1
01B1,93,, MOVC A,@A+DPTR
01B2,12 05 31,, LCALL WDATA
01B5,09,, INC R1
01B6,D8 F8,, DJNZ R0,BBJJ3
01B8,22,, RET
01B9,3E 48,BJ3,BJ3: DB ">H"
01BB,3C 4C,BJ4,BJ4: DB "<L"
01BD,20 21,BJ5,BJ5: DB " !"
,,,;
,,,;**************************** 显示温度标记子程序 ***************************
01BF,74 CB,TEMP_BJ,TEMP_BJ: MOV A,#0CBH
01C1,12 05 23,, LCALL WCOM
01C4,90 01 D4,, MOV DPTR,#BJ1 ;指针指到显示消息
01C7,79 00,, MOV R1,#0
01C9,78 02,, MOV R0,#2
01CB,E9,BBJJ1,BBJJ1: MOV A,R1
01CC,93,, MOVC A,@A+DPTR
01CD,12 05 31,, LCALL WDATA
01D0,09,, INC R1
01D1,D8 F8,, DJNZ R0,BBJJ1
01D3,22,, RET
01D4,00 43,BJ1,BJ1: DB 00H,"C"
,,,
,,,;******************************** 显示正确信息子程序 ***************************
01D6,90 01 E7,MENU_OK,MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息
01D9,74 01,, MOV A,#1 ;显示在第一行
01DB,12 04 E7,, LCALL LCD_PRINT
01DE,90 01 F8,, MOV DPTR,#M_OK2 ;指针指到显示消息
01E1,74 02,, MOV A,#2 ;显示在第一行
01E3,12 04 E7,, LCALL LCD_PRINT
01E6,22,, RET
01E7,20 20 20 44,M_OK1,M_OK1: DB " DS18B20 OK ",0
01F8,20 54 45 4D,M_OK2,M_OK2: DB " TEMP: ",0
,,,
,,,;******************************** 显示出错信息子程序 ***************************
0209,90 02 1A,MENU_ERROR,MENU_ERROR:MOV DPTR,#M_ERROR1 ;指针指到显示消息
020C,74 01,, MOV A,#1 ;显示在第一行
020E,12 04 E7,, LCALL LCD_PRINT
0211,90 02 2B,, MOV DPTR,#M_ERROR2 ;指针指到显示消息1
0214,74 02,, MOV A,#2 ;显示在第一行
0216,12 04 E7,, LCALL LCD_PRINT
0219,22,, RET
021A,20 44 53 31,M_ERROR1,M_ERROR1: DB " DS18B20 ERROR ",0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -