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

📄 spline.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 4 页
字号:
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	movw R24,R28
 ; stack offset 12
	adiw R24,8
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	st -y,R9
	st -y,R8
	st -y,R7
	st -y,R6
	xcall empy32fs
	movw R30,R2
	add R30,R4
	adc R31,R5
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32fs
	xcall add32fs
	xcall empy32f
	movw R24,R12
	subi R24,56  ; offset = 200
	sbci R25,255
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 236
L81:
	.dbline 233
	movw R24,R10
	adiw R24,1
	movw R10,R24
L83:
	.dbline 233
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,2
	cp R24,R10
	cpc R25,R11
	brlt X11
	xjmp L80
X11:
	.dbline 237
;    {  sl->Bx[i] = 3.0f*(sl->Ax[i-1] + k[i-1] * k[i-1] * sl->Ax[i]);
; 	  sl->By[i] = 3.0f*(sl->Ay[i-1] + k[i-1] * k[i-1] * sl->Ay[i]);
;    }
;    sl->Bx[0] = 3.0f * sl->Ax[0];
	ldi R16,<L27
	ldi R17,>L27
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R12
	subi R30,176  ; addi 80
	sbci R31,255
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32f
	movw R30,R12
	subi R30,96  ; addi 160
	sbci R31,255
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 238
;    sl->By[0] = 3.0f * sl->Ay[0];
	ldi R16,<L27
	ldi R17,>L27
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R30,R12
	subi R30,136  ; addi 120
	sbci R31,255
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	xcall empy32f
	movw R30,R12
	subi R30,56  ; addi 200
	sbci R31,255
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 239
;    sl->Bx[sl->Np-1] = 3.0f * sl->Ax[sl->Np-2];
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R18,z+0
	ldd R19,z+1
	ldi R16,4
	ldi R17,0
	xcall empy16s
	movw R2,R16
	ldi R16,<L27
	ldi R17,>L27
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R24,R12
	subi R24,176  ; offset = 80
	sbci R25,255
	movw R30,R2
	sbiw R30,8
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32f
	movw R24,R12
	subi R24,96  ; offset = 160
	sbci R25,255
	movw R30,R2
	sbiw R30,4
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 240
;    sl->By[sl->Np-1] = 3.0f * sl->Ay[sl->Np-2];
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R18,z+0
	ldd R19,z+1
	ldi R16,4
	ldi R17,0
	xcall empy16s
	movw R2,R16
	ldi R16,<L27
	ldi R17,>L27
	xcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R24,R12
	subi R24,136  ; offset = 120
	sbci R25,255
	movw R30,R2
	sbiw R30,8
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32f
	movw R24,R12
	subi R24,56  ; offset = 200
	sbci R25,255
	movw R30,R2
	sbiw R30,4
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 242
; 
;    SPLINE_MatrixSolve(sl, sl->Bx);
	movw R18,R12
	subi R18,96  ; offset = 160
	sbci R19,255
	movw R16,R12
	xcall _SPLINE_MatrixSolve
	.dbline 243
;    SPLINE_MatrixSolve(sl, sl->By);
	movw R18,R12
	subi R18,56  ; offset = 200
	sbci R19,255
	movw R16,R12
	xcall _SPLINE_MatrixSolve
	.dbline 245
; 
;    for(i=0 ; i<=sl->Np-2 ; i++ ) 
	clr R10
	clr R11
	xjmp L91
L88:
	.dbline 246
	.dbline 246
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R24,R28
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	movw R24,R12
	subi R24,92  ; offset = 164
	sbci R25,255
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32f
	movw R24,R12
	subi R24,16  ; offset = 240
	sbci R25,255
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 247
	ldi R16,4
	ldi R17,0
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R24,R28
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	movw R24,R12
	subi R24,52  ; offset = 204
	sbci R25,255
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	ldd R6,z+2
	ldd R7,z+3
	st -y,R7
	st -y,R6
	st -y,R5
	st -y,R4
	xcall empy32f
	movw R24,R12
	subi R24,232  ; offset = 280
	sbci R25,254
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 248
L89:
	.dbline 245
	movw R24,R10
	adiw R24,1
	movw R10,R24
L91:
	.dbline 245
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,2
	cp R24,R10
	cpc R25,R11
	brlt X12
	xjmp L88
X12:
	.dbline -2
