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

📄 rd_lcd1602b.s

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