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

📄 ds18b20-lcd1602-温度控制.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
03B1 74CE            597               MOV  A,#0CEH         ;指定地址
03B3 71CE            598               CALL  TEMP_BJ1       ;
03B5 E528            599               MOV  A,TEMP_TL       ;加载 TL 数据
03B7 752F0C          600               MOV  LCD_X,#12       ;设置位置变量
03BA 9115            601               CALL  SHOW_DIG2L     ;显示 TL 数据
03BC 22              602               RET
                     603     ;--------------------------------------------
03BD                 604     M_ALAX2:
03BD 54483A20        605          DB   "TH:      TL:    ",0
03C1 20202020                
03C5 20544C3A                
03C9 20202020                
03CD 00                      
                     606     ;--------------------------------------------
                     607     ;显示标记“℃”子程序
                     608     ;在指定的位置显示“℃”
                     609     ;--------------------------------------------
03CE                 610     TEMP_BJ1:
03CE B107            611               CALL WCOM
03D0 9003DF          612               MOV  DPTR,#BJ2      ;指针指到显示信息区
03D3 7900            613               MOV  R1,#0
03D5 7802            614               MOV  R0,#2
03D7                 615     BBJJ2:
03D7 E9              616               MOV  A,R1
03D8 93              617               MOVC A,@A+DPTR
03D9 B114            618               CALL  WDATA
03DB 09              619               INC R1
03DC D8F9            620               DJNZ  R0,BBJJ2
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE    11

03DE 22              621               RET
03DF                 622     BJ2:
03DF 0043            623               DB  00H,"C"
                     624     
                     625     ;---------------------------------------------------
                     626     ;在 LCD 的第二行显示 TH 数值
                     627     ;将 TH 值分离并转换为 ASCII 码,送显示
                     628     ;百位、十位、个位
                     629     ;---------------------------------------------------
03E1                 630     SHOW_DIG2H:
03E1 75F064          631               MOV  B,#100
03E4 84              632               DIV  AB             ;
03E5 B40104          633               CJNE  A,#01H,SHOW_DIG2H1
03E8 2430            634               ADD  A,#30H         ;百位转换为ASCII码
03EA 8002            635               JMP  SHOW_DIG2H2
03EC                 636     SHOW_DIG2H1:
03EC 7420            637               MOV  A,#' '         ;百位数不为1,显示空格
03EE                 638     SHOW_DIG2H2:
03EE C0F0            639               PUSH  B
03F0 852FF0          640               MOV  B,LCD_X
03F3 91A1            641               CALL  LCDP2         ;送显示
03F5 D0F0            642               POP  B
03F7 740A            643               MOV  A,#0AH
03F9 C5F0            644               XCH  A,B
03FB 84              645               DIV  AB
03FC 2430            646               ADD  A,#30H         ;十位转换为ASCII码
03FE 052F            647               INC  LCD_X
0400 C0F0            648               PUSH  B
0402 852FF0          649               MOV  B,LCD_X
0405 91A1            650               CALL  LCDP2         ;送显示
0407 D0F0            651               POP  B
0409 052F            652               INC  LCD_X
040B E5F0            653               MOV  A,B
040D 852FF0          654               MOV  B,LCD_X
0410 2430            655               ADD  A,#30H         ;个位转换为ASCII码
0412 91A1            656               CALL  LCDP2         ;送显示
0414 22              657               RET
                     658     ;-------------------------------------------------
                     659     ;在 LCD 的第二行显示 TL 数值
                     660     ;将 TL 值分离并转换为 ASCII 码,送显示
                     661     ;只取十位数和个位数,百位数舍弃
                     662     ;-------------------------------------------------
