📄 rd_lcd1602b.lis
字号:
0210 .dbline -2
0210 L27:
0210 .dbline 0 ; func end
0210 6196 adiw R28,17
0212 0E940000 xcall pop_xgsetF0FC
0216 2296 adiw R28,2
0218 0895 ret
021A .dbsym l SCREEN 0 A[17:17]c
021A .dbsym r a1 12 c
021A .dbsym r StringLong0 10 c
021A .dbsym r Point0 14 c
021A .dbsym l EndX 31 c
021A .dbsym r StartX 20 c
021A .dbsym l Y 27 c
021A .dbsym r String 22 pc
021A .dbend
021A .dbfunc e StringLength _StringLength fc
021A ; n0 -> R10
021A ; String -> R16,R17
.even
021A _StringLength::
021A AA92 st -y,R10
021C .dbline -1
021C .dbline 500
021C ; }
021C ;
021C ; /***********************************************************
021C ; * 函数说明:字符串长度测试函数 *
021C ; * 输入: 字符串指针 *
021C ; * 输出: 字符串的长度 *
021C ; * 调用函数:无 *
021C ; ***********************************************************/
021C ; char StringLength(char *String)
021C ; {
021C .dbline 501
021C ; char n = 0;
021C AA24 clr R10
021E 03C0 xjmp L46
0220 L45:
0220 .dbline 503
0220 ; while (*String)
0220 ; {
0220 .dbline 504
0220 ; n++;
0220 A394 inc R10
0222 .dbline 505
0222 ; String ++;
0222 0F5F subi R16,255 ; offset = 1
0224 1F4F sbci R17,255
0226 .dbline 506
0226 ; }
0226 L46:
0226 .dbline 502
0226 F801 movw R30,R16
0228 2080 ldd R2,z+0
022A 2220 tst R2
022C C9F7 brne L45
022E X10:
022E .dbline 508
022E ;
022E ; return n;
022E 0A2D mov R16,R10
0230 .dbline -2
0230 L44:
0230 .dbline 0 ; func end
0230 A990 ld R10,y+
0232 0895 ret
0234 .dbsym r n0 10 c
0234 .dbsym r String 16 pc
0234 .dbend
0234 .dbfunc e Flash _Flash fV
0234 ; a1 -> R20
0234 ; StringLong0 -> R12
0234 ; Y -> R10
0234 ; X -> R22
0234 ; Icon -> R14
0234 ; String -> R20,R21
.even
0234 _Flash::
0234 0E940000 xcall push_xgsetF0FC
0238 E22E mov R14,R18
023A A801 movw R20,R16
023C 6A85 ldd R22,y+10
023E AC84 ldd R10,y+12
0240 .dbline -1
0240 .dbline 518
0240 ; }
0240 ;
0240 ; /***********************************************************
0240 ; * 函数说明:闪烁显示函数 *
0240 ; * 输入: 要显示的字符串、显示的光标、x,y坐标位置 *
0240 ; * 输出: 无 *
0240 ; * 调用函数:LOCATE() LCDWaitForReady() LCDSendData() *
0240 ; ***********************************************************/
0240 ; void Flash(char *String,char Icon,char X,char Y)
0240 ; {
0240 .dbline 519
0240 ; char a = 0;
0240 .dbline 520
0240 ; char StringLong = StringLength(String);
0240 8A01 movw R16,R20
0242 EBDF xcall _StringLength
0244 C02E mov R12,R16
0246 .dbline 522
0246 ;
0246 ; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_TIME_OUT)
0246 8FEF ldi R24,511
0248 91E0 ldi R25,1
024A E0910000 lds R30,_g_wSystemTimer
024E F0910100 lds R31,_g_wSystemTimer+1
0252 F370 andi R31,3
0254 8E17 cp R24,R30
0256 9F07 cpc R25,R31
0258 40F4 brsh L49
025A X11:
025A .dbline 524
025A ; > (LCD_FLASH_TIME_OUT >> 1))
025A ; {
025A .dbline 525
025A ; LOCATE(X,Y)
025A 2A2D mov R18,R10
025C 2150 subi R18,1
025E 062F mov R16,R22
0260 0150 subi R16,1
0262 38DF xcall _LCDSetXY
0264 .dbline 526
0264 ; PRINT(String)
0264 8A01 movw R16,R20
0266 46DF xcall _LCDDisplayString
0268 .dbline 527
0268 ; }
0268 0FC0 xjmp L50
026A L49:
026A .dbline 529
026A ; else
026A ; {
026A .dbline 530
026A ; for (a = X;a < (X+StringLong);a++)
026A 462F mov R20,R22
026C 09C0 xjmp L54
026E L51:
026E .dbline 531
026E ; {
026E .dbline 532
026E ; LOCATE(a,Y)
026E 2A2D mov R18,R10
0270 2150 subi R18,1
0272 042F mov R16,R20
0274 0150 subi R16,1
0276 2EDF xcall _LCDSetXY
0278 .dbline 533
0278 ; LCDWaitForReady();
0278 29DF xcall _LCDWaitForReady
027A .dbline 534
027A ; LCDSendData(Icon);
027A 0E2D mov R16,R14
027C 0DDF xcall _LCDSendData
027E .dbline 535
027E ; }
027E L52:
027E .dbline 530
027E 4395 inc R20
0280 L54:
0280 .dbline 530
0280 262E mov R2,R22
0282 2C0C add R2,R12
0284 4215 cp R20,R2
0286 98F3 brlo L51
0288 X12:
0288 .dbline 536
0288 ; }
0288 L50:
0288 .dbline -2
0288 L48:
0288 .dbline 0 ; func end
0288 0C940000 xjmp pop_xgsetF0FC
028C .dbsym r a1 20 c
028C .dbsym r StringLong0 12 c
028C .dbsym r Y 10 c
028C .dbsym r X 22 c
028C .dbsym r Icon 14 c
028C .dbsym r String 20 pc
028C .dbend
.area data(ram, con, rel)
0004 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
0004 L56:
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
0005 L57:
0005 .blkb 1
.area idata
0005 00 .byte 0
.area data(ram, con, rel)
0006 .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
.area text(rom, con, rel)
028C .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
028C .dbfunc e FlashStringGroup _FlashStringGroup fV
028C .dbsym s DispState L57 c
028C .dbsym s Pictures L56 c
028C ; Y -> y+6
028C ; X -> y+4
028C ; StringCounter -> R12
028C ; String -> R10,R11
.even
028C _FlashStringGroup::
028C 0E940000 xcall push_xgset003C
0290 C22E mov R12,R18
0292 5801 movw R10,R16
0294 .dbline -1
0294 .dbline 546
0294 ; }
0294 ;
0294 ; /***********************************************************
0294 ; * 函数说明:字幕GIF函数 *
0294 ; * 输入: 要显示的字符串集合指针,字符串数目,位置 *
0294 ; * 输出: 无 *
0294 ; * 调用函数:LOCATE() PRINT() *
0294 ; ***********************************************************/
0294 ; void FlashStringGroup(char String[][17],char StringCounter,char X,char Y)
0294 ; {
0294 .dbline 549
0294 ; static char Pictures = 0;
0294 ; static char DispState = 0;
0294 ; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_STRING_GROUP_TIME_OUT)
0294 8FEF ldi R24,511
0296 91E0 ldi R25,1
0298 E0910000 lds R30,_g_wSystemTimer
029C F0910100 lds R31,_g_wSystemTimer+1
02A0 F370 andi R31,3
02A2 8E17 cp R24,R30
02A4 9F07 cpc R25,R31
02A6 90F4 brsh L58
02A8 X13:
02A8 .dbline 551
02A8 ; > (LCD_FLASH_STRING_GROUP_TIME_OUT >> 1))
02A8 ; {
02A8 .dbline 552
02A8 ; if (DispState == 0)
02A8 20900500 lds R2,L57
02AC 2220 tst R2
02AE F9F4 brne L59
02B0 X14:
02B0 .dbline 553
02B0 ; {
02B0 .dbline 554
02B0 ; Pictures ++;
02B0 80910400 lds R24,L56
02B4 8F5F subi R24,255 ; addi 1
02B6 80930400 sts L56,R24
02BA .dbline 555
02BA ; if (Pictures == StringCounter)
02BA 8C15 cp R24,R12
02BC 19F4 brne L62
02BE X15:
02BE .dbline 556
02BE ; {
02BE .dbline 557
02BE ; Pictures = 0;
02BE 2224 clr R2
02C0 20920400 sts L56,R2
02C4 .dbline 558
02C4 ; }
02C4 L62:
02C4 .dbline 559
02C4 ; DispState = 1;
02C4 81E0 ldi R24,1
02C6 80930500 sts L57,R24
02CA .dbline 560
02CA ; }
02CA .dbline 561
02CA ; }
02CA 11C0 xjmp L59
02CC L58:
02CC .dbline 563
02CC ; else
02CC ; {
02CC .dbline 564
02CC ; if (DispState == 1)
02CC 80910500 lds R24,L57
02D0 8130 cpi R24,1
02D2 69F4 brne L64
02D4 X16:
02D4 .dbline 565
02D4 ; {
02D4 .dbline 566
02D4 ; Pictures ++;
02D4 80910400 lds R24,L56
02D8 8F5F subi R24,255 ; addi 1
02DA 80930400 sts L56,R24
02DE .dbline 567
02DE ; if (Pictures == StringCounter)
02DE 8C15 cp R24,R12
02E0 19F4 brne L66
02E2 X17:
02E2 .dbline 568
02E2 ; {
02E2 .dbline 569
02E2 ; Pictures = 0;
02E2 2224 clr R2
02E4 20920400 sts L56,R2
02E8 .dbline 570
02E8 ; }
02E8 L66:
02E8 .dbline 571
02E8 ; DispState = 0;
02E8 2224 clr R2
02EA 20920500 sts L57,R2
02EE .dbline 572
02EE ; }
02EE L64:
02EE .dbline 573
02EE ; }
02EE L59:
02EE .dbline 575
02EE ;
02EE ; LOCATE(X,Y);
02EE 2E81 ldd R18,y+6
02F0 2150 subi R18,1
02F2 0C81 ldd R16,y+4
02F4 0150 subi R16,1
02F6 EEDE xcall _LCDSetXY
02F8 .dbline 575
02F8 .dbline 576
02F8 ; PRINT(String[Pictures]);
02F8 20900400 lds R2,L56
02FC 81E1 ldi R24,17
02FE 829D mul R24,R2
0300 8001 movw R16,R0
0302 0A0D add R16,R10
0304 1B1D adc R17,R11
0306 F6DE xcall _LCDDisplayString
0308 .dbline 576
0308 .dbline -2
0308 L55:
0308 .dbline 0 ; func end
0308 0C940000 xjmp pop_xgset003C
030C .dbsym l Y 6 c
030C .dbsym l X 4 c
030C .dbsym r StringCounter 12 c
030C .dbsym r String 10 pA[17:17]c
030C .dbend
030C ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -