📄 rd_lcd1602b.s
字号:
; Point ++;
inc R14
.dbline 467
; if (Point == StringLong)
cp R14,R10
brne L34
X5:
.dbline 468
; {
.dbline 469
; Point = 0;
clr R14
.dbline 470
; }
L34:
.dbline 471
; }
L31:
.dbline 463
inc R12
L33:
.dbline 463
ldd R24,y+31
sub R24,R20
subi R24,255 ; addi 1
cp R12,R24
brlo L30
X6:
.dbline 473
;
; for (;a < 17;a++)
xjmp L39
L36:
.dbline 474
; {
.dbline 475
; SCREEN[a] = 0;
movw R24,R28
mov R30,R12
clr R31
add R30,R24
adc R31,R25
clr R2
std z+0,R2
.dbline 476
; }
L37:
.dbline 473
inc R12
L39:
.dbline 473
mov R24,R12
cpi R24,17
brlo L36
X7:
.dbline 478
;
; RunTimeCounter ++;
lds R24,L29
lds R25,L29+1
adiw R24,1
sts L29+1,R25
sts L29,R24
.dbline 479
; if (RunTimeCounter > LCD_RUN_STRING_SPEED)
ldi R24,300
ldi R25,1
lds R2,L29
lds R3,L29+1
cp R24,R2
cpc R25,R3
brsh L40
X8:
.dbline 480
; {
.dbline 481
; StringHead ++;
lds R24,L28
subi R24,255 ; addi 1
sts L28,R24
.dbline 482
; RunTimeCounter = 0;
clr R2
clr R3
sts L29+1,R3
sts L29,R2
.dbline 483
; if (StringHead == StringLong)
cp R24,R10
brne L42
X9:
.dbline 484
; {
.dbline 485
; StringHead = 0;
sts L28,R2
.dbline 486
; }
L42:
.dbline 487
; }
L40:
.dbline 489
;
; LOCATE(StartX,Y)
ldd R18,y+27
subi R18,1
mov R16,R20
subi R16,1
xcall _LCDSetXY
.dbline 490
; PRINT(SCREEN)
movw R16,R28
xcall _LCDDisplayString
.dbline -2
L27:
.dbline 0 ; func end
adiw R28,17
xcall pop_xgsetF0FC
adiw R28,2
ret
.dbsym l SCREEN 0 A[17:17]c
.dbsym r a1 12 c
.dbsym r StringLong0 10 c
.dbsym r Point0 14 c
.dbsym l EndX 31 c
.dbsym r StartX 20 c
.dbsym l Y 27 c
.dbsym r String 22 pc
.dbend
.dbfunc e StringLength _StringLength fc
; n0 -> R10
; String -> R16,R17
.even
_StringLength::
st -y,R10
.dbline -1
.dbline 500
; }
;
; /***********************************************************
; * 函数说明:字符串长度测试函数 *
; * 输入: 字符串指针 *
; * 输出: 字符串的长度 *
; * 调用函数:无 *
; ***********************************************************/
; char StringLength(char *String)
; {
.dbline 501
; char n = 0;
clr R10
xjmp L46
L45:
.dbline 503
; while (*String)
; {
.dbline 504
; n++;
inc R10
.dbline 505
; String ++;
subi R16,255 ; offset = 1
sbci R17,255
.dbline 506
; }
L46:
.dbline 502
movw R30,R16
ldd R2,z+0
tst R2
brne L45
X10:
.dbline 508
;
; return n;
mov R16,R10
.dbline -2
L44:
.dbline 0 ; func end
ld R10,y+
ret
.dbsym r n0 10 c
.dbsym r String 16 pc
.dbend
.dbfunc e Flash _Flash fV
; a1 -> R20
; StringLong0 -> R12
; Y -> R10
; X -> R22
; Icon -> R14
; String -> R20,R21
.even
_Flash::
xcall push_xgsetF0FC
mov R14,R18
movw R20,R16
ldd R22,y+10
ldd R10,y+12
.dbline -1
.dbline 518
; }
;
; /***********************************************************
; * 函数说明:闪烁显示函数 *
; * 输入: 要显示的字符串、显示的光标、x,y坐标位置 *
; * 输出: 无 *
; * 调用函数:LOCATE() LCDWaitForReady() LCDSendData() *
; ***********************************************************/
; void Flash(char *String,char Icon,char X,char Y)
; {
.dbline 519
; char a = 0;
.dbline 520
; char StringLong = StringLength(String);
movw R16,R20
xcall _StringLength
mov R12,R16
.dbline 522
;
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_TIME_OUT)
ldi R24,511
ldi R25,1
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R31,3
cp R24,R30
cpc R25,R31
brsh L49
X11:
.dbline 524
; > (LCD_FLASH_TIME_OUT >> 1))
; {
.dbline 525
; LOCATE(X,Y)
mov R18,R10
subi R18,1
mov R16,R22
subi R16,1
xcall _LCDSetXY
.dbline 526
; PRINT(String)
movw R16,R20
xcall _LCDDisplayString
.dbline 527
; }
xjmp L50
L49:
.dbline 529
; else
; {
.dbline 530
; for (a = X;a < (X+StringLong);a++)
mov R20,R22
xjmp L54
L51:
.dbline 531
; {
.dbline 532
; LOCATE(a,Y)
mov R18,R10
subi R18,1
mov R16,R20
subi R16,1
xcall _LCDSetXY
.dbline 533
; LCDWaitForReady();
xcall _LCDWaitForReady
.dbline 534
; LCDSendData(Icon);
mov R16,R14
xcall _LCDSendData
.dbline 535
; }
L52:
.dbline 530
inc R20
L54:
.dbline 530
mov R2,R22
add R2,R12
cp R20,R2
brlo L51
X12:
.dbline 536
; }
L50:
.dbline -2
L48:
.dbline 0 ; func end
xjmp pop_xgsetF0FC
.dbsym r a1 20 c
.dbsym r StringLong0 12 c
.dbsym r Y 10 c
.dbsym r X 22 c
.dbsym r Icon 14 c
.dbsym r String 20 pc
.dbend
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
L56:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
L57:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
.area text(rom, con, rel)
.dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_LCD1602B.c
.dbfunc e FlashStringGroup _FlashStringGroup fV
.dbsym s DispState L57 c
.dbsym s Pictures L56 c
; Y -> y+6
; X -> y+4
; StringCounter -> R12
; String -> R10,R11
.even
_FlashStringGroup::
xcall push_xgset003C
mov R12,R18
movw R10,R16
.dbline -1
.dbline 546
; }
;
; /***********************************************************
; * 函数说明:字幕GIF函数 *
; * 输入: 要显示的字符串集合指针,字符串数目,位置 *
; * 输出: 无 *
; * 调用函数:LOCATE() PRINT() *
; ***********************************************************/
; void FlashStringGroup(char String[][17],char StringCounter,char X,char Y)
; {
.dbline 549
; static char Pictures = 0;
; static char DispState = 0;
; if ((SYS_TIMER_MS_ADD_UNTILL_OVF & LCD_FLASH_STRING_GROUP_TIME_OUT)
ldi R24,511
ldi R25,1
lds R30,_g_wSystemTimer
lds R31,_g_wSystemTimer+1
andi R31,3
cp R24,R30
cpc R25,R31
brsh L58
X13:
.dbline 551
; > (LCD_FLASH_STRING_GROUP_TIME_OUT >> 1))
; {
.dbline 552
; if (DispState == 0)
lds R2,L57
tst R2
brne L59
X14:
.dbline 553
; {
.dbline 554
; Pictures ++;
lds R24,L56
subi R24,255 ; addi 1
sts L56,R24
.dbline 555
; if (Pictures == StringCounter)
cp R24,R12
brne L62
X15:
.dbline 556
; {
.dbline 557
; Pictures = 0;
clr R2
sts L56,R2
.dbline 558
; }
L62:
.dbline 559
; DispState = 1;
ldi R24,1
sts L57,R24
.dbline 560
; }
.dbline 561
; }
xjmp L59
L58:
.dbline 563
; else
; {
.dbline 564
; if (DispState == 1)
lds R24,L57
cpi R24,1
brne L64
X16:
.dbline 565
; {
.dbline 566
; Pictures ++;
lds R24,L56
subi R24,255 ; addi 1
sts L56,R24
.dbline 567
; if (Pictures == StringCounter)
cp R24,R12
brne L66
X17:
.dbline 568
; {
.dbline 569
; Pictures = 0;
clr R2
sts L56,R2
.dbline 570
; }
L66:
.dbline 571
; DispState = 0;
clr R2
sts L57,R2
.dbline 572
; }
L64:
.dbline 573
; }
L59:
.dbline 575
;
; LOCATE(X,Y);
ldd R18,y+6
subi R18,1
ldd R16,y+4
subi R16,1
xcall _LCDSetXY
.dbline 575
.dbline 576
; PRINT(String[Pictures]);
lds R2,L56
ldi R24,17
mul R24,R2
movw R16,R0
add R16,R10
adc R17,R11
xcall _LCDDisplayString
.dbline 576
.dbline -2
L55:
.dbline 0 ; func end
xjmp pop_xgset003C
.dbsym l Y 6 c
.dbsym l X 4 c
.dbsym r StringCounter 12 c
.dbsym r String 10 pA[17:17]c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -