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

📄 lcd2402.lst

📁 51单片机开发入门与典型实例
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     463      ;――――――――――――
                     464      ;主机发出延时537微秒的复位低脉冲
02C8 7903            465            MOV  R1,#3
02CA 786B            466        DLY: MOV  R0,#107
02CC D8FE            467            DJNZ R0,$
02CE D9FA            468            DJNZ R1,DLY
                     469      ;――――――――――――
                     470      ;然后拉高数据线
02D0 D2A5            471            SETB  DQ        
02D2 00              472            NOP
02D3 00              473            NOP
02D4 00              474            NOP
                     475      ;――――――――――――  
02D5 7825            476            MOV  R0,#25H        
02D7 30A504          477        T2: JNB   DQ ,T3       ;等待DS18B20回应
02DA D8FB            478            DJNZ  R0, T2
02DC 8004            479            JMP  T4          
                     480      ;――――――――――――
02DE D200            481        T3: SETB  FLAG      ;置标志位,表示DS1820存在
02E0 8004            482            JMP  T5
                     483      ;――――――――――――
02E2 C200            484        T4: CLR   FLAG     ;清标志位,表示DS1820不存在     
02E4 8004            485            JMP  T7
                     486       ;――――――――――――
02E6 7875            487        T5: MOV  R0,#117
02E8 D8FE            488        T6: DJNZ R0,T6           ;时序要求延时一段时间
                     489      ;――――――――――――
02EA D2A5            490        T7: SETB   DQ        
02EC 22              491            RET                                           ;复位子程序
                     492            
                     493     ;------------------- 写入DS18B20子程序 -----------------------
                     494     
02ED                 495      WRITE_1820: ;写入DS18B20(有具体的时序要求)
02ED 7A08            496            MOV  R2,#8           ;一共8位数据
02EF C3              497            CLR  C
02F0                 498         WR1:
02F0 C2A5            499            CLR  DQ            ;总线低位,开始写入  
02F2 7B06            500            MOV  R3,#6
02F4 DBFE            501            DJNZ R3,$            ;保持16微秒以上
02F6 13              502            RRC  A  ;把字节DATA分成8个BIT环移给C
02F7 92A5            503            MOV  DQ, C        ;写入一个BIT
02F9 7B17            504            MOV  R3,#23
02FB DBFE            505            DJNZ R3,$            ;等待
02FD D2A5            506            SETB  DQ           ;重新释放总线
02FF 00              507            NOP
A51 MACRO ASSEMBLER  LCD2402                                                              01/05/2007 14:57:13 PAGE     9

0300 DAEE            508            DJNZ R2,WR1          ;写入下一个BIT
0302 D2A5            509            SETB  DQ          
0304 22              510            RET                                           ;写入子程序  
                     511     
                     512     ;--------------------- 读出DS18B20子程序 --------------------
                     513     
0305                 514      READ_1820: ;; 将温度低位、高位、TH、TL从DS18B20中读出     
0305 7C04            515            MOV  R4,#4      ;mov r4,#4          
0307 7925            516            MOV  R1,#TEMPL        ; 存入25H、26H、27H、28H      
0309                 517        RE0:
0309 7A08            518            MOV R2,#8           ;数据一共有8位
030B                 519        RE1:                  
030B C3              520            CLR C
030C D2A5            521            SETB  DQ          
030E 00              522            NOP
030F 00              523            NOP                                 
0310 C2A5            524            CLR   DQ          ;读前总线保持为低               
0312 00              525            NOP
0313 00              526            NOP
0314 00              527            NOP
0315 D2A5            528            SETB  DQ          ;开始读总线释放                 
                     529      
0317 7B09            530            MOV   R3,#9
0319 DBFE            531            DJNZ  R3,$        ;延时18微妙
031B A2A5            532            MOV C, DQ         ;从总线读到一个BIT                  
                     533           
