📄 lcd2402.lst
字号:
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 + -