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

📄 ds18b20-lcd1602-温度控制.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
013A                 195     ASJ01:
013A 209513          196              JB  K2,ASJ02           ;TH值调整 (减少)
013D B123            197              CALL  BEEP_BL
013F 1527            198              DEC   TEMP_TH          ;
0141 E527            199              MOV  A,TEMP_TH
0143 B4FF02          200              CJNE  A,#0FFH,ASJ011  ;没有到设定下限值,转
0146 801E            201              JMP  ASJ022
0148 719F            202     ASJ011:  CALL  LOOK_ALARM      ;显示设定值
014A 7D0A            203              MOV  R5,#10
014C B136            204              CALL  DELAY
014E 80A4            205              JMP  AS0
                     206     
0150 209617          207     ASJ02:   JB  K3,ASJ03          ;TL值调整(减少)
0153 B123            208              CALL  BEEP_BL
0155 1528            209              DEC  TEMP_TL
0157 E528            210              MOV  A,TEMP_TL
0159 B4FF02          211              CJNE  A,#0FFH,ASJ021   ;没有到设定下限值,转
015C 8008            212              JMP  ASJ022
015E 719F            213     ASJ021:  CALL  LOOK_ALARM       ;显示设定值
0160 7D0A            214              MOV  R5,#10
0162 B136            215              CALL  DELAY
0164 808E            216              JMP  AS0
0166 B201            217     ASJ022:  CPL  20H.1             ;DOWN/UP 转换标记
0168 8099            218              JMP  ASZ01
016A 80C5            219     ASJ03:   JMP  ASZ03
016C 22              220              RET
                     221     ;===================================================
                     222     ;在LCD1602的第一行显示"RESET ALERT CODE"
                     223     ;===================================================
016D                 224     RESET_ALARM:
016D 900175          225               MOV  DPTR,#RESET_A2  ;指针指到显示信息区
0170 7401            226               MOV  A,#1            ;显示在第一行
0172 91D4            227               CALL  LCD_PRINT
0174 22              228               RET
0175                 229     RESET_A2:
0175 52455345        230          DB  "RESET ALERT CODE"
0179 5420414C                
017D 45525420                
0181 434F4445                
                     231     ;====================================================
                     232     ;实时温度值与设定报警温度值 TH、TL 比较子程序
                     233     ;当实际温度大于 TH 的设定值时,显示“>H”,继电器关闭
                     234     ;当实际温度小于 TH 的设定值时,显示“!!”,继电器吸合
                     235     ;当实际温度小于 TL 的设定值时,显示“<L”,蜂鸣器响
                     236     ;闪动显示标记符 >H、<L、!!
                     237     ;====================================================
0185                 238     TEMP_COMP:
                     239              ; SETB  TR0             ;启动中断
0185 E524            240               MOV  A,TEMP_ZH
0187 B52700          241               CJNE  A,TEMP_TH,T_COMP0
018A                 242     T_COMP0:
018A 5019            243               JNC   CHULI1
018C E524            244               MOV  A,TEMP_ZH
018E 9528            245               SUBB  A,TEMP_TL       ;减数>被减数,则
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE     5

0190 402B            246               JC  CHULI2            ;借位标志位C=1,转
0192 300208          247               JNB  FLAG2,T_COMP1    ;FLAG2=0,显示标记字符
0195 752F0E          248               MOV  LCD_X,#0EH       ;FLAG2=1,清屏,形成闪动效果
0198 1201D3          249               LCALL  CLR_TWO2
019B 8005            250               JMP  T_COMP2
019D 9001F8          251     T_COMP1:  MOV  DPTR,#BJ5        ;显示"!!"
01A0 31E4            252               CALL  TEMP_BJ3
01A2 C293            253     T_COMP2:  CLR   RELAY           ;继电器吸合
                     254              ; CLR  TR0              ;关闭中断
01A4 22              255               RET
01A5                 256     CHULI1:                         ;超温处理
01A5 300208          257               JNB  FLAG2,CHULI10
01A8 752F0E          258               MOV  LCD_X,#0EH
01AB 1201D3          259               LCALL  CLR_TWO2
01AE 800C            260               JMP  CHULI11
01B0 9001F4          261     CHULI10:  MOV  DPTR,#BJ3        ;显示">H"
01B3 31E4            262               CALL  TEMP_BJ3
01B5 D293            263               SETB  RELAY           ;继电器关闭
01B7 200402          264               JB  FLAG4,CHULI11
01BA B123            265               CALL  BEEP_BL         ;蜂鸣器响
01BC                 266     CHULI11:  ;CLR  TR0              ;关闭中断
01BC 22              267               RET
01BD                 268     CHULI2:                         ;欠温处理
01BD 300208          269               JNB  FLAG2,CHULI20
01C0 752F0E          270               MOV  LCD_X,#0EH
01C3 1201D3          271               LCALL  CLR_TWO2
01C6 800A            272               JMP  CHULI21
01C8 9001F6          273     CHULI20:  MOV  DPTR,#BJ4        ;显示"<L"
01CB 31E4            274               CALL  TEMP_BJ3
01CD 200402          275               JB  FLAG4,CHULI21
01D0 B123            276               CALL  BEEP_BL         ;蜂鸣器响
01D2                 277     CHULI21: ; CLR  TR0              ;关闭中断
01D2 22              278               RET
                     279     ;==========================================
                     280     ;清两个字符(闪烁功能用)
                     281     ;==========================================