031D 7B17            534           MOV   R3,#23  ;
031F DBFE            535           DJNZ R3,$           ;等待50微秒
0321 13              536           RRC  A              ;把读得的位价值环移给A
0322 DAE7            537           DJNZ  R2,RE1        ;读下一个BIT
0324 F7              538           MOV  @R1,A
0325 09              539           INC  R1              ; R1内数据递增
0326 DCE1            540           DJNZ R4,RE0
0328 22              541           RET                                          ;读出子程序
                     542     
                     543     ;=================== LCD 1602 显示程序 ======================
                     544     
                     545     ;初始化设置 
0329                 546     SET_LCD:                     ;对 LCD 做初始化设置及测试
0329 C2B7            547               CLR  E
032B 7130            548               CALL  INIT_LCD     ;初始化 LCD
032D 7158            549               CALL  STORE_DATA   ;将自定义字符存入LCD的CGRAM
032F 22              550               RET
                     551     
                     552     ;----------- LCD 初始化子程序 ----------- 
                     553     
0330                 554     INIT_LCD:                  ;8位I/O控制 LCD 接口初始化
0330 7438            555               MOV  A,#38H
0332 9138            556               CALL  WR_COMM
0334 9188            557               call  delay1
0336 740C            558               MOV  A,#0CH        ;开显示,显示光标,光标不闪烁
0338 9138            559               CALL  WR_COMM
033A 9188            560               call  delay1
033C 7401            561               MOV  A,#01H        ;清除 LCD 显示屏
033E 9138            562               CALL  WR_COMM
0340 9188            563               call  delay1
0342 22              564               RET
                     565     
                     566     ;----------- 显示温度标记子程序 ------------
                     567     ;显示温度标记子程序
0343                 568     TEMP_BJ:
0343 74CB            569               MOV    A, #0CBH
0345 9138            570               ACALL  WR_COMM
0347 900356          571               MOV    DPTR,#BJ  ;指针指到显示消息
034A 7900            572               MOV    R1 ,#0
034C 7802            573               MOV    R0 ,#2
A51 MACRO ASSEMBLER  LCD2402                                                              01/05/2007 14:57:13 PAGE    10

                     574     
034E E9              575     TP1:      MOV    A,R1
034F 93              576               MOVC   A,@A+DPTR
0350 9145            577               ACALL  WR_DATA
0352 09              578               INC    R1
0353 D8F9            579               DJNZ   R0,TP1
0355 22              580               RET
0356                 581     BJ:
0356 0043            582              DB  00H,"C"
                     583     
                     584     ;----------- 自定义字符子程序 ------------
                     585     ;将自定义字符写入LCD1602的CGRAM中
0358                 586     STORE_DATA:
0358 7440            587             MOV  A,#40H
035A 9138            588             ACALL  WR_COMM
035C 7A08            589             MOV  R2,#08H
035E 90036B          590             MOV  DPTR,#D_DATA
0361 7B00            591             MOV  R3,#00H
0363                 592     S_DATA:
0363 EB              593             MOV  A,R3
0364 93              594             MOVC  A,@A+DPTR
0365 9145            595             ACALL  WR_DATA      ;写入数据
0367 0B              596             INC  R3
0368 DAF9            597             DJNZ  R2,S_DATA
036A 22              598             RET
                     599     ;---------------------------
036B                 600     D_DATA:
036B 0C12120C        601         DB  0CH,12H,12H,0CH,00H,00H,00H,00H
036F 00000000                
                     602     ;--------------
                     603     
                     604     ;----------- 显示“OK”信息子程序 ---------
0373                 605     MEU_OK:
                     606     
0373 900382          607               MOV  DPTR,#M_OK1  ;指针指到显示消息
0376 7401            608               MOV  A,#1          ;显示在第一行
0378 71D5            609               CALL  LCD_PRINT
037A 900393          610               MOV  DPTR,#M_OK2  ;指针指到显示消息
037D 7402            611               MOV  A,#2          ;显示在第一行
037F 71D5            612               CALL  LCD_PRINT
0381 22              613               RET
0382                 614     M_OK1:
0382 20202044        615         DB   "   DS18B20 OK   ",0
0386 53313842                
038A 3230204F                
038E 4B202020                
0392 00                      
0393                 616     M_OK2:
0393 2054454D        617         DB   " TEMP:          ",0
0397 503A2020                
039B 20202020                
039F 20202020                
03A3 00                      
                     618     
                     619     ;----------显示“ERROR”信息子程序-------
                     620     
