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

📄 3dtesting.s

📁 3D LCD for running graphical lCDs
💻 S
📖 第 1 页 / 共 4 页
字号:
; 	if(x>127 | y>63)
	ldi R24,127
	cp R24,R12
	brsh L45
X16:
	ldi R22,1
	ldi R23,0
	xjmp L46
L45:
	clr R22
	clr R23
L46:
	ldi R24,63
	cp R24,R10
	brsh L47
X17:
	ldi R20,1
	ldi R21,0
	xjmp L48
L47:
	clr R20
	clr R21
L48:
	movw R2,R22
	or R2,R20
	or R3,R21
	tst R2
	brne X18
	tst R3
	breq L43
X18:
	.dbline 138
; 	    return;
	xjmp L42
L43:
	.dbline 139
; 	temp1 = y / 8;			  	 			   /* GET VALUE OF WHICH PAGE */
	mov R14,R10
	lsr R14
	lsr R14
	lsr R14
	.dbline 140
;     temp2 = y % 8;                             /* GET VALUE OF WHICH Y-OFFSET */
	ldi R17,8
	mov R16,R10
	xcall mod8u
	mov R20,R16
	.dbline 141
; 	a = displaybuffer[temp1][x];			       /* READ NOW SEGMENT VALUE */
	ldi R24,128
	mul R24,R14
	movw R2,R0
	ldi R24,<_displaybuffer
	ldi R25,>_displaybuffer
	add R2,R24
	adc R3,R25
	mov R30,R12
	clr R31
	add R30,R2
	adc R31,R3
	ldd R10,z+0
	.dbline 143
; 	
; 	if(color == 0)						           /* DOT ON/OFF */
	ldd R0,y+10
	tst R0
	brne L49
X19:
	.dbline 144
; 		a&=~(1<<temp2);
	ldi R16,1
	mov R17,R20
	xcall lsl8
	mov R2,R16
	com R2
	and R10,R2
	xjmp L50
L49:
	.dbline 146
; 	else
; 	    a|=(1<<temp2);
	ldi R16,1
	mov R17,R20
	xcall lsl8
	or R10,R16
L50:
	.dbline 148
; 		
;    displaybuffer[temp1][x] = a;                     /* WRITE SEGMENT */
	ldi R24,128
	mul R24,R14
	movw R2,R0
	ldi R24,<_displaybuffer
	ldi R25,>_displaybuffer
	add R2,R24
	adc R3,R25
	mov R30,R12
	clr R31
	add R30,R2
	adc R31,R3
	std z+0,R10
	.dbline -2
L42:
	.dbline 0 ; func end
	xjmp pop_xgsetF0FC
	.dbsym r temp2 20 c
	.dbsym r a 10 c
	.dbsym r temp1 14 c
	.dbsym l color 10 c
	.dbsym r y 10 c
	.dbsym r x 12 c
	.dbend
	.dbfunc e DisplyLine _DisplyLine fV
;          signy -> R14
;          signx -> R12
;             dy -> R22,R23
;             dx -> y+3
;           temp -> R20
;              y -> y+2
;              x -> y+1
;              p -> R10,R11
;          color -> y+23
;             y2 -> y+21
;             x2 -> y+19
;             y1 -> R10
;             x1 -> y+15
	.even
_DisplyLine::
	xcall push_arg4
	xcall push_xgsetF0FC
	mov R10,R18
	sbiw R28,5
	.dbline -1
	.dbline 156