L61:
	adiw R28,63
	adiw R28,1  ; offset = 64
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym l AMagOld 44 D
	.dbsym l AMag 40 D
	.dbsym l k 0 A[40:10]D
	.dbsym r i 10 I
	.dbsym r sl 12 pX
	.dbend
	.dbfunc e SPLINE_GetCurveCount _SPLINE_GetCurveCount fI
;          count -> R20,R21
;      curve_bak -> y+22
;              i -> R22,R23
;             sl -> R10,R11
	.even
_SPLINE_GetCurveCount::
	xcall push_gset3
	movw R10,R16
	sbiw R28,48
	.dbline -1
	.dbline 263
;    {  sl->Cx[i] = k[i] * sl->Bx[i+1];
; 	  sl->Cy[i] = k[i] * sl->By[i+1];
;    }
; }
; 
; 
; 
; 
; 
; /****************************************************************************
; * 名称:SPLINE_GetCurveCount()
; * 功能:取得样条曲线上端点个数值。
; * 入口参数:sl		要操作的样条曲线对象,SPLINE结构
; * 出口参数:返回值即是样条曲线各个端点个数
; * 说明:sl要先使用SPLINE_SetSpline()设置各个特征点。
; ****************************************************************************/
; int  SPLINE_GetCurveCount(SPLINE *sl)
; {  CURVE  curve_bak;
	.dbline 264
;    int    count = 0;
	clr R20
	clr R21
	.dbline 267
;    int    i;
;    
;    for(i=0; i<(sl->Np - 1); i++)	// 历遍所有特征点 
	clr R22
	clr R23
	xjmp L96
L93:
	.dbline 268
	.dbline 269
	ldi R16,4
	ldi R17,0
	movw R18,R22
	xcall empy16s
	movw R24,R10
	subi R24,232  ; offset = 280
	sbci R25,254
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+18,R2
	std y+19,R3
	std y+20,R4
	std y+21,R5
	movw R24,R10
	subi R24,16  ; offset = 240
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+14,R2
	std y+15,R3
	std y+16,R4
	std y+17,R5
	movw R24,R10
	subi R24,56  ; offset = 200
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+10,R2
	std y+11,R3
	std y+12,R4
	std y+13,R5
	movw R24,R10
	subi R24,96  ; offset = 160
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+6,R2
	std y+7,R3
	std y+8,R4
	std y+9,R5
	movw R24,R10
	subi R24,136  ; offset = 120
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	movw R24,R10
	subi R24,176  ; offset = 80
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R16,R28
	subi R16,234  ; offset = 22
	sbci R17,255
	xcall _CURVE_SetCurve
	.dbline 274
	movw R16,R28
	subi R16,234  ; offset = 22
	sbci R17,255
	xcall _CURVE_GetCount
	add R20,R16
	adc R21,R17
	.dbline 275
L94:
	.dbline 267
	subi R22,255  ; offset = 1
	sbci R23,255
L96:
	.dbline 267
	movw R30,R10
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	cp R22,R24
	cpc R23,R25
	brge X13
	xjmp L93
X13:
	.dbline 277
;    {  /* 设置样条曲线(三点)curve_bak */
;       CURVE_SetCurve(&curve_bak, 
;                      sl->Ax[i], sl->Ay[i], 
;                      sl->Bx[i], sl->By[i], 
;                      sl->Cx[i], sl->Cy[i]);
;       /* 取得曲线curve_bak上端点的个数 */
; 	  count += CURVE_GetCount(&curve_bak);
;    }
;    
;    return(count);
	movw R16,R20
	.dbline -2
L92:
	adiw R28,48
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r count 20 I
	.dbsym l curve_bak 22 X
	.dbsym r i 22 I
	.dbsym r sl 10 pX
	.dbend
	.dbfunc e SPLINE_GetCurve _SPLINE_GetCurve fV
;      curve_bak -> y+22
;              i -> R20,R21
;     PointCount -> R22,R23
;         points -> R10,R11
;             sl -> R12,R13
	.even
_SPLINE_GetCurve::
	xcall push_gset4
	movw R10,R18
	movw R12,R16
	sbiw R28,48
	ldd R22,y+56
	ldd R23,y+57
	.dbline -1
	.dbline 293
; }
; 
; 
; 
; /****************************************************************************
; * 名称:SPLINE_GetCurve()
; * 功能:取出样条曲线上各个端点,以便于使用GUI_Line()函数画出曲线。
; * 入口参数:sl			要操作的样条曲线对象,SPLINE结构
; *          points		用于接收曲线点的缓冲区,PointXY数组
; *          PointCount	用于接收曲线点个数的指针
; * 出口参数:无
; * 说明:接收曲线点由points返回,曲线点个数由PointCount返回;
; *      sl要先使用SPLINE_SetSpline()设置各个特征点。
; ****************************************************************************/
; void  SPLINE_GetCurve(SPLINE *sl, PointXY points[], int *PointCount)
; {  CURVE  curve_bak;
	.dbline 296
;    int    i;
; 
;    *PointCount = 0;						// 初始化点计数器为0
	clr R2
	clr R3
	movw R30,R22
	std z+1,R3
	std z+0,R2
	.dbline 297
;    for(i=0; i<(sl->Np-1); i++) 			// 历遍所有特征点
	clr R20
	clr R21
	xjmp L101
L98:
	.dbline 298
	.dbline 299
	ldi R16,4
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R24,R12
	subi R24,232  ; offset = 280
	sbci R25,254
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+18,R2
	std y+19,R3
	std y+20,R4
	std y+21,R5
	movw R24,R12
	subi R24,16  ; offset = 240
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+14,R2
	std y+15,R3
	std y+16,R4
	std y+17,R5
	movw R24,R12
	subi R24,56  ; offset = 200
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+10,R2
	std y+11,R3
	std y+12,R4
	std y+13,R5
	movw R24,R12
	subi R24,96  ; offset = 160
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+6,R2
	std y+7,R3
	std y+8,R4
	std y+9,R5
	movw R24,R12
	subi R24,136  ; offset = 120
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	movw R24,R12
	subi R24,176  ; offset = 80
	sbci R25,255
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R16,R28
	subi R16,234  ; offset = 22
	sbci R17,255
	xcall _CURVE_SetCurve
	.dbline 305
	std y+9,R23
	std y+8,R22
	std y+7,R11
	std y+6,R10
	ldi R16,4
	ldi R17,0
	movw R18,R20
	xcall empy16s
	movw R24,R12
	adiw R24,40
	movw R30,R16
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	movw R30,R16
	add R30,R12
	adc R31,R13
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	std y+0,R4
	std y+1,R5
	movw R18,R2
	movw R16,R28
	subi R16,234  ; offset = 22
	sbci R17,255
	xcall _CURVE_GetCurve
	.dbline 309
L99:
	.dbline 297
	subi R20,255  ; offset = 1
	sbci R21,255
L101:
	.dbline 297
	movw R30,R12
	subi R30,72  ; addi 440
	sbci R31,254
	ldd R24,z+0
	ldd R25,z+1
	sbiw R24,1
	cp R20,R24
	cpc R21,R25
	brge X14
	xjmp L98
X14:
	.dbline -2
L97:
	adiw R28,48
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym l curve_bak 22 X
	.dbsym r i 20 I
	.dbsym r PointCount 22 pI
	.dbsym r points 10 pX
	.dbsym r sl 12 pX
	.dbend
	.dbfunc e GUI_Spline _GUI_Spline fV
;      sl_points -> y+444
;             sl -> y+2
;          color -> y+768
;             no -> y+766
;         points -> R20,R21
	.even
_GUI_Spline::
	st -y,r19
	st -y,r18
	xcall push_gset1
	movw R20,R16
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,63
	sbiw R28,8  ; offset = 764
	.dbline -1
	.dbline 321
;    {  /* 设置样条曲线(三点)curve_bak */
;    	  CURVE_SetCurve(&curve_bak, 
;    					 sl->Ax[i], sl->Ay[i],
;                      sl->Bx[i], sl->By[i], 
;                      sl->Cx[i], sl->Cy[i]);
;                      
;       /* 取得样条曲线curve_bak的端点数据及个数 */               
; 	  CURVE_GetCurve(&curve_bak, 
; 	                 sl->Px[i], sl->Py[i], 
; 	                 points, 
; 	                 PointCount);
;    }
; }
; 
; 
; /****************************************************************************
; * 名称:GUI_Spline()
; * 功能:作出多个特征点(3个以上)样条曲线。
; * 入口参数

⌨️ 快捷键说明

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