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

📄 gui_basic.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 5 页
字号:
; 	  if( (draw_x3>=0)&&(draw_y3<=GUI_LCM_YMAX) )	
	ldd R24,y+1
	ldd R25,y+2
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L128
	ldi R24,128
	ldi R25,0
	ldd R2,y+17
	ldd R3,y+18
	cp R24,R2
	cpc R25,R3
	brlt L128
	.dbline 461
; 	  {  GUI_Point(draw_x3, draw_y3, color);
	.dbline 461
	ldd R0,y+41
	std y+0,R0
	movw R18,R2
	ldd R16,y+1
	ldd R17,y+2
	xcall _GUI_Point
	.dbline 462
; 	  }
L128:
	.dbline 463
; 	  if( (draw_x4<=GUI_LCM_XMAX)&&(draw_y4>=0) )	
	ldi R24,240
	ldi R25,0
	ldd R2,y+11
	ldd R3,y+12
	cp R24,R2
	cpc R25,R3
	brlt L130
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L130
	.dbline 464
; 	  {  GUI_Point(draw_x4, draw_y4, color);
	.dbline 464
	ldd R0,y+41
	std y+0,R0
	movw R18,R24
	movw R16,R2
	xcall _GUI_Point
	.dbline 465
; 	  }
L130:
	.dbline 466
; 	  if( (draw_x5>=0)&&(draw_y5>=0) )	
	ldd R24,y+13
	ldd R25,y+14
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L132
	cpi R22,0
	ldi R30,0
	cpc R23,R30
	brlt L132
	.dbline 467
; 	  {  GUI_Point(draw_x5, draw_y5, color);
	.dbline 467
	ldd R0,y+41
	std y+0,R0
	movw R18,R22
	movw R16,R24
	xcall _GUI_Point
	.dbline 468
; 	  }
L132:
	.dbline 469
; 	  if( (draw_x6<=GUI_LCM_XMAX)&&(draw_y6<=GUI_LCM_YMAX) )	
	ldi R24,240
	ldi R25,0
	ldd R2,y+19
	ldd R3,y+20
	cp R24,R2
	cpc R25,R3
	brlt L134
	ldi R24,128
	ldd R2,y+3
	ldd R3,y+4
	cp R24,R2
	cpc R25,R3
	brlt L134
	.dbline 470
; 	  {  GUI_Point(draw_x6, draw_y6, color);
	.dbline 470
	ldd R0,y+41
	std y+0,R0
	movw R18,R2
	ldd R16,y+19
	ldd R17,y+20
	xcall _GUI_Point
	.dbline 471
; 	  }
L134:
	.dbline 472
; 	  if( (draw_x7>=0)&&(draw_y7<=GUI_LCM_YMAX) )	
	ldd R24,y+21
	ldd R25,y+22
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L136
	ldi R24,128
	ldi R25,0
	ldd R2,y+5
	ldd R3,y+6
	cp R24,R2
	cpc R25,R3
	brlt L136
	.dbline 473
; 	  {  GUI_Point(draw_x7, draw_y7, color);
	.dbline 473
	ldd R0,y+41
	std y+0,R0
	movw R18,R2
	ldd R16,y+21
	ldd R17,y+22
	xcall _GUI_Point
	.dbline 474
; 	  }
L136:
	.dbline 475
L118:
	.dbline 421
	ldd R2,y+23
	ldd R3,y+24
	cp R20,R2
	cpc R21,R3
	brge X8
	xjmp L117
X8:
	.dbline -2
L104:
	adiw R28,29
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l di 25 I
	.dbsym l yy 23 I
	.dbsym l draw_x7 21 I
	.dbsym l draw_x6 19 I
	.dbsym l draw_y3 17 I
	.dbsym l draw_y1 15 I
	.dbsym l draw_x5 13 I
	.dbsym l draw_x4 11 I
	.dbsym l draw_y2 9 I
	.dbsym l draw_y0 7 I
	.dbsym l draw_y7 5 I
	.dbsym l draw_y6 3 I
	.dbsym l draw_x3 1 I
	.dbsym l draw_x1 27 I
	.dbsym r draw_y5 22 I
	.dbsym r draw_y4 10 I
	.dbsym r draw_x2 12 I
	.dbsym r draw_x0 14 I
	.dbsym r xx 20 I
	.dbsym l color 41 c
	.dbsym l r 39 i
	.dbsym r y0 20 i
	.dbsym r x0 22 i
	.dbend
	.dbfunc e GUI_CircleFill _GUI_CircleFill fV
;             di -> y+33
;             yy -> y+31
;        draw_x6 -> y+29
;        draw_y2 -> y+27
;        draw_y0 -> y+25
;        draw_x4 -> y+23
;        draw_y6 -> y+21
;        draw_y3 -> y+19
;        draw_y1 -> y+17
;        draw_y4 -> y+15
;        draw_x2 -> y+13
;        draw_x0 -> y+11
;             xx -> y+9
;        draw_y7 -> y+7
;        draw_y5 -> y+5
;        draw_x7 -> y+3
;        draw_x5 -> R20,R21
;        fill_x0 -> R22,R23
;        draw_x3 -> R10,R11
;        draw_x1 -> y+35
;        fill_x1 -> R14,R15
;        fill_y0 -> R12,R13
;          color -> y+53
;              r -> y+51
;             y0 -> y+49
;             x0 -> y+47
	.even
_GUI_CircleFill::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,37
	.dbline -1
	.dbline 490
;    }
; }
; 
; 
; /****************************************************************************
; * 名称:GUI_CircleFill()
; * 功能:指定圆心位置及半径,画圆并填充,填充色与边框色一样。
; * 入口参数: x0		圆心的x坐标值
; *           y0		圆心的y坐标值
; *           r       圆的半径
; *           color	填充颜色
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void  GUI_CircleFill(uint32 x0, uint32 y0, uint32 r, TCOLOR color)
; {  int32  draw_x0, draw_y0;			// 刽图点坐标变量
	.dbline 505
;    int32  draw_x1, draw_y1;	
;    int32  draw_x2, draw_y2;	
;    int32  draw_x3, draw_y3;	
;    int32  draw_x4, draw_y4;	
;    int32  draw_x5, draw_y5;	
;    int32  draw_x6, draw_y6;	
;    int32  draw_x7, draw_y7;	
;    int32  fill_x0, fill_y0;			// 填充所需的变量,使用垂直线填充
;    int32  fill_x1;
;    int32  xx, yy;					// 画圆控制变量
;  
;    int32  di;						// 决策变量
;    
;    /* 参数过滤 */
;    if(0==r) return;
	ldd R0,y+51
	ldd R1,y+52
	tst R0
	brne L139
	tst R1
	brne L139
X9:
	.dbline 505
	xjmp L138
L139:
	.dbline 508
;    
;    /* 计算出4个特殊点(0、90、180、270度),进行显示 */
;    draw_x0 = draw_x1 = x0;
	ldd R0,y+47
	ldd R1,y+48
	std y+36,R1
	std y+35,R0
	ldd R0,y+47
	ldd R1,y+48
	std y+12,R1
	std y+11,R0
	.dbline 509
;    draw_y0 = draw_y1 = y0 + r;
	ldd R2,y+49
	ldd R3,y+50
	ldd R0,y+51
	ldd R1,y+52
	add R2,R0
	adc R3,R1
	std y+18,R3
	std y+17,R2
	std y+26,R3
	std y+25,R2
	.dbline 510
;    if(draw_y0<GUI_LCM_YMAX)
	movw R24,R2
	cpi R24,128
	ldi R30,0
	cpc R25,R30
	brge L141
	.dbline 511
;    {  GUI_Point(draw_x0, draw_y0, color);	// 90度
	.dbline 511
	ldd R0,y+53
	std y+0,R0
	movw R18,R24
	ldd R16,y+11
	ldd R17,y+12
	xcall _GUI_Point
	.dbline 512
;    }
L141:
	.dbline 514
;     	
;    draw_x2 = draw_x3 = x0;
	ldd R10,y+47
	ldd R11,y+48
	movw R0,R10
	std y+14,R1
	std y+13,R0
	.dbline 515
;    draw_y2 = draw_y3 = y0 - r;
	ldd R2,y+49
	ldd R3,y+50
	ldd R0,y+51
	ldd R1,y+52
	sub R2,R0
	sbc R3,R1
	std y+20,R3
	std y+19,R2
	std y+28,R3
	std y+27,R2
	.dbline 516
;    if(draw_y2>=0)
	movw R24,R2
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L143
	.dbline 517
;    {  GUI_Point(draw_x2, draw_y2, color);	// 270度
	.dbline 517
	ldd R0,y+53
	std y+0,R0
	movw R18,R24
	ldd R16,y+13
	ldd R17,y+14
	xcall _GUI_Point
	.dbline 518
;    }
L143:
	.dbline 520
;   	
;    draw_x4 = draw_x6 = x0 + r;
	ldd R2,y+47
	ldd R3,y+48
	ldd R0,y+51
	ldd R1,y+52
	add R2,R0
	adc R3,R1
	std y+30,R3
	std y+29,R2
	std y+24,R3
	std y+23,R2
	.dbline 521
;    draw_y4 = draw_y6 = y0;
	ldd R0,y+49
	ldd R1,y+50
	std y+22,R1
	std y+21,R0
	ldd R0,y+49
	ldd R1,y+50
	std y+16,R1
	std y+15,R0
	.dbline 522
;    if(draw_x4<GUI_LCM_XMAX) 
	ldd R24,y+23
	ldd R25,y+24
	cpi R24,240
	ldi R30,0
	cpc R25,R30
	brge L145
	.dbline 523
;    {  GUI_Point(draw_x4, draw_y4, color);	// 0度
	.dbline 523
	ldd R0,y+53
	std y+0,R0
	ldd R18,y+15
	ldd R19,y+16
	movw R16,R24
	xcall _GUI_Point
	.dbline 524
;       fill_x1 = draw_x4;
	ldd R14,y+23
	ldd R15,y+24
	.dbline 525
;    }
	xjmp L146
L145:
	.dbline 527
;    else
;    {  fill_x1 = GUI_LCM_XMAX;
	.dbline 527
	ldi R24,240
	ldi R25,0
	movw R14,R24
	.dbline 528
;    }
L146:
	.dbline 529
;    fill_y0 = y0;							// 设置填充线条起始点fill_x0
	ldd R12,y+49
	ldd R13,y+50
	.dbline 530
;    fill_x0 = x0 - r;						// 设置填充线条结束点fill_y1
	ldd R22,y+47
	ldd R23,y+48
	ldd R0,y+51
	ldd R1,y+52
	sub R22,R0
	sbc R23,R1
	.dbline 531
;    if(fill_x0<0) fill_x0 = 0;
	cpi R22,0
	ldi R30,0
	cpc R23,R30
	brge L147
	.dbline 531
	clr R22
	clr R23
L147:
	.dbline 532
;    GUI_HLine(fill_x0, fill_y0, fill_x1, color);
	ldd R0,y+53
	std y+2,R0
	std y+1,R15
	std y+0,R14
	movw R18,R12
	movw R16,R22
	xcall _GUI_HLine
	.dbline 534
;    
;    draw_x5 = draw_x7 = x0 - r;
	ldd R2,y+47
	ldd R3,y+48
	ldd R0,y+51
	ldd R1,y+52
	sub R2,R0
	sbc R3,R1
	std y+4,R3
	std y+3,R2
	movw R20,R2
	.dbline 535
;    draw_y5 = draw_y7 = y0;
	ldd R0,y+49
	ldd R1,y+50
	std y+8,R1
	std y+7,R0
	ldd R0,y+49
	ldd R1,y+50
	std y+6,R1
	std y+5,R0
	.dbline 536
;    if(draw_x5>=0) 
	cpi R20,0
	ldi R30,0
	cpc R21,R30
	brlt L149
	.dbline 537
;    {  GUI_Point(draw_x5, draw_y5, color);	// 180度
	.dbline 537
	ldd R0,y+53
	std y+0,R0
	ldd R18,y+5
	ldd R19,y+6
	movw R16,R2
	xcall _GUI_Point
	.dbline 538
;    }
L149:
	.dbline 539
;    if(1==r) return;
	ldd R24,y+51
	ldd R25,y+52
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne L151
	.dbline 539
	xjmp L138
L151:
	.dbline 543
;    
;    
;    /* 使用Bresenham法进行画圆 */
;    di = 3 - 2*r;							// 初始化决策变量
	ldi R16,2
	ldi R17,0
	ldd R18,y+51
	ldd R19,y+52
	xcall empy16s
	ldi R24,3
	ldi R25,0
	sub R24,R16
	sbc R25,R17
	std y+34,R25
	std y+33,R24
	.dbline 545
;    
;    xx = 0;
	clr R2
	clr R3
	std y+10,R3
	std y+9,R2
	.dbline 546
;    yy = r;
	ldd R0,y+51
	ldd R1,y+52
	std y+32,R1
	std y+31,R0
	xjmp L154
L153:
	.dbline 548
