📄 rd_lcd1602b.lis
字号:
00E8 4054 subi R20,64 ; addi 192
00EA .dbline 410
00EA ; }
00EA L17:
00EA .dbline 412
00EA ;
00EA ; LCDWaitForReady();
00EA F0DF xcall _LCDWaitForReady
00EC .dbline 413
00EC ; LCDSendCommand(Address);
00EC 042F mov R16,R20
00EE BADF xcall _LCDSendCommand
00F0 .dbline -2
00F0 L15:
00F0 .dbline 0 ; func end
00F0 0C940000 xjmp pop_xgsetF00C
00F4 .dbsym r Address0 20 c
00F4 .dbsym r Y 10 c
00F4 .dbsym r X 22 c
00F4 .dbend
00F4 .dbfunc e LCDDisplayString _LCDDisplayString fV
00F4 ; String -> R20,R21
.even
00F4 _LCDDisplayString::
00F4 4A93 st -y,R20
00F6 5A93 st -y,R21
00F8 A801 movw R20,R16
00FA .dbline -1
00FA .dbline 423
00FA ; }
00FA ;
00FA ; /***********************************************************
00FA ; * 函数说明:LCD字符串显示函数 *
00FA ; * 输入: 要显示的字符串指针 *
00FA ; * 输出: 无 *
00FA ; * 调用函数:LCDWaitForReady() LCDSendData() *
00FA ; ***********************************************************/
00FA ; void LCDDisplayString(char *String)
00FA ; {
00FA 06C0 xjmp L20
00FC L19:
00FC .dbline 425
00FC ; while(*String)
00FC ; {
00FC .dbline 426
00FC ; LCDWaitForReady();
00FC E7DF xcall _LCDWaitForReady
00FE .dbline 427
00FE ; LCDSendData(*String);
00FE FA01 movw R30,R20
0100 0081 ldd R16,z+0
0102 CADF xcall _LCDSendData
0104 .dbline 428
0104 ; String++;
0104 4F5F subi R20,255 ; offset = 1
0106 5F4F sbci R21,255
0108 .dbline 429
0108 ; }
0108 L20:
0108 .dbline 424
0108 FA01 movw R30,R20
010A 2080 ldd R2,z+0
010C 2220 tst R2
010E B1F7 brne L19
0110 X3:
0110 .dbline -2
0110 L18:
0110 .dbline 0 ; func end
0110 5991 ld R21,y+
0112 4991 ld R20,y+
0114 0895 ret
0116 .dbsym r String 20 pc
0116 .dbend
0116 .dbfunc e LCDDisplayNum _LCDDisplayNum fV
0116 ; a1 -> R20
0116 ; BitCount -> y+5
0116 ; Num -> y+1
.even
0116 _LCDDisplayNum::
0116 0E940000 xcall push_arg4
011A 4A93 st -y,R20
011C .dbline -1
011C .dbline 439
011C ; }
011C ;
011C ; /***********************************************************
011C ; * 函数说明:数值显示函数(HEX) *
011C ; * 输入: 需要显示的数字(无符号长整形) *
011C ; * 输出: 无 *
011C ; * 调用函数:LCDSendData() *
011C ; ***********************************************************/
011C ; void LCDDisplayNum(unsigned long Num,char BitCount)
011C ; {
011C .dbline 440
011C ; char a = 0;
011C .dbline 441
011C ; for (a = 8-BitCount ;a<8;a++)
011C 48E0 ldi R20,8
011E 0D80 ldd R0,y+5
0120 4019 sub R20,R0
0122 1AC0 xjmp L26
0124 L23:
0124 .dbline 442
0124 ; {
0124 .dbline 443
0124 ; LCDSendData(CHR[(Num<<(a<<2))>>28]);
0124 242E mov R2,R20
0126 3324 clr R3
0128 220C lsl R2
012A 331C rol R3
012C 220C lsl R2
012E 331C rol R3
0130 0981 ldd R16,y+1
0132 1A81 ldd R17,y+2
0134 2B81 ldd R18,y+3
0136 3C81 ldd R19,y+4
0138 2A92 st -y,R2
013A 0E940000 xcall lsl32
013E 8CE1 ldi R24,28
0140 90E0 ldi R25,0
0142 8A93 st -y,R24
0144 0E940000 xcall lsr32
0148 F801 movw R30,R16
014A 80E0 ldi R24,<_CHR
014C 90E0 ldi R25,>_CHR
014E E80F add R30,R24
0150 F91F adc R31,R25
0152 0491 lpm R16,Z
0154 A1DF xcall _LCDSendData
0156 .dbline 444
0156 ; }
0156 L24:
0156 .dbline 441
0156 4395 inc R20
0158 L26:
0158 .dbline 441
0158 4830 cpi R20,8
015A 20F3 brlo L23
015C X4:
015C .dbline -2
015C L22:
015C .dbline 0 ; func end
015C 4991 ld R20,y+
015E 2496 adiw R28,4
0160 0895 ret
0162 .dbsym r a1 20 c
0162 .dbsym l BitCount 5 c
0162 .dbsym l Num 1 l
0162 .dbend
.area data(ram, con, rel)
0001 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
0001 L28:
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
0002 L29:
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
.area text(rom, con, rel)
0162 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
0162 .dbfunc e RunString _RunString fV
0162 .dbsym s RunTimeCounter L29 i
0162 .dbsym s StringHead L28 c
0162 ; SCREEN -> y+0
0162 ; a1 -> R12
0162 ; StringLong0 -> R10
0162 ; Point0 -> R14
0162 ; EndX -> y+31
0162 ; StartX -> R20
0162 ; Y -> y+27
0162 ; String -> R22,R23
.even
0162 _RunString::
0162 3A93 st -y,r19
0164 2A93 st -y,r18
0166 0E940000 xcall push_xgsetF0FC
016A B801 movw R22,R16
016C 6197 sbiw R28,17
016E 4D8D ldd R20,y+29
0170 .dbline -1
0170 .dbline 455
0170 ; }
0170 ;
0170 ;
0170 ; /***********************************************************
0170 ; * 函数说明:滚屏字幕效果 *
0170 ; * 输入: 需要滚屏的字符串 长度 位置 *
0170 ; * 输出: 无 *
0170 ; * 调用函数:LOCATE() PRINT() *
0170 ; ***********************************************************/
0170 ; void RunString(char *String,char Y,char StartX,char EndX)
0170 ; {
0170 .dbline 458
0170 ; static char StringHead = 0;
0170 ; char SCREEN[17];
0170 ; char a = 0;
0170 .dbline 459
0170 ; char Point = StringHead;
0170 E0900100 lds R14,L28
0174 .dbline 460
0174 ; char StringLong = StringLength(String);
0174 8B01 movw R16,R22
0176 51D0 xcall _StringLength
0178 A02E mov R10,R16
017A .dbline 463
017A ; static unsigned int RunTimeCounter = 0;
017A ;
017A ; for (a = 0;a<EndX - StartX + 1;a++)
017A CC24 clr R12
017C 10C0 xjmp L33
017E L30:
017E .dbline 464
017E ; {
017E .dbline 465
017E ; SCREEN[a] = String[Point];
017E EE2D mov R30,R14
0180 FF27 clr R31
0182 E60F add R30,R22
0184 F71F adc R31,R23
0186 2080 ldd R2,z+0
0188 CE01 movw R24,R28
018A EC2D mov R30,R12
018C FF27 clr R31
018E E80F add R30,R24
0190 F91F adc R31,R25
0192 2082 std z+0,R2
0194 .dbline 466
0194 ; Point ++;
0194 E394 inc R14
0196 .dbline 467
0196 ; if (Point == StringLong)
0196 EA14 cp R14,R10
0198 09F4 brne L34
019A X5:
019A .dbline 468
019A ; {
019A .dbline 469
019A ; Point = 0;
019A EE24 clr R14
019C .dbline 470
019C ; }
019C L34:
019C .dbline 471
019C ; }
019C L31:
019C .dbline 463
019C C394 inc R12
019E L33:
019E .dbline 463
019E 8F8D ldd R24,y+31
01A0 841B sub R24,R20
01A2 8F5F subi R24,255 ; addi 1
01A4 C816 cp R12,R24
01A6 58F3 brlo L30
01A8 X6:
01A8 .dbline 473
01A8 ;
01A8 ; for (;a < 17;a++)
01A8 08C0 xjmp L39
01AA L36:
01AA .dbline 474
01AA ; {
01AA .dbline 475
01AA ; SCREEN[a] = 0;
01AA CE01 movw R24,R28
01AC EC2D mov R30,R12
01AE FF27 clr R31
01B0 E80F add R30,R24
01B2 F91F adc R31,R25
01B4 2224 clr R2
01B6 2082 std z+0,R2
01B8 .dbline 476
01B8 ; }
01B8 L37:
01B8 .dbline 473
01B8 C394 inc R12
01BA L39:
01BA .dbline 473
01BA 8C2D mov R24,R12
01BC 8131 cpi R24,17
01BE A8F3 brlo L36
01C0 X7:
01C0 .dbline 478
01C0 ;
01C0 ; RunTimeCounter ++;
01C0 80910200 lds R24,L29
01C4 90910300 lds R25,L29+1
01C8 0196 adiw R24,1
01CA 90930300 sts L29+1,R25
01CE 80930200 sts L29,R24
01D2 .dbline 479
01D2 ; if (RunTimeCounter > LCD_RUN_STRING_SPEED)
01D2 8CE2 ldi R24,300
01D4 91E0 ldi R25,1
01D6 20900200 lds R2,L29
01DA 30900300 lds R3,L29+1
01DE 8215 cp R24,R2
01E0 9305 cpc R25,R3
01E2 78F4 brsh L40
01E4 X8:
01E4 .dbline 480
01E4 ; {
01E4 .dbline 481
01E4 ; StringHead ++;
01E4 80910100 lds R24,L28
01E8 8F5F subi R24,255 ; addi 1
01EA 80930100 sts L28,R24
01EE .dbline 482
01EE ; RunTimeCounter = 0;
01EE 2224 clr R2
01F0 3324 clr R3
01F2 30920300 sts L29+1,R3
01F6 20920200 sts L29,R2
01FA .dbline 483
01FA ; if (StringHead == StringLong)
01FA 8A15 cp R24,R10
01FC 11F4 brne L42
01FE X9:
01FE .dbline 484
01FE ; {
01FE .dbline 485
01FE ; StringHead = 0;
01FE 20920100 sts L28,R2
0202 .dbline 486
0202 ; }
0202 L42:
0202 .dbline 487
0202 ; }
0202 L40:
0202 .dbline 489
0202 ;
0202 ; LOCATE(StartX,Y)
0202 2B8D ldd R18,y+27
0204 2150 subi R18,1
0206 042F mov R16,R20
0208 0150 subi R16,1
020A 64DF xcall _LCDSetXY
020C .dbline 490
020C ; PRINT(SCREEN)
020C 8E01 movw R16,R28
020E 72DF xcall _LCDDisplayString
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -