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

📄 gui12864.s

📁 3D LCD for running graphical lCDs
💻 S
📖 第 1 页 / 共 4 页
字号:
	std y+8,R24
	.dbline 199
;       draw_x2++; 
	ldd R24,y+4
	ldd R25,y+5
	adiw R24,1
	std y+5,R25
	std y+4,R24
	.dbline 200
;       draw_x3--; 
	ldd R24,y+10
	ldd R25,y+11
	sbiw R24,1
	std y+11,R25
	std y+10,R24
	.dbline 201
;       draw_y4++; 
	ldd R24,y+6
	ldd R25,y+7
	adiw R24,1
	std y+7,R25
	std y+6,R24
	.dbline 202
;       draw_y5++; 
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 203
;       draw_y6--; 
	ldd R24,y+12
	ldd R25,y+13
	sbiw R24,1
	std y+13,R25
	std y+12,R24
	.dbline 204
;       draw_y7--; 
	movw R24,R12
	sbiw R24,1
	movw R12,R24
	.dbline 207
;          
;       /* 要判断当前点是否在有效范围内 */ 
;       LcdDisplayDot(draw_x0, draw_y0, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+14
	ldd R19,y+15
	ldd R16,y+2
	ldd R17,y+3
	xcall _LcdDisplayDot
	.dbline 208
;       LcdDisplayDot(draw_x1, draw_y1, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+22
	ldd R19,y+23
	ldd R16,y+8
	ldd R17,y+9
	xcall _LcdDisplayDot
	.dbline 209
;       LcdDisplayDot(draw_x2, draw_y2, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+16
	ldd R19,y+17
	ldd R16,y+4
	ldd R17,y+5
	xcall _LcdDisplayDot
	.dbline 210
;       LcdDisplayDot(draw_x3, draw_y3, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+24
	ldd R19,y+25
	ldd R16,y+10
	ldd R17,y+11
	xcall _LcdDisplayDot
	.dbline 211
;       LcdDisplayDot(draw_x4, draw_y4, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+6
	ldd R19,y+7
	ldd R16,y+18
	ldd R17,y+19
	xcall _LcdDisplayDot
	.dbline 212
;       LcdDisplayDot(draw_x5, draw_y5, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	movw R18,R10
	ldd R16,y+20
	ldd R17,y+21
	xcall _LcdDisplayDot
	.dbline 213
;       LcdDisplayDot(draw_x6, draw_y6, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+12
	ldd R19,y+13
	ldd R16,y+26
	ldd R17,y+27
	xcall _LcdDisplayDot
	.dbline 214
;       LcdDisplayDot(draw_x7, draw_y7, color); 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	movw R18,R12
	ldd R16,y+28
	ldd R17,y+29
	xcall _LcdDisplayDot
	.dbline 215
;    } 
L40:
	.dbline 175
	cp R20,R22
	cpc R21,R23
	brge X18
	xjmp L39
X18:
X17:
	.dbline -2
L34:
	.dbline 0 ; func end
	adiw R28,30
	xjmp pop_xgsetF0FC
	.dbsym l draw_x7 28 I
	.dbsym l draw_x6 26 I
	.dbsym l draw_y3 24 I
	.dbsym l draw_y1 22 I
	.dbsym l draw_x5 20 I
	.dbsym l draw_x4 18 I
	.dbsym l draw_y2 16 I
	.dbsym l draw_y0 14 I
	.dbsym r di 14 I
	.dbsym r yy 22 I
	.dbsym r draw_y7 12 I
	.dbsym l draw_y6 12 I
	.dbsym l draw_x3 10 I
	.dbsym l draw_x1 8 I
	.dbsym r draw_y5 10 I
	.dbsym l draw_y4 6 I
	.dbsym l draw_x2 4 I
	.dbsym l draw_x0 2 I
	.dbsym r xx 20 I
	.dbsym l color 42 c
	.dbsym r r 22 c
	.dbsym r y0 10 c
	.dbsym r x0 12 c
	.dbend
	.dbfunc e GuiDrawSquare _GuiDrawSquare fV
;          color -> R20
;             y1 -> R14
;             x1 -> R10
;             y0 -> R12
;             x0 -> R22
	.even
_GuiDrawSquare::
	xcall push_xgsetF0FC
	mov R12,R18
	mov R22,R16
	sbiw R28,5
	ldd R10,y+15
	ldd R14,y+17
	ldd R20,y+19
	.dbline -1
	.dbline 230
; } 
; 
; /*****************************************
; *  FUNCTION NAME: GuiDrawSquare
; *  DESCRIPTION: Draw Square
; *  (x0,y0)----------------------------
; *     |	 	      		 		      |
; *	  |				 				  |
; *	  | 		                      |					  
; *	  |								  |
; *	  |								  |
; *      -----------------------------(x1,y1)
; /*****************************************/
; void GuiDrawSquare(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char color)
; {
	.dbline 231
;      GuiDrawLine(x0, y0, x0, y1, color);
	std y+4,R20
	std y+2,R14
	std y+0,R22
	mov R18,R12
	mov R16,R22
	xcall _GuiDrawLine
	.dbline 232
; 	 GuiDrawLine(x0, y0, x1, y0, color);
	std y+4,R20
	std y+2,R12
	std y+0,R10
	mov R18,R12
	mov R16,R22
	xcall _GuiDrawLine
	.dbline 233
; 	 GuiDrawLine(x0, y1, x1, y1, color);
	std y+4,R20
	std y+2,R14
	std y+0,R10
	mov R18,R14
	mov R16,R22
	xcall _GuiDrawLine
	.dbline 234
; 	 GuiDrawLine(x1, y0, x1, y1, color);
	std y+4,R20
	std y+2,R14
	std y+0,R10
	mov R18,R12
	mov R16,R10
	xcall _GuiDrawLine
	.dbline -2
L44:
	.dbline 0 ; func end
	adiw R28,5
	xjmp pop_xgsetF0FC
	.dbsym r color 20 c
	.dbsym r y1 14 c
	.dbsym r x1 10 c
	.dbsym r y0 12 c
	.dbsym r x0 22 c
	.dbend
	.dbfunc e GuiDisCharF3 _GuiDisCharF3 fV
;         offset -> R10
;           temp -> R20
;          color -> y+12
;           data -> R12
;              y -> R14
;              x -> R10
	.even
_GuiDisCharF3::
	xcall push_xgset30FC
	mov R14,R18
	mov R10,R16
	sbiw R28,2
	ldd R12,y+10
	.dbline -1
	.dbline 248
; }
; 
; /*****************************************
; *  FUNCTION NAME: GuiDisCharF3
; *  DESCRIPTION: Display ASCII Char
; *      ---------------------------->
; *     |	  	      x(0-20) 		      
; *	  |				 				  
; *	  | y(0-7) 		                      					  
; *	  |								  
; *	  |								  
; /*****************************************/
; void GuiDisCharF3(unsigned char x,unsigned char y,unsigned char data,unsigned char color)
; {
	.dbline 250
;     unsigned char temp,offset;
; 	offset = x * 6;		                     	  			   /* Display Place */
	ldi R24,6
	mul R24,R10
	mov R10,R0
	.dbline 251
; 	for(temp=0; temp<6; temp++)
	clr R20
	xjmp L49
L46:
	.dbline 252
; 	{
	.dbline 253
; 	    if(color == 0)
	ldd R0,y+12
	tst R0
	brne L50
X19:
	.dbline 254
; 		    LcdDisplaySeg(y,offset+temp,~font6x8[data-32][temp]);
	ldi R24,6
	mul R24,R12
	movw R2,R0
	ldi R24,<_font6x8-192
	ldi R25,>_font6x8-192
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	elpm R2,Z
	clr R3
	com R2
	com R3
	std y+1,R3
	std y+0,R2
	mov R2,R20
	clr R3
	mov R18,R10
	clr R19
	add R18,R2
	adc R19,R3
	mov R16,R14
	clr R17
	xcall _LcdDisplaySeg
	xjmp L51
L50:
	.dbline 256
; 		else
; 		    LcdDisplaySeg(y,offset+temp,font6x8[data-32][temp]);
	ldi R24,6
	mul R24,R12
	movw R2,R0
	ldi R24,<_font6x8-192
	ldi R25,>_font6x8-192
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	elpm R2,Z
	clr R3
	std y+1,R3
	std y+0,R2
	mov R2,R20
	clr R3
	mov R18,R10
	clr R19
	add R18,R2
	adc R19,R3
	mov R16,R14
	clr R17
	xcall _LcdDisplaySeg
L51:
	.dbline 257
; 	}
L47:
	.dbline 251
	inc R20
L49:
	.dbline 251
	cpi R20,6
	brsh X21
	xjmp L46
X21:
X20:
	.dbline -2
L45:
	.dbline 0 ; func end
	adiw R28,2
	xjmp pop_xgset30FC
	.dbsym r offset 10 c
	.dbsym r temp 20 c
	.dbsym l color 12 c
	.dbsym r data 12 c
	.dbsym r y 14 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e GuiDisStringF3 _GuiDisStringF3 fV
;          color -> y+11
;              p -> R10,R11
;             y0 -> R12
;             x0 -> R20
	.even
_GuiDisStringF3::
	xcall push_xgset303C
	mov R12,R18
	mov R20,R16
	sbiw R28,3
	ldd R10,y+9
	ldd R11,y+10
	.dbline -1
	.dbline 273
; }
; 
; /*****************************************
; *  FUNCTION NAME: GuiDisStringF3
; *  DESCRIPTION: Display ASCII String
; *      (x0,y0) display start place 
; *      Auto Change Line...
; *      ---------------------------->
; *     |	  	      x(0-20) 		      
; *	  |				 				  
; *	  | y(0-7) 		                      					  
; *	  |								  
; *	  |								  
; /*****************************************/
; void GuiDisStringF3(unsigned char x0,unsigned char y0,unsigned char *p,unsigned char color)
; {
	xjmp L56
L55:
	.dbline 275
; 	while(*p != 0x00)
; 	{
	.dbline 276
; 		if(x0 == 21)
	cpi R20,21
	brne L58
X22:
	.dbline 277
; 		{
	.dbline 278
; 		    x0 = 0;
	clr R20
	.dbline 279
; 			y0 = y0+1;
	inc R12
	.dbline 280
; 		}
L58:
	.dbline 281
; 		GuiDisCharF3(x0,y0,*(p++),color);
	ldd R0,y+11
	std y+2,R0
	movw R30,R10
	ld R2,Z+
	movw R10,R30
	std y+0,R2
	mov R18,R12
	mov R16,R20
	xcall _GuiDisCharF3
	.dbline 282
; 		x0++;
	inc R20
	.dbline 283
; 	}
L56:
	.dbline 274
	movw R30,R10
	ldd R2,z+0
	tst R2
	brne L55
X23:
	.dbline -2
L54:
	.dbline 0 ; func end
	adiw R28,3
	xjmp pop_xgset303C
	.dbsym l color 11 c
	.dbsym r p 10 pc
	.dbsym r y0 12 c
	.dbsym r x0 20 c
	.dbend
	.dbfunc e GuiDisLogo _GuiDisLogo fV
;              y -> R10
;          count -> R20,R21
;              x -> R22
;          color -> R12
	.even
_GuiDisLogo::
	xcall push_xgsetF03C
	mov R12,R16
	sbiw R28,2
	.dbline -1
	.dbline 292
; }
; 
; /*****************************************
; *  FUNCTION NAME: GuiDisLogo
; *  DESCRIPTION: Display One Full Screen
; *               Picture 128X64...						  
; /*****************************************/
; void GuiDisLogo(unsigned char color)
; {
	.dbline 293
;     unsigned char x=0,y=0;
	clr R22
	.dbline 293
	clr R10
	.dbline 294
; 	unsigned int count=0;
	clr R20
	clr R21
	.dbline 295
; 	for(count=0;count<128*8;count++)
	xjmp L64
L61:
	.dbline 296
; 	{
	.dbline 297
; 	    if(x ==128)
	cpi R22,128
	brne L65
X24:
	.dbline 298
; 		{
	.dbline 299
; 		    x = 0;
	clr R22
	.dbline 300
; 			y = y +1;
	inc R10
	.dbline 301
; 		}
L65:
	.dbline 302
; 		if(color == 0)
	tst R12
	brne L67
X25:
	.dbline 303
; 	        LcdDisplaySeg(y,x,~startlogo[count]);
	ldi R24,<_startlogo
	ldi R25,>_startlogo
	movw R30,R20
	add R30,R24
	adc R31,R25
	elpm R2,Z
	clr R3
	com R2
	com R3
	std y+1,R3
	std y+0,R2
	mov R18,R22
	clr R19
	mov R16,R10
	clr R17
	xcall _LcdDisplaySeg
	xjmp L68
L67:
	.dbline 305
; 		else
; 	        LcdDisplaySeg(y,x,startlogo[count]);  
	ldi R24,<_startlogo
	ldi R25,>_startlogo
	movw R30,R20
	add R30,R24
	adc R31,R25
	elpm R2,Z
	clr R3
	std y+1,R3
	std y+0,R2
	mov R18,R22
	clr R19
	mov R16,R10
	clr R17
	xcall _LcdDisplaySeg
L68:
	.dbline 306
; 		x++;	
	inc R22
	.dbline 307
; 	}
L62:
	.dbline 295
	subi R20,255  ; offset = 1
	sbci R21,255
L64:
	.dbline 295
	cpi R20,0
	ldi R30,4
	cpc R21,R30
	brlo L61
X26:
	.dbline -2
L60:
	.dbline 0 ; func end
	adiw R28,2
	xjmp pop_xgsetF03C
	.dbsym r y 10 c
	.dbsym r count 20 i
	.dbsym r x 22 c
	.dbsym r color 12 c
	.dbend
	.dbfunc e GuiDisRoolStringF3 _GuiDisRoolStringF3 fV
;          temp3 -> <dead>
;              a -> <dead>
;              n -> <dead>
;    totallength -> R14,R15
;      dislength -> y+4
;              i -> R10,R11
;     textlength -> y+2
;          temp2 -> R22,R23
;           step -> R20,R21
;          temp1 -> R12,R13
;          color -> <dead>
;              p -> y+22
;              y -> y+20
;             x1 -> y+18
;             x0 -> y+16
	.even
_GuiDisRoolStringF3::
	xcall push_arg4
	xcall push_xgsetF0FC
	sbiw R28,6
	.dbline -1
	.dbline 321
; }
; 
; /****************************************************
; *  FUNCTION NAME: GuiDisRoolStringF3
; *  DESCRIPTION: Display One Line With  Left Rolling	
; *      ---------------------------->
; *     |	  	      x(0-127) 		      
; *	  |				 				  
; *	  | y(0-7) 		                      					  
; *	  |								  
; *	  |				  
; /****************************************************/
; void GuiDisRoolStringF3(unsigned char x0,unsigned char x1,unsigned char y,unsigned char *p,unsigned char color)
; {
	.dbline 322
;     unsigned int dislength = x1 - x0 + 1;	      	   			   /* 显示区域的宽度 */
	ldd R2,y+16
	clr R3
	ldd R24,y+18
	clr R25
	sub R24,R2
	sbc R25,R3
	adiw R24,1
	std y+5,R25
	std y+4,R24
	.dbline 323
; 	unsigned int textlength=0; 	   				  				   /* 要显示内容的总段数 */
	clr R0
	clr R1
	std y+3,R1
	std y+2,R0
	.dbline 325
; 	unsigned int totallength;			                           /* 要移动的总长度 */
; 	unsigned int step=0;					      				   /* 移动长度计数 */
	clr R20
	clr R21
	xjmp L71
L70:
	.dbline 331
; 	unsigned char n;							  				   /* 字库字偏移地址 */
; 	unsigned char a;							  				   /* 字库段偏移地址 */
; 	unsigned int temp1,temp2,temp3;
; 	unsigned int i;
; 	while(*(p+textlength) != 0x00)								   /* 计算显示内容的总段数 */
; 	{
	.dbline 332
; 	    textlength++;
	ldd R24,y+2
	ldd R25,y+3
	adiw R24,1
	std y+3,R25
	std y+2,R24
	.dbline 333
; 	}
L71:
	.dbline 330
	ldd R30,y+2
	ldd R31,y+3
	ldd R0,y+22
	ldd R1,y+23
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	tst R2
	brne L70
X27:
	.dbline 334
; 	textlength = textlength*6;
	ldi R16,6
	ldi R17,0
	ldd R18,y+2
	ldd R19,y+3
	xcall empy16s
	std y+3,R17
	std y+2,R16
	.dbline 335
; 	totallength = dislength + textlength;						   /* 计算总移显示内容的长度 */
	ldd R14,y+4
	ldd R15,y+5
	movw R0,R16
	add R14,R16
	adc R15,R17
	.dbline 336
; 	for(i=0; i<totallength; i++)
	clr R10
	clr R11
	xjmp L76
L73:
	.dbline 337
; 	{
	.dbline 338
; 		step++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 339
; 		if(step <= dislength)
	ldd R0,y+4
	ldd R1,y+5
	cp R0,R20
	cpc R1,R21
	brsh X36
	xjmp L77
X36:
X28:
	.dbline 340
; 		{
	.dbline 341
; 		        for(temp1=0; temp1<step; temp1++)
	clr R12
	clr R13
	xjmp L82
L79:
	.dbline 342
; 			   {
	.dbline 343
; 			        if((temp1 +1) > textlength)
	movw R24,R12
	adiw R24,1
	ldd R0,y+2
	ldd R1,y+3
	cp R0,R24
	cpc R1,R25
	brsh L83
X29:
	.dbline 344
; 				    { 	
	.dbline 345
; 				        LcdDisplaySeg(y,x1+1-step+temp1,0x00);
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+18
	clr R19
	subi R18,255  ; offset = 1
	sbci R19,255
	sub R18,R20
	sbc R19,R21
	add R18,R12
	adc R19,R13
	ldd R16,y+20
	clr R17
	xcall _LcdDisplaySeg
	.dbline 346
; 				    }
	xjmp L84
L83:
	.dbline 348
; 					else
; 					{
	.dbline 349
; 					    LcdDisplaySeg(y,x1+1-step+temp1,font6x8[*(p + temp1 / 6) - 32][temp1 % 6]);
	ldi R18,6
	ldi R19,0
	movw R16,R12
	xcall div16u
	movw R30,R16
	ldd R0,y+22
	ldd R1,y+23
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	ldi R24,6
	mul R24,R2
	movw R2,R0
	ldi R24,<_font6x8-192
	ldi R25,>_font6x8-192
	add R2,R24
	adc R3,R25
	ldi R18,6
	ldi R19,0
	movw R16,R12
	xcall mod16u
	movw R30,R16
	add R30,R2
	adc R31,R3
	elpm R2,Z
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+18
	clr R19
	subi R18,255  ; offset = 1
	sbci R19,255
	sub R18,R20
	sbc R19,R21
	add R18,R12
	adc R19,R13
	ldd R16,y+20
	clr R17
	xcall _LcdDisplaySeg
	.dbline 350
; 						Delay10ms(10);
	ldi R16,10
	ldi R17,0
	xcall _Delay10ms
	.dbline 351
; 					} 
L84:
	.dbline 352
; 			    }
L80:
	.dbline 341
	movw R24,R12
	adiw R24,1
	movw R12,R24
L82:
	.dbline 341
	cp R12,R20
	cpc R13,R21
	brsh X37
	xjmp L79
X37:
X30:
	.dbline 353
; 		}
	xjmp L78
L77:
	.dbline 354
; 		else if(step > textlength)
	ldd R0,y+2
	ldd R1,y+3
	cp R0,R20
	cpc R1,R21
	brlo X38
	xjmp L86
X38:
X31:
	.dbline 355
; 		{
	.dbline 356
; 		    temp2 = 0;
	clr R22
	clr R23
	.dbline 357
; 			for(temp1= step - dislength; temp1<step; temp1++)
	movw R12,R20
	ldd R0,y+4
	ldd R1,y+5
	sub R12,R0
	sbc R13,R1
	xjmp L91
L88:
	.dbline 358
; 			{
	.dbline 359
; 				if((temp1 +1) > textlength)
	movw R24,R12
	adiw R24,1
	ldd R0,y+2
	ldd R1,y+3
	cp R0,R24
	cpc R1,R25
	brsh L92
X32:
	.dbline 360
; 				{	
	.dbline 361
; 				    LcdDisplaySeg(y,x0 + temp2,0x00);
	clr R2
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+16
	clr R19
	add R18,R22
	adc R19,R23
	ldd R16,y+20
	clr R17
	xcall _LcdDisplaySeg
	.dbline 362
; 				} 
	xjmp L93
L92:
	.dbline 364
; 				else
; 				{	
	.dbline 365
; 				    LcdDisplaySeg(y,x0 + temp2,font6x8[*(p + temp1 / 6) - 32][temp1 % 6]);
	ldi R18,6
	ldi R19,0
	movw R16,R12
	xcall div16u
	movw R30,R16
	ldd R0,y+22
	ldd R1,y+23
	add R30,R0
	adc R31,R1
	ldd R2,z+0
	ldi R24,6
	mul R24,R2
	movw R2,R0
	ldi R24,<_font6x8-192
	ldi R25,>_font6x8-192
	add R2,R24
	adc R3,R25
	ldi R18,6
	ldi R19,0
	movw R16,R12

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -