📄 rd_lcd1602b.lis
字号:
.even
01A2 _LCDDisplayString::
01A2 4A93 st -y,R20
01A4 5A93 st -y,R21
01A6 A801 movw R20,R16
01A8 .dbline -1
01A8 .dbline 445
01A8 ; }
01A8 ;
01A8 ; /***********************************************************
01A8 ; * 函数说明:LCD字符串显示函数 *
01A8 ; * 输入: 要显示的字符串指针 *
01A8 ; * 输出: 无 *
01A8 ; * 调用函数:LCDWaitForReady() LCDSendData() *
01A8 ; ***********************************************************/
01A8 ; void LCDDisplayString(UINT8 *String)
01A8 ; {
01A8 06C0 rjmp L23
01AA L22:
01AA .dbline 447
01AA ; while(*String)
01AA ; {
01AA .dbline 448
01AA ; LCDWaitForReady();
01AA CFDF rcall _LCDWaitForReady
01AC .dbline 449
01AC ; LCDSendData(*String);
01AC FA01 movw R30,R20
01AE 0081 ldd R16,z+0
01B0 91DF rcall _LCDSendData
01B2 .dbline 450
01B2 ; String++;
01B2 4F5F subi R20,255 ; offset = 1
01B4 5F4F sbci R21,255
01B6 .dbline 451
01B6 ; }
01B6 L23:
01B6 .dbline 446
01B6 FA01 movw R30,R20
01B8 2080 ldd R2,z+0
01BA 2220 tst R2
01BC B1F7 brne L22
01BE X4:
01BE .dbline -2
01BE L21:
01BE .dbline 0 ; func end
01BE 5991 ld R21,y+
01C0 4991 ld R20,y+
01C2 0895 ret
01C4 .dbsym r String 20 pc
01C4 .dbend
01C4 .dbfunc e LCDDisplayNum _LCDDisplayNum fV
01C4 ; a1 -> R20
01C4 ; BitCount -> y+5
01C4 ; Num -> y+1
.even
01C4 _LCDDisplayNum::
01C4 00D0 rcall push_arg4
01C6 4A93 st -y,R20
01C8 .dbline -1
01C8 .dbline 461
01C8 ; }
01C8 ;
01C8 ; /***********************************************************
01C8 ; * 函数说明:数值显示函数(HEX) *
01C8 ; * 输入: 需要显示的数字(无符号长整形) *
01C8 ; * 输出: 无 *
01C8 ; * 调用函数:LCDSendData() *
01C8 ; ***********************************************************/
01C8 ; void LCDDisplayNum(unsigned long Num,UINT8 BitCount)
01C8 ; {
01C8 .dbline 462
01C8 ; UINT8 a = 0;
01C8 .dbline 463
01C8 ; for (a = 8-BitCount ;a<8;a++)
01C8 48E0 ldi R20,8
01CA 0D80 ldd R0,y+5
01CC 4019 sub R20,R0
01CE 18C0 rjmp L29
01D0 L26:
01D0 .dbline 464
01D0 ; {
01D0 .dbline 465
01D0 ; LCDSendData(CHR[(Num<<(a<<2))>>28]);
01D0 242E mov R2,R20
01D2 3324 clr R3
01D4 220C lsl R2
01D6 331C rol R3
01D8 220C lsl R2
01DA 331C rol R3
01DC 0981 ldd R16,y+1
01DE 1A81 ldd R17,y+2
01E0 2B81 ldd R18,y+3
01E2 3C81 ldd R19,y+4
01E4 2A92 st -y,R2
01E6 00D0 rcall lsl32
01E8 8CE1 ldi R24,28
01EA 90E0 ldi R25,0
01EC 8A93 st -y,R24
01EE 00D0 rcall lsr32
01F0 F801 movw R30,R16
01F2 80E0 ldi R24,<_CHR
01F4 90E0 ldi R25,>_CHR
01F6 E80F add R30,R24
01F8 F91F adc R31,R25
01FA 0081 ldd R16,z+0
01FC 6BDF rcall _LCDSendData
01FE .dbline 466
01FE ; }
01FE L27:
01FE .dbline 463
01FE 4395 inc R20
0200 L29:
0200 .dbline 463
0200 4830 cpi R20,8
0202 30F3 brlo L26
0204 X5:
0204 .dbline -2
0204 L25:
0204 .dbline 0 ; func end
0204 4991 ld R20,y+
0206 2496 adiw R28,4
0208 0895 ret
020A .dbsym r a1 20 c
020A .dbsym l BitCount 5 c
020A .dbsym l Num 1 l
020A .dbend
020A .dbfunc e RunString _RunString fV
020A ; EndX -> R3
020A ; StartX -> R2
020A ; Y -> R1
020A ; String -> R0,R1
.even
020A _RunString::
020A .dbline -1
020A .dbline 477
020A ; }
020A ;
020A ;
020A ; /***********************************************************
020A ; * 函数说明:滚屏字幕效果 *
020A ; * 输入: 需要滚屏的字符串 长度 位置 *
020A ; * 输出: 无 *
020A ; * 调用函数:LOCATE() PRINT() *
020A ; ***********************************************************/
020A ; void RunString(UINT8 *String,UINT8 Y,UINT8 StartX,UINT8 EndX)
020A ; {
020A .dbline -2
020A L30:
020A .dbline 0 ; func end
020A 0895 ret
020C .dbend
020C .dbfunc e StringLength _StringLength fc
020C ; n0 -> R10
020C ; String -> R16,R17
.even
020C _StringLength::
020C AA92 st -y,R10
020E .dbline -1
020E .dbline 523
020E ; /*
020E ; static UINT8 StringHead = 0;
020E ; UINT8 SCREEN[17];
020E ; UINT8 a = 0;
020E ; UINT8 Point = StringHead;
020E ; UINT8 StringLong = StringLength(String);
020E ; static UINT16 RunTimeCounter = 0;
020E ;
020E ; for (a = 0;a<EndX - StartX + 1;a++)
020E ; {
020E ; SCREEN[a] = String[Point];
020E ; Point ++;
020E ; if (Point == StringLong)
020E ; {
020E ; Point = 0;
020E ; }
020E ; }
020E ;
020E ; for (;a < 17;a++)
020E ; {
020E ; SCREEN[a] = 0;
020E ; }
020E ;
020E ; RunTimeCounter ++;
020E ; if (RunTimeCounter > LCD_RUN_STRING_SPEED)
020E ; {
020E ; StringHead ++;
020E ; RunTimeCounter = 0;
020E ; if (StringHead == StringLong)
020E ; {
020E ; StringHead = 0;
020E ; }
020E ; }
020E ;
020E ; LOCATE(StartX,Y)
020E ; PRINT(SCREEN)*/
020E ; }
020E ;
020E ; /***********************************************************
020E ; * 函数说明:字符串长度测试函数 *
020E ; * 输入: 字符串指针 *
020E ; * 输出: 字符串的长度 *
020E ; * 调用函数:无 *
020E ; ***********************************************************/
020E ; UINT8 StringLength(UINT8 *String)
020E ; {
020E .dbline 524
020E ; UINT8 n = 0;
020E AA24 clr R10
0210 03C0 rjmp L33
0212 L32:
0212 .dbline 526
0212 ; while (*String)
0212 ; {
0212 .dbline 527
0212 ; n++;
0212 A394 inc R10
0214 .dbline 528
0214 ; String ++;
0214 0F5F subi R16,255 ; offset = 1
0216 1F4F sbci R17,255
0218 .dbline 529
0218 ; }
0218 L33:
0218 .dbline 525
0218 F801 movw R30,R16
021A 2080 ldd R2,z+0
021C 2220 tst R2
021E C9F7 brne L32
0220 X6:
0220 .dbline 531
0220 ;
0220 ; return n;
0220 0A2D mov R16,R10
0222 .dbline -2
0222 L31:
0222 .dbline 0 ; func end
0222 A990 ld R10,y+
0224 0895 ret
0226 .dbsym r n0 10 c
0226 .dbsym r String 16 pc
0226 .dbend
.area lit(rom, con, rel)
0000 L36:
0000 00 .byte 0
0001 000000000000000000 .byte 0,0,0,0,0,0,0,0,0
.area text(rom, con, rel)
0226 .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_LCD1602B.c
0226 .dbfunc e PrintD _PrintD fV
0226 ; cTempBuff -> y+5
0226 ; n3 -> R22
0226 ; bIfFindFirstNoneZeroNumber1 -> R20
0226 ; n1 -> R20
0226 ; wTempNumber0 -> y+1
0226 ; chCounter -> R22
0226 ; nNumber -> y+25
.even
0226 _PrintD::
0226 00D0 rcall push_arg4
0228 00D0 rcall push_xgsetF00C
022A 6397 sbiw R28,19
022C 6D8D ldd R22,y+29
022E .dbline -1
022E .dbline 612
022E ; }
022E ;
022E ; /***********************************************************
022E ; * 函数说明:闪烁显示函数 *
022E ; * 输入: 要显示的字符串、显示的光标、x,y坐标位置 *
022E ; * 输出: 无 *
022E ; * 调用函数:LOCATE() LCDWaitForReady() LCDSendData() *
022E ; ***********************************************************/
022E ; /*
022E ; void Flash(UINT8 *String,UINT8 Icon,UINT8 X,UINT8 Y)
022E ; {
022E ; UINT8 a = 0;
022E ; UINT8 StringLong = StringLength(String);
022E ;
022E ; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_TIME_OUT)
022E ; > (LCD_FLASH_TIME_OUT >> 1))
022E ; {
022E ; LOCATE(X,Y)
022E ; PRINT(String)
022E ; }
022E ; else
022E ; {
022E ; for (a = X;a < (X+StringLong);a++)
022E ; {
022E ; LOCATE(a,Y)
022E ; LCDWaitForReady();
022E ; LCDSendData(Icon);
022E ; }
022E ; }
022E ; }*/
022E ;
022E ; /***********************************************************
022E ; * 函数说明:字幕GIF函数 *
022E ; * 输入: 要显示的字符串集合指针,字符串数目,位置 *
022E ; * 输出: 无 *
022E ; * 调用函数:LOCATE() PRINT() *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -