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

📄 ex10-4.sdi

📁 ds18b20温度采集及数码管显示
💻 SDI
📖 第 1 页 / 共 3 页
字号:
,,,
,,,          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 + -