01D3                 282     CLR_TWO2:
01D3 7420            283               MOV  A,#' '
01D5 852FF0          284               MOV  B,LCD_X
01D8 91A1            285               CALL  LCDP2
01DA 052F            286               INC  LCD_X
01DC 7420            287               MOV  A,#' '
01DE 852FF0          288               MOV  B,LCD_X
01E1 91A1            289               CALL  LCDP2
01E3 22              290               RET
                     291     ;=========================================
                     292     ;标记字符写入子程序
                     293     ;=========================================
01E4                 294     TEMP_BJ3:
01E4 74CE            295               MOV  A,#0CEH        ;指定写入地址
01E6 B107            296               CALL WCOM
01E8 7900            297               MOV  R1,#0
01EA 7802            298               MOV  R0,#2          ;写两个标记字符
                     299     
01EC E9              300     BBJJ3:    MOV  A,R1
01ED 93              301               MOVC A,@A+DPTR      ;读出要写的标记字符
01EE B114            302               CALL  WDATA         ;写入标记字符
01F0 09              303               INC R1
01F1 D8F9            304               DJNZ  R0,BBJJ3      ;没有写完,继续
01F3 22              305               RET
01F4                 306     BJ3:
01F4 3E48            307           DB  ">H"                ;超温标记
01F6                 308     BJ4:
01F6 3C4C            309           DB  "<L"                ;欠温标记
01F8                 310     BJ5:
01F8 2121            311           DB  "!!"                ;加热标记
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE     6

                     312     ;==================================================
                     313     ;显示温度标记 ℃ 子程序
                     314     ;将预先写入LCD1602 CGRAM 的数读出,并送显示
                     315     ;==================================================
01FA                 316     TEMP_BJ:
01FA 74CB            317               MOV  A,#0CBH       ;指定写入地址
01FC B107            318               CALL WCOM
01FE 90020D          319               MOV  DPTR,#BJ1     ;指针指到显示消息区
0201 7900            320               MOV  R1,#0
0203 7802            321               MOV  R0,#2         ;写两个标记字符
                     322     
0205 E9              323     BBJJ1:    MOV  A,R1
0206 93              324               MOVC A,@A+DPTR
0207 B114            325               CALL  WDATA
0209 09              326               INC R1
020A D8F9            327               DJNZ  R0,BBJJ1     ;没有写完,继续
020C 22              328               RET
020D                 329     BJ1:
020D 0043            330           DB  00H,"C"            ;字符 “℃”
                     331     ;=================================================
020F                 332     MENU_OK:
                     333     
020F 90021E          334               MOV  DPTR,#M_OK1   ;指针指到显示信息区
0212 7401            335               MOV  A,#1          ;显示在第一行
0214 91D4            336               CALL  LCD_PRINT
0216 90022F          337               MOV  DPTR,#M_OK2   ;指针指到显示信息区
0219 7402            338               MOV  A,#2          ;显示在第二行
021B 91D4            339               CALL  LCD_PRINT
021D 22              340               RET
021E                 341     M_OK1:
021E 20202044        342         DB   "   DS18B20 OK   ",0
0222 53313842                
0226 3230204F                
022A 4B202020                
022E 00                      
022F                 343     M_OK2:
022F 2054454D        344         DB   " TEMP:          ",0
0233 503A2020                
0237 20202020                
023B 20202020                
023F 00                      
                     345     ;-----------------------------------------------
0240                 346     MENU_ERROR:
0240 90024F          347               MOV  DPTR,#M_ERROR1  ;指针指到显示信息区
0243 7401            348               MOV  A,#1            ;显示在第一行
0245 91D4            349               CALL  LCD_PRINT
0247 900260          350               MOV  DPTR,#M_ERROR2  ;指针指到显示信息区
024A 7402            351               MOV  A,#2            ;显示在第二行
024C 91D4            352               CALL  LCD_PRINT
024E 22              353               RET
                     354     ;----------------------------------------------------
024F                 355     M_ERROR1:
024F 20445331        356         DB   " DS18B20 ERROR  ",0
0253 38423230                
0257 20455252                
025B 4F522020                
025F 00                      
                     357     
0260                 358     M_ERROR2:
0260 2020504C        359         DB   "  PLEASE CHECK  ",0
0264 45415345                
0268 20434845                
026C 434B2020                
0270 00                      
                     360     
                     361     ;====================================================
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE     7

                     362     ;DS18B20 复位与检测子程序
                     363     ;DS18B20 正常 FLAG1 置 1,不正常 FLAG1 置 0。
                     364     ;====================================================
0271                 365     RESET:
0271 D2B3            366             SETB DATE_LINE        ;
0273 00              367             NOP
0274 C2B3            368             CLR DATE_LINE
0276 786B            369             MOV R0,#6BH           ;主机发出延时复位低脉冲
0278 7904            370             MOV R1,#04H
027A D8FE            371     TSR1:   DJNZ R0,$             ;延时
027C 786B            372             MOV R0,#6BH
027E D9FA            373             DJNZ R1,TSR1
0280 D2B3            374             SETB DATE_LINE        ;然后拉高数据线
0282 00              375             NOP
0283 00              376             NOP
0284 00              377             NOP
0285 7832            378             MOV R0,#32H
0287 30B304          379     TSR2:   JNB DATE_LINE,TSR3    ;等待DS18B20回应
028A D8FB            380             DJNZ R0,TSR2
028C 8004            381             JMP TSR4              ; 延时
028E D200            382     TSR3:   SETB FLAG1            ; 置标志位,表示DS1820存在
0290 8004            383             JMP TSR5
0292 C200            384     TSR4:   CLR FLAG1             ; 清标志位,表示DS1820不存在
0294 8004            385             JMP TSR7
0296 786B            386     TSR5:   MOV R0,#06BH

⌨️ 快捷键说明

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