;    while(xx<yy)
;    {  if(di<0)
	.dbline 548
	ldd R24,y+33
	ldd R25,y+34
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L156
	.dbline 549
; 	  {  di += 4*xx + 6;
	.dbline 549
	ldd R18,y+9
	ldd R19,y+10
	ldi R16,4
	ldi R17,0
	xcall empy16s
	movw R24,R16
	adiw R24,6
	ldd R2,y+33
	ldd R3,y+34
	add R2,R24
	adc R3,R25
	std y+34,R3
	std y+33,R2
	.dbline 550
; 	  }
	xjmp L157
L156:
	.dbline 552
; 	  else
; 	  {  di += 4*(xx - yy) + 10;
	.dbline 552
	ldd R2,y+31
	ldd R3,y+32
	ldd R18,y+9
	ldd R19,y+10
	sub R18,R2
	sbc R19,R3
	ldi R16,4
	ldi R17,0
	xcall empy16s
	movw R24,R16
	adiw R24,10
	ldd R2,y+33
	ldd R3,y+34
	add R2,R24
	adc R3,R25
	std y+34,R3
	std y+33,R2
	.dbline 554
; 	  
; 	     yy--;	  
	ldd R24,y+31
	ldd R25,y+32
	sbiw R24,1
	std y+32,R25
	std y+31,R24
	.dbline 555
; 		 draw_y0--;
	ldd R24,y+25
	ldd R25,y+26
	sbiw R24,1
	std y+26,R25
	std y+25,R24
	.dbline 556
; 		 draw_y1--;
	ldd R24,y+17
	ldd R25,y+18
	sbiw R24,1
	std y+18,R25
	std y+17,R24
	.dbline 557
; 		 draw_y2++;
	ldd R24,y+27
	ldd R25,y+28
	adiw R24,1
	std y+28,R25
	std y+27,R24
	.dbline 558
; 		 draw_y3++;
	ldd R24,y+19
	ldd R25,y+20
	adiw R24,1
	std y+20,R25
	std y+19,R24
	.dbline 559
; 		 draw_x4--;
	ldd R24,y+23
	ldd R25,y+24
	sbiw R24,1
	std y+24,R25
	std y+23,R24
	.dbline 560
; 		 draw_x5++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 561
; 		 draw_x6--;
	ldd R24,y+29
	ldd R25,y+30
	sbiw R24,1
	std y+30,R25
	std y+29,R24
	.dbline 562
; 		 draw_x7++;		 
	ldd R24,y+3
	ldd R25,y+4
	adiw R24,1
	std y+4,R25
	std y+3,R24
	.dbline 563
; 	  }
L157:
	.dbline 565
; 	  
; 	  xx++;   
	ldd R24,y+9
	ldd R25,y+10
	adiw R24,1
	std y+10,R25
	std y+9,R24
	.dbline 566
; 	  draw_x0++;
	ldd R24,y+11
	ldd R25,y+12
	adiw R24,1
	std y+12,R25
	std y+11,R24
	.dbline 567
; 	  draw_x1--;
	ldd R24,y+35
	ldd R25,y+36
	sbiw R24,1
	std y+36,R25
	std y+35,R24
	.dbline 568
; 	  draw_x2++;
	ldd R24,y+13
	ldd R25,y+14
	adiw R24,1
	std y+14,R25
	std y+13,R24
	.dbline 569
; 	  draw_x3--;
	movw R24,R10
	sbiw R24,1
	movw R10,R24
	.dbline 570
; 	  draw_y4++;
	ldd R24,y+15
	ldd R25,y+16
	adiw R24,1
	std y+16,R25
	std y+15,R24
	.dbline 571
; 	  draw_y5++;
	ldd R24,y+5
	ldd R25,y+6
	adiw R24,1
	std y+6,R25
	std y+5,R24
	.dbline 572
; 	  draw_y6--;
	ldd R24,y+21
	ldd R25,y+22
	sbiw R24,1
	std y+22,R25
	std y+21,R24
	.dbline 573
; 	  draw_y7--;
	ldd R24,y+7
	ldd R25,y+8
	sbiw R24,1
	std y+8,R25
	std y+7,R24
	.dbline 577
; 		
; 	
; 	  /* 要判断当前点是否在有效范围内 */
; 	  if( (draw_x0<=GUI_LCM_XMAX)&&(draw_y0>=0) )	
	ldi R24,240
	ldi R25,0
	ldd R2,y+11
	ldd R3,y+12
	cp R24,R2
	cpc R25,R3
	brlt L158
	ldd R24,y+25
	ldd R25,y+26
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L158
	.dbline 578
; 	  {  GUI_Point(draw_x0, draw_y0, color);
	.dbline 578
	ldd R0,y+53
	std y+0,R0
	movw R18,R24
	movw R16,R2
	xcall _GUI_Point
	.dbline 579
; 	  }	    
L158:
	.dbline 580
; 	  if( (draw_x1>=0)&&(draw_y1>=0) )	
	ldd R24,y+35
	ldd R25,y+36
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L160
	ldd R24,y+17
	ldd R25,y+18
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L160
	.dbline 581
; 	  {  GUI_Point(draw_x1, draw_y1, color);
	.dbline 581
	ldd R0,y+53
	std y+0,R0
	movw R18,R24
	ldd R16,y+35
	ldd R17,y+36
	xcall _GUI_Point
	.dbline 582
; 	  }
L160:
	.dbline 585
; 	  
; 	  /* 第二点水直线填充(下半圆的点) */
; 	  if(draw_x1>=0)
	ldd R24,y+35
	ldd R25,y+36
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L162

⌨️ 快捷键说明

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