0415                 663     SHOW_DIG2L:
0415 75F064          664               MOV  B,#100        ;
0418 84              665               DIV  AB            ;百位数舍弃
0419 740A            666               MOV  A,#0AH
041B C5F0            667               XCH  A,B
041D 84              668               DIV  AB
041E 2430            669               ADD  A,#30H        ;十位数转换为 ASCII 码
0420 C0F0            670               PUSH  B
0422 852FF0          671               MOV  B,LCD_X       ;确定显示位置
0425 91A1            672               CALL  LCDP2        ;送显示
0427 D0F0            673               POP  B
0429 052F            674               INC  LCD_X         ;调整显示地址
042B E5F0            675               MOV  A,B           ;个位数
042D 852FF0          676               MOV  B,LCD_X       ;确定显示位置
0430 2430            677               ADD  A,#30H        ;个位数转换为 ASCII 码
0432 91A1            678               CALL  LCDP2        ;送显示
0434 22              679               RET
                     680     
                     681     ;==========================================================
                     682     ; LCD 1602 温度值显示子程序
                     683     ;73H-70H 分别存放百位、十位、个位、小数位的数据
                     684     ;==========================================================
0435                 685     CONV:
0435 E573            686               MOV  A,73H         ;加载百位数据
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE    12

0437 752F06          687               MOV  LCD_X,#6      ;设置显示位置
043A 300317          688               JNB  FLAG3,CONV0   ;
043D 742D            689               MOV  A,#"-"        ;显示"-"
043F 852FF0          690               MOV  B,LCD_X
0442 91A1            691               CALL  LCDP2
                     692     
0444 E572            693               MOV  A,72H         ;十位
0446 B40027          694               CJNE A,#00H,CONV3
0449 052F            695               INC  LCD_X         ;调整显示地址
044B 7420            696               MOV  A,#" "        ;十位数等于0显示空格
044D 852FF0          697               MOV  B,LCD_X
0450 91A1            698               CALL  LCDP2
0452 8022            699               JMP  CONV4
0454                 700     CONV0:
0454 B40017          701               CJNE A,#00H,CONV2
0457 7420            702     CONV1:    MOV  A,#" "        ;百位数等于0显示空格
0459 852FF0          703               MOV  B,LCD_X
045C 91A1            704               CALL  LCDP2
045E E572            705               MOV  A,72H         ;十位
0460 B4000D          706               CJNE A,#00H,CONV3
0463 052F            707               INC  LCD_X         ;调整显示地址
0465 7420            708               MOV  A,#" "        ;十位数等于0显示空格
0467 852FF0          709               MOV  B,LCD_X
046A 91A1            710               CALL  LCDP2
046C 8008            711               JMP  CONV4
                     712     
046E 918C            713     CONV2:    CALL  SHOW_DIG2    ;显示数据
                     714     
0470 052F            715     CONV3:    INC  LCD_X         ;调整显示地址
0472 E572            716               MOV  A,72H         ;十位
0474 918C            717               CALL  SHOW_DIG2
0476                 718     CONV4:
0476 052F            719               INC  LCD_X         ;调整显示地址
0478 E571            720               MOV  A,71H         ;个位
047A 918C            721               CALL  SHOW_DIG2
047C 052F            722               INC  LCD_X         ;调整显示地址
047E 742E            723               MOV  A,#'.'
0480 852FF0          724               MOV  B,LCD_X
0483 91A1            725               CALL  LCDP2
0485 E570            726               MOV  A,70H         ;加载小数位
0487 052F            727               INC  LCD_X         ;设置位置
0489 918C            728               CALL  SHOW_DIG2    ;显示数据
048B 22              729               RET
                     730     ;-------------------------------------------------------
048C                 731     SHOW_DIG2:                 ;在 LCD 的第二行显示数字
048C 2430            732               ADD  A,#30H      ;加30H,转换为ASCII码
048E 852FF0          733               MOV  B,LCD_X     ;确定显示位置
0491 91A1            734               CALL  LCDP2      ;送显示
0493 22              735               RET
                     736     ;=============================================
                     737     ;在LCD的第一行显示数据字符
                     738     ;A=ASCII 数据, B=位置变量
                     739     ;==============================================
