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

📄 rd_lcd1602b.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 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 + -