; }
; 
; /***************************************
; *  FUNCTION NAME: DisplyLine
; *  DESCRIPTION: 
; /***************************************/
; void DisplyLine(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,unsigned char color)
; {
	.dbline 165
;     unsigned char temp;
; 	int p;	   		 	 		 	 		 /* p-取值判断因子 */
; 	unsigned char x;						 /* x-坐标 */
; 	unsigned char y;						 /* y-坐标 */
; 	int dx;						             /* x方向差值 */
; 	int dy;						             /* y方向差值 */
; 	char signx;	  							 /* x方向标识 */
; 	char signy;								 /* Y方向标识 */
; 	if(x1>123 | y1>63 | x2>123 | y2>63)
	ldi R24,123
	ldd R0,y+15
	cp R24,R0
	brsh L54
X20:
	ldi R24,1
	ldi R25,0
	movw R14,R24
	xjmp L55
L54:
	clr R14
	clr R15
L55:
	ldi R24,63
	cp R24,R10
	brsh L56
X21:
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L57
L56:
	clr R12
	clr R13
L57:
	ldi R24,123
	ldd R0,y+19
	cp R24,R0
	brsh L58
X22:
	ldi R22,1
	ldi R23,0
	xjmp L59
L58:
	clr R22
	clr R23
L59:
	ldi R24,63
	ldd R0,y+21
	cp R24,R0
	brsh L60
X23:
	ldi R20,1
	ldi R21,0
	xjmp L61
L60:
	clr R20
	clr R21
L61:
	movw R2,R14
	or R2,R12
	or R3,R13
	or R2,R22
	or R3,R23
	or R2,R20
	or R3,R21
	tst R2
	brne X24
	tst R3
	breq L52
X24:
	.dbline 166
; 	    return;
	xjmp L51
L52:
	.dbline 167
; 	x = x1;
	ldd R0,y+15
	std y+1,R0
	.dbline 168
; 	y = y1;
	std y+2,R10
	.dbline 170
; 	 /* 1.计算X方向的参数 */
; 	if(x2 > x1)								
	ldd R2,y+15
	clr R3
	ldd R4,y+19
	clr R5
	cp R2,R4
	cpc R3,R5
	brge L62
X25:
	.dbline 171
; 	{
	.dbline 172
; 	    dx = x2 - x1;	
	clr R3
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+4,R5
	std y+3,R4
	.dbline 173
; 		signx = 1;					 
	clr R12
	inc R12
	.dbline 174
; 	}
	xjmp L63
L62:
	.dbline 175
; 	else if(x2 < x1)
	ldd R0,y+19
	ldd R16,y+15
	cp R0,R16
	brsh L64
X26:
	.dbline 176
; 	{
	.dbline 177
; 	    dx = x1 - x2;	
	mov R2,R0
	clr R3
	mov R4,R16
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+4,R5
	std y+3,R4
	.dbline 178
; 		signx = -1;					 
	ldi R24,255
	mov R12,R24
	.dbline 179
; 	}
	xjmp L65
L64:
	.dbline 181
; 	else
; 	{
	.dbline 182
; 	    dx = 0;	
	clr R0
	clr R1
	std y+4,R1
	std y+3,R0
	.dbline 183
; 		signx = 0;					 
	clr R12
	.dbline 184
; 	}
L65:
L63:
	.dbline 186
; 	 /* 2.计算Y方向的参数 */
; 	if(y2 > y1)								
	mov R2,R10
	clr R3
	ldd R4,y+21
	clr R5
	cp R2,R4
	cpc R3,R5
	brge L66
X27:
	.dbline 187
; 	{
	.dbline 188
; 	    dy = y2 - y1;	
	clr R3
	mov R22,R4
	clr R23
	sub R22,R2
	sbc R23,R3
	.dbline 189
; 		signy = 1;					 
	clr R14
	inc R14
	.dbline 190
; 	}
	xjmp L67
L66:
	.dbline 191
; 	else if(y2 < y1)
	ldd R0,y+21
	cp R0,R10
	brsh L68
X28:
	.dbline 192
; 	{
	.dbline 193
; 	    dy = y1 - y2;	
	mov R2,R0
	clr R3
	mov R22,R10
	clr R23
	sub R22,R2
	sbc R23,R3
	.dbline 194
; 		signy = -1;					 
	ldi R24,255
	mov R14,R24
	.dbline 195
; 	}
	xjmp L69
L68:
	.dbline 197
; 	else
; 	{
	.dbline 198
; 	    dy = 0;	
	clr R22
	clr R23
	.dbline 199
; 		signy = 0;
	clr R14
	.dbline 200
; 	}
L69:
L67:
	.dbline 202
; 	/* 3.计算首个判断因子 */
; 	p = 2*dy -dx;	
	movw R10,R22
	lsl R10
	rol R11
	ldd R0,y+3
	ldd R1,y+4
	sub R10,R0
	sbc R11,R1
	.dbline 204
;     /* 4a.以X方向增长画图 */				 		 
; 	if(dx >= dy)								
	cp R0,R22
	cpc R1,R23
	brlt L70
X29:
	.dbline 205
; 	{
	.dbline 206
; 		for(temp=0; temp<dx; temp++)
	clr R20
	xjmp L75
L72:
	.dbline 207
; 		{
	.dbline 208
; 	         WriteDot(x,y,color);		/* 画点 */
	ldd R0,y+23
	std y+0,R0
	ldd R18,y+2
	ldd R16,y+1
	xcall _WriteDot
	.dbline 209
; 			if(p >= 0)						/* 根据P来判断画哪一点 */
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L76
X30:
	.dbline 210
; 			{
	.dbline 211
; 			    x = x + signx;
	ldd R0,y+1
	add R0,R12
	std y+1,R0
	.dbline 212
; 				y = y + signy;
	ldd R0,y+2
	add R0,R14
	std y+2,R0
	.dbline 213
; 				p = p + 2*(dy - dx);		/* dy,dx需要定义定义成有符号的,才能得到正确的值 */
	movw R2,R22
	ldd R0,y+3
	ldd R1,y+4
	sub R2,R0
	sbc R3,R1
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 214
; 			}
	xjmp L77
L76:
	.dbline 216
; 			else
; 			{
	.dbline 217
; 				x = x + signx;
	ldd R0,y+1
	add R0,R12
	std y+1,R0
	.dbline 218
; 				y = y;
	.dbline 219
; 				p = p + 2*dy;
	movw R2,R22
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 220
; 			}
L77:
	.dbline 221
; 		}
L73:
	.dbline 206
	inc R20
L75:
	.dbline 206
	mov R2,R20
	clr R3
	ldd R0,y+3
	ldd R1,y+4
	cp R2,R0
	cpc R3,R1
	brlt L72
X31:
	.dbline 222
;     }
	xjmp L71
L70:
	.dbline 224
; 	else								
; 	{
	.dbline 225
; 		for(temp=0; temp<dy; temp++)
	clr R20
	xjmp L81
L78:
	.dbline 226
; 		{
	.dbline 227
; 	        WriteDot(x,y,color);		/* 画点 */
	ldd R0,y+23
	std y+0,R0
	ldd R18,y+2
	ldd R16,y+1
	xcall _WriteDot
	.dbline 228
; 			if(p >= 0)						/* 根据P来判断画哪一点 */
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L82
X32:
	.dbline 229
; 			{
	.dbline 230
; 			    y = y + signy;
	ldd R0,y+2
	add R0,R14
	std y+2,R0
	.dbline 231
; 				x = x + signx;
	ldd R0,y+1
	add R0,R12
	std y+1,R0
	.dbline 232
; 				p = p + 2*(dx - dy);
	ldd R2,y+3
	ldd R3,y+4
	sub R2,R22
	sbc R3,R23
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 233
; 			}
	xjmp L83
L82:
	.dbline 235
; 			else
; 			{
	.dbline 236
; 				y = y + signy;
	ldd R0,y+2
	add R0,R14
	std y+2,R0
	.dbline 237
; 				x = x;
	.dbline 238
; 				p = p + 2*dx;
	ldd R2,y+3
	ldd R3,y+4
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 239
; 			}
L83:
	.dbline 240
; 		}
L79:
	.dbline 225
	inc R20
L81:
	.dbline 225
	mov R2,R20
	clr R3
	cp R2,R22
	cpc R3,R23
	brlt L78
X33:
	.dbline 241
;     }
L71:
	.dbline 242
;      WriteDot(x2,y2,color);		         /* 画最后一个点 */
	ldd R0,y+23
	std y+0,R0
	ldd R18,y+21
	ldd R16,y+19
	xcall _WriteDot
	.dbline -2
L51:
	.dbline 0 ; func end
	adiw R28,5
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r signy 14 c
	.dbsym r signx 12 c
	.dbsym r dy 22 I
	.dbsym l dx 3 I
	.dbsym r temp 20 c
	.dbsym l y 2 c
	.dbsym l x 1 c
	.dbsym r p 10 I
	.dbsym l color 23 c
	.dbsym l y2 21 c
	.dbsym l x2 19 c
	.dbsym r y1 10 c
	.dbsym l x1 15 c
	.dbend
	.dbfunc e ClrDisplyBuffer _ClrDisplyBuffer fV
;          temp1 -> R16
;          temp2 -> R18
	.even
_ClrDisplyBuffer::
	.dbline -1
	.dbline 251
;     //LcdDsiplayRefresh();
; }
; 
; /***************************************
; *  FUNCTION NAME: ClrDisplyBuffer
; *  DESCRIPTION: 
; /***************************************/
; void ClrDisplyBuffer(void)
; {
	.dbline 253
;     unsigned char temp1,temp2;
; 	for(temp1=0; temp1<8; temp1++)
	clr R16
	xjmp L88
L85:
	.dbline 254
; 	{
	.dbline 255
; 	    for(temp2=0; temp2<128; temp2++)
	clr R18
	xjmp L92
L89:
	.dbline 256
; 		{
	.dbline 257
; 		    displaybuffer[temp1][temp2] = 0x00;	
	ldi R24,128
	mul R24,R16
	movw R2,R0
	ldi R24,<_displaybuffer
	ldi R25,>_displaybuffer
	add R2,R24
	adc R3,R25
	mov R30,R18
	clr R31
	add R30,R2
	adc R31,R3
	clr R2
	std z+0,R2
	.dbline 258
; 		}
L90:
	.dbline 255
	inc R18
L92:
	.dbline 255
	cpi R18,128
	brlo L89
X34:
	.dbline 259
; 	}
L86:
	.dbline 253
	inc R16
L88:
	.dbline 253
	cpi R16,8
	brlo L85
X35:
	.dbline -2
L84:
	.dbline 0 ; func end
	ret
	.dbsym r temp1 16 c
	.dbsym r temp2 18 c
	.dbend
	.dbfunc e Delayms _Delayms fV
;              i -> R20,R21
;           temp -> R22,R23
;           time -> R16,R17
	.even
_Delayms::
	xcall push_xgsetF000
	.dbline -1
	.dbline 267
; }
; 
; /***************************************
; *  FUNCTION NAME: Delayms
; *  DESCRIPTION:
; /***************************************/
;  void Delayms(unsigned int time)
; {
	.dbline 270
;     unsigned int temp;   
; 	unsigned int i;
; 	for(i=0;i<time;i++)
	clr R20
	clr R21
	xjmp L97
L94:
	.dbline 271
; 	{     
	.dbline 272
;        for(temp=10; temp>0;temp--)              /* Delay About 1ms */
	ldi R22,10
	ldi R23,0
	xjmp L101
L98:
	.dbline 273
;        {
	.dbline 274
;          NOP;                                 
	nop
	.dbline 275
; 	   }
L99:
	.dbline 272
	subi R22,1
	sbci R23,0
L101:
	.dbline 272
	cpi R22,0
	cpc R22,R23
	brne L98
X36:
	.dbline 276
; 	}
L95:
	.dbline 270
	subi R20,255  ; offset = 1
	sbci R21,255
L97:
	.dbline 270
	cp R20,R16
	cpc R21,R17
	brlo L94
X37:
	.dbline -2
L93:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r i 20 i
	.dbsym r temp 22 i
	.dbsym r time 16 i
	.dbend
	.dbfunc e action _action fV
;          temp1 -> R20
;           temp -> y+8
	.even
_action::
	xcall push_xgset300C
	sbiw R28,12
	.dbline -1
	.dbline 281
; }
; 
; 
; void action(void)
; {
	.dbline 285
;     float temp;
; 	unsigned char temp1;
; 
;     for(temp1=0; temp1<50; temp1++)
	clr R20
	xjmp L106
L103:
	.dbline 286
; 		{
	.dbline 287
; 		     cube(0.0,0.0,15.0);
	ldi R16,<L107
	ldi R17,>L107
	xcall elpm32
	std y+4,R16
	std y+5,R17
	std y+6,R18
	std y+7,R19
	ldi R16,<L108
	ldi R17,>L108
	xcall elpm32

⌨️ 快捷键说明

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