0494                 740     LCDP1:                    ;在LCD的第一行显示字符
0494 C0E0            741              PUSH  ACC        ;
0496 E5F0            742              MOV  A,B         ;设置显示地址
0498 2480            743              ADD  A,#80H      ;设置LCD的第一行地址
049A B107            744              CALL  WCOM       ;写入命令
049C D0E0            745              POP  ACC         ;由堆栈取出A
049E B114            746              CALL  WDATA      ;写入数据
04A0 22              747              RET
                     748     ;=============================================
                     749     ;在LCD的第二行显示数据字符
                     750     ;A=ASCII 数据, B=位置变量
                     751     ;==============================================
04A1                 752     LCDP2:                    ;在LCD的第二行显示字符
A51 MACRO ASSEMBLER  DS18B20_LCD1602_温禵縚制                                             12/20/2006 22:01:59 PAGE    13

04A1 C0E0            753              PUSH  ACC        ;
04A3 E5F0            754              MOV  A,B         ;设置显示地址
04A5 24C0            755              ADD  A,#0C0H     ;设置LCD的第二行地址
04A7 B107            756              CALL  WCOM       ;写入命令
04A9 D0E0            757              POP  ACC         ;由堆栈取出A
04AB B114            758              CALL  WDATA      ;写入数据
04AD 22              759              RET
                     760     ;=================================================
                     761     ;对 LCD 做初始化设置
                     762     ;将自定义字符“℃”存入 LCD1602 的 CGRAM 中
                     763     ;=================================================
04AE                 764     SET_LCD:
04AE C2A2            765               CLR  LCD_EN
04B0 91B5            766               CALL  INIT_LCD     ;初始化 LCD
04B2 51D6            767               CALL  STORE_DATA   ;将自定义字符存入LCD的CGRAM
04B4 22              768               RET
04B5                 769     INIT_LCD:
04B5 7438            770               MOV  A,#38H        ;双列显示,字形5*7点阵
04B7 B107            771               CALL  WCOM         ;写入命令
04B9 B141            772               CALL  DELAY1       ;延时5MS
04BB 7438            773               MOV  A,#38H
04BD B107            774               CALL  WCOM         ;写入命令
04BF B141            775               CALL  DELAY1       ;延时5MS
                     776     
04C1 7438            777               MOV  A,#38H
04C3 B107            778               CALL  WCOM         ;写入命令
04C5 B141            779               CALL  DELAY1       ;延时5MS
04C7 740C            780               MOV  A,#0CH        ;开显示, 不显示光标,光标不闪烁
04C9 B107            781               CALL  WCOM         ;写入命令
04CB B141            782               CALL  DELAY1       ;延时5MS
04CD 7401            783               MOV  A,#01H        ;清除 LCD 显示屏
04CF B107            784               CALL  WCOM         ;写入命令
04D1 B141            785               CALL  DELAY1       ;延时5MS
04D3 22              786               RET
                     787     ;==================================================
                     788     ;在LCD的第一行或第二行显示字符串
                     789     ;DPTR = 放字符串的地址
                     790     ;==================================================
04D4                 791     LCD_PRINT:
                     792     
04D4 B4010C          793               CJNE  A,#1,LINE2  ;判断是否为第一行
04D7 7480            794       LINE1:  MOV  A,#80H       ;设置 LCD 的第一行地址
04D9 B107            795               CALL  WCOM        ;写入命令
04DB 91F9            796               CALL  CLR_LINE    ;清除该行字符数据
04DD 7480            797               MOV  A,#80H       ;设置 LCD 的第一行地址
04DF B107            798               CALL  WCOM        ;写入命令
04E1 800A            799               JMP  FILL
                     800     
04E3 74C0            801       LINE2:  MOV  A,#0C0H      ;设置 LCD 的第二行地址
04E5 B107            802               CALL  WCOM        ;写入命令
04E7 91F9            803               CALL  CLR_LINE    ;清除该行字符数据

⌨️ 快捷键说明

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