03A4                 621     MEU_ERROR:
03A4 9003B3          622               MOV  DPTR,#M_ERROR1  ;指针指到显示消息1
03A7 7401            623               MOV  A,#1          ;显示在第一行
03A9 71D5            624               ACALL  LCD_PRINT
03AB 9003C4          625               MOV  DPTR,#M_ERROR2  ;指针指到显示消息1
03AE 7402            626               MOV  A,#2          ;显示在第一行
03B0 71D5            627               ACALL  LCD_PRINT
03B2 22              628               RET
                     629     ;---------------
03B3                 630     M_ERROR1:
A51 MACRO ASSEMBLER  LCD2402                                                              01/05/2007 14:57:13 PAGE    11

03B3 20445331        631         DB   " DS18B20 ERROR  ",0
03B7 38423230                
03BB 20455252                
03BF 4F522020                
03C3 00                      
03C4                 632     M_ERROR2:
03C4 2054454D        633         DB   " TEMP: ----     ",0
03C8 503A202D                
03CC 2D2D2D20                
03D0 20202020                
03D4 00                      
                     634     ;---------------
                     635     
                     636     ;-------显示菜单 ------
                     637     
03D5                 638     LCD_PRINT:       ;在LCD的第一行或第二行显示字符
                     639     
03D5 B40108          640               CJNE  A,#1,LINE2  ;判断是否为第一行
03D8                 641       LINE1:  
03D8 9154            642               ACALL  CLR_LINE    ;清除该行字符数据
03DA 7480            643               MOV  A,#80H       ;设置 LCD 的第一行地址
03DC 9138            644               ACALL  WR_COMM        ;写入命令
03DE 8006            645               JMP  FILL
                     646     
03E0                 647       LINE2: 
03E0 9154            648               ACALL  CLR_LINE    ;清除该行字符数据
03E2 74C0            649               MOV  A,#0C0H      ;设置 LCD 的第二行地址
03E4 9138            650               ACALL  WR_COMM
03E6 E4              651       FILL:   CLR  A            ;填入字符
03E7 93              652               MOVC  A,@A+DPTR   ;由消息区取出字符
03E8 B40001          653               CJNE  A,#0,LC1    ;判断是否为结束码
03EB 22              654               RET
03EC 9145            655       LC1:    ACALL  WR_DATA       ;写入数据
03EE A3              656               INC  DPTR         ;指针加1
03EF 80F5            657               JMP  FILL         ;继续填入字符
03F1 22              658               RET
                     659     
                     660     ;---------- 数据转换 --------------
                     661     
03F2                 662     CONV:
03F2 E573            663               MOV  A,73H         ;加载百位数据
03F4 752F06          664               MOV  X,#6      ;设置位置
03F7 B40102          665               CJNE A,#1,CO1
03FA 8009            666               JMP  CO2
03FC 7420            667     CO1:      MOV  A,#" "
03FE 852FF0          668               MOV  B,X
0401 912B            669               ACALL  LCDP2
0403 8002            670               JMP  CO3
0405 9123            671     CO2:      ACALL  SHOW_LINE2    ;显示数据
0407 052F            672     CO3:      INC  X             ;
0409 E572            673               MOV   A,72H ;mov  a,72h         ;十位
040B 9123            674               ACALL  SHOW_LINE2
040D 052F            675               INC   X  ;inc  X
040F E571            676               MOV  A,  71H  ;mov  a,71h         ;个位
0411 9123            677               ACALL  SHOW_LINE2
0413 052F            678               INC    X    ;inc  X
0415 742E            679               MOV  A,#'.'
0417 852FF0          680               MOV  B,X
041A 912B            681               ACALL  LCDP2
041C E570            682               MOV  A,70H   ;h         ;加载小数点位
041E 052F            683               INC  X         ;设置位置
0420 9123            684               ACALL  SHOW_LINE2    ;显示数据
0422 22              685               RET
                     686     
                     687     ;------显示第二行 ------
                     688             

⌨️ 快捷键说明

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