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

📄 gui_basic.s

📁 ssd1325控制器液晶的驱动程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 586
; 	  {  /* 设置填充线条起始点fill_x0 */
	.dbline 587
; 	     fill_x0 = draw_x1;
	movw R22,R24
	.dbline 589
; 	     /* 设置填充线条起始点fill_y0 */
; 	     fill_y0 = draw_y1;
	ldd R12,y+17
	ldd R13,y+18
	.dbline 590
;          if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
	ldi R24,128
	ldi R25,0
	cp R24,R12
	cpc R25,R13
	brge L164
	.dbline 590
	movw R12,R24
L164:
	.dbline 591
;          if(fill_y0<0) fill_y0 = 0; 
	movw R24,R12
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L166
	.dbline 591
	clr R12
	clr R13
L166:
	.dbline 593
;          /* 设置填充线条结束点fill_x1 */									
;          fill_x1 = x0*2 - draw_x1;				
	ldi R16,2
	ldi R17,0
	ldd R18,y+47
	ldd R19,y+48
	xcall empy16s
	movw R14,R16
	ldd R0,y+35
	ldd R1,y+36
	sub R14,R0
	sbc R15,R1
	.dbline 594
;          if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
	ldi R24,240
	ldi R25,0
	cp R24,R14
	cpc R25,R15
	brge L168
	.dbline 594
	movw R14,R24
L168:
	.dbline 595
;          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 596
;       }
L162:
	.dbline 599
; 	  
; 	  
; 	  if( (draw_x2<=GUI_LCM_XMAX)&&(draw_y2<=GUI_LCM_YMAX) )	
	ldi R24,240
	ldi R25,0
	ldd R2,y+13
	ldd R3,y+14
	cp R24,R2
	cpc R25,R3
	brlt L170
	ldi R24,128
	ldd R2,y+27
	ldd R3,y+28
	cp R24,R2
	cpc R25,R3
	brlt L170
	.dbline 600
; 	  {  GUI_Point(draw_x2, draw_y2, color);   
	.dbline 600
	ldd R0,y+53
	std y+0,R0
	movw R18,R2
	ldd R16,y+13
	ldd R17,y+14
	xcall _GUI_Point
	.dbline 601
; 	  }
L170:
	.dbline 603
; 	    	  
; 	  if( (draw_x3>=0)&&(draw_y3<=GUI_LCM_YMAX) )	
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L172
	ldi R24,128
	ldi R25,0
	ldd R2,y+19
	ldd R3,y+20
	cp R24,R2
	cpc R25,R3
	brlt L172
	.dbline 604
; 	  {  GUI_Point(draw_x3, draw_y3, color);
	.dbline 604
	ldd R0,y+53
	std y+0,R0
	movw R18,R2
	movw R16,R10
	xcall _GUI_Point
	.dbline 605
; 	  }
L172:
	.dbline 608
; 	  
; 	  /* 第四点垂直线填充(上半圆的点) */
; 	  if(draw_x3>=0)
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L174
	.dbline 609
; 	  {  /* 设置填充线条起始点fill_x0 */
	.dbline 610
; 	     fill_x0 = draw_x3;
	movw R22,R24
	.dbline 612
; 	     /* 设置填充线条起始点fill_y0 */
; 	     fill_y0 = draw_y3;
	ldd R12,y+19
	ldd R13,y+20
	.dbline 613
;          if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
	ldi R24,128
	ldi R25,0
	cp R24,R12
	cpc R25,R13
	brge L176
	.dbline 613
	movw R12,R24
L176:
	.dbline 614
;          if(fill_y0<0) fill_y0 = 0;
	movw R24,R12
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L178
	.dbline 614
	clr R12
	clr R13
L178:
	.dbline 616
;          /* 设置填充线条结束点fill_x1 */									
;          fill_x1 = x0*2 - draw_x3;				
	ldi R16,2
	ldi R17,0
	ldd R18,y+47
	ldd R19,y+48
	xcall empy16s
	movw R14,R16
	sub R14,R10
	sbc R15,R11
	.dbline 617
;          if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
	ldi R24,240
	ldi R25,0
	cp R24,R14
	cpc R25,R15
	brge L180
	.dbline 617
	movw R14,R24
L180:
	.dbline 618
;          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 619
;       }
L174:
	.dbline 622
; 	  
; 	  	  
; 	  if( (draw_x4<=GUI_LCM_XMAX)&&(draw_y4>=0) )	
	ldi R24,240
	ldi R25,0
	ldd R2,y+23
	ldd R3,y+24
	cp R24,R2
	cpc R25,R3
	brlt L182
	ldd R24,y+15
	ldd R25,y+16
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L182
	.dbline 623
; 	  {  GUI_Point(draw_x4, draw_y4, color);
	.dbline 623
	ldd R0,y+53
	std y+0,R0
	movw R18,R24
	movw R16,R2
	xcall _GUI_Point
	.dbline 624
; 	  }
L182:
	.dbline 625
; 	  if( (draw_x5>=0)&&(draw_y5>=0) )	
	cpi R20,0
	ldi R30,0
	cpc R21,R30
	brlt L184
	ldd R24,y+5
	ldd R25,y+6
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L184
	.dbline 626
; 	  {  GUI_Point(draw_x5, draw_y5, color);
	.dbline 626
	ldd R0,y+53
	std y+0,R0
	movw R18,R24
	movw R16,R20
	xcall _GUI_Point
	.dbline 627
; 	  }
L184:
	.dbline 630
; 	  
; 	  /* 第六点垂直线填充(上半圆的点) */
; 	  if(draw_x5>=0)
	cpi R20,0
	ldi R30,0
	cpc R21,R30
	brlt L186
	.dbline 631
; 	  {  /* 设置填充线条起始点fill_x0 */
	.dbline 632
; 	     fill_x0 = draw_x5;
	movw R22,R20
	.dbline 634
; 	     /* 设置填充线条起始点fill_y0 */
; 	     fill_y0 = draw_y5;
	ldd R12,y+5
	ldd R13,y+6
	.dbline 635
;          if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
	ldi R24,128
	ldi R25,0
	cp R24,R12
	cpc R25,R13
	brge L188
	.dbline 635
	movw R12,R24
L188:
	.dbline 636
;          if(fill_y0<0) fill_y0 = 0;
	movw R24,R12
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L190
	.dbline 636
	clr R12
	clr R13
L190:
	.dbline 638
;          /* 设置填充线条结束点fill_x1 */									
;          fill_x1 = x0*2 - draw_x5;				
	ldi R16,2
	ldi R17,0
	ldd R18,y+47
	ldd R19,y+48
	xcall empy16s
	movw R14,R16
	sub R14,R20
	sbc R15,R21
	.dbline 639
;          if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
	ldi R24,240
	ldi R25,0
	cp R24,R14
	cpc R25,R15
	brge L192
	.dbline 639
	movw R14,R24
L192:
	.dbline 640
;          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 641
;       }
L186:
	.dbline 644
; 	  
; 	  
; 	  if( (draw_x6<=GUI_LCM_XMAX)&&(draw_y6<=GUI_LCM_YMAX) )	
	ldi R24,240
	ldi R25,0
	ldd R2,y+29
	ldd R3,y+30
	cp R24,R2
	cpc R25,R3
	brlt L194
	ldi R24,128
	ldd R2,y+21
	ldd R3,y+22
	cp R24,R2
	cpc R25,R3
	brlt L194
	.dbline 645
; 	  {  GUI_Point(draw_x6, draw_y6, color);
	.dbline 645
	ldd R0,y+53
	std y+0,R0
	movw R18,R2
	ldd R16,y+29
	ldd R17,y+30
	xcall _GUI_Point
	.dbline 646
; 	  }
L194:
	.dbline 648
; 	  
; 	  if( (draw_x7>=0)&&(draw_y7<=GUI_LCM_YMAX) )	
	ldd R24,y+3
	ldd R25,y+4
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L196
	ldi R24,128
	ldi R25,0
	ldd R2,y+7
	ldd R3,y+8
	cp R24,R2
	cpc R25,R3
	brlt L196
	.dbline 649
; 	  {  GUI_Point(draw_x7, draw_y7, color);
	.dbline 649
	ldd R0,y+53
	std y+0,R0
	movw R18,R2
	ldd R16,y+3
	ldd R17,y+4
	xcall _GUI_Point
	.dbline 650
; 	  }
L196:
	.dbline 653
; 	  
; 	  /* 第八点垂直线填充(上半圆的点) */
; 	  if(draw_x7>=0)
	ldd R24,y+3
	ldd R25,y+4
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L198
	.dbline 654
; 	  {  /* 设置填充线条起始点fill_x0 */
	.dbline 655
; 	     fill_x0 = draw_x7;
	movw R22,R24
	.dbline 657
; 	     /* 设置填充线条起始点fill_y0 */
; 	     fill_y0 = draw_y7;
	ldd R12,y+7
	ldd R13,y+8
	.dbline 658
;          if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
	ldi R24,128
	ldi R25,0
	cp R24,R12
	cpc R25,R13
	brge L200
	.dbline 658
	movw R12,R24
L200:
	.dbline 659
;          if(fill_y0<0) fill_y0 = 0;
	movw R24,R12
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L202
	.dbline 659
	clr R12
	clr R13
L202:
	.dbline 661
;          /* 设置填充线条结束点fill_x1 */									
;          fill_x1 = x0*2 - draw_x7;				
	ldi R16,2
	ldi R17,0
	ldd R18,y+47
	ldd R19,y+48
	xcall empy16s
	movw R14,R16
	ldd R2,y+3
	ldd R3,y+4
	sub R14,R2
	sbc R15,R3
	.dbline 662
;          if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
	ldi R24,240
	ldi R25,0
	cp R24,R14
	cpc R25,R15
	brge L204
	.dbline 662
	movw R14,R24
L204:
	.dbline 663
;          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 664
;       }
L198:
	.dbline 666
L154:
	.dbline 547
	ldd R2,y+31
	ldd R3,y+32
	ldd R4,y+9
	ldd R5,y+10
	cp R4,R2
	cpc R5,R3
	brge X10
	xjmp L153
X10:
	.dbline -2
L138:
	adiw R28,37
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l di 33 I
	.dbsym l yy 31 I
	.dbsym l draw_x6 29 I
	.dbsym l draw_y2 27 I
	.dbsym l draw_y0 25 I
	.dbsym l draw_x4 23 I
	.dbsym l draw_y6 21 I
	.dbsym l draw_y3 19 I
	.dbsym l draw_y1 17 I
	.dbsym l draw_y4 15 I
	.dbsym l draw_x2 13 I
	.dbsym l draw_x0 11 I
	.dbsym l xx 9 I
	.dbsym l draw_y7 7 I
	.dbsym l draw_y5 5 I
	.dbsym l draw_x7 3 I
	.dbsym r draw_x5 20 I
	.dbsym r fill_x0 22 I
	.dbsym r draw_x3 10 I
	.dbsym l draw_x1 35 I
	.dbsym r fill_x1 14 I
	.dbsym r fill_y0 12 I
	.dbsym l color 53 c
	.dbsym l r 51 i
	.dbsym l y0 49 i
	.dbsym l x0 47 i
	.dbend
	.dbfunc e GUI_Ellipse _GUI_Ellipse fV
;       center_x -> y+27
;       radius_x -> y+25
;       center_y -> y+23
;       radius_y -> y+21
;     radius_yy2 -> y+19
;      radius_xx -> y+17
;     radius_xx2 -> y+15
;      radius_yy -> y+13
;        draw_y3 -> y+11
;        draw_x3 -> y+9
;        draw_y1 -> y+7
;        draw_x1 -> y+5
;        draw_y2 -> y+3
;        draw_x2 -> y+1
;        draw_y0 -> R20,R21
;        draw_x0 -> R22,R23
;             di -> R10,R11
;             xx -> R12,R13
;             yy -> R14,R15
;          color -> y+43
;             y1 -> R22,R23
;             y0 -> R20,R21
;             x1 -> R12,R13
;             x0 -> R10,R11
	.even
_GUI_Ellipse::
	xcall push_gset5
	movw R12,R18
	movw R10,R16
	sbiw R28,29
	ldd R20,y+39
	ldd R21,y+40
	ldd R22,y+41
	ldd R23,y+42
	.dbline -1
	.dbline 687
; 	  
;    }
; }
; #endif
; 
; 
; 
; 
; #if	 GUI_EllipseX_EN==1
; /****************************************************************************
; * 名称:GUI_Ellipse()
; * 功能:画正椭圆。给定椭圆的四个点的参数,最左、最右点的x轴坐标值为x0、x1,最上、最下点
; *      的y轴坐标为y0、y1。
; * 入口参数: x0		最左点的x坐标值
; *           x1		最右点的x坐标值
; *           y0		最上点的y坐标值
; *           y1      最下点的y坐标值
; *           color	显示颜色
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void  GUI_Ellipse(uint32 x0, uint32 x1, uint32 y0, uint32 y1, TCOLOR color)
; {  int32  draw_x0, draw_y0;			// 刽图点坐标变量
	.dbline 700
	cp R10,R12
	cpc R11,R13
	breq L209
	cp R20,R22
	cpc R21,R23
	brne L207
L209:
	.dbline 700
;    int32  draw_x1, draw_y1;
;    int32  draw_x2, draw_y2;
;    int32  draw_x3, draw_y3;
;    int32  xx, yy;					// 画图控制变量
;     
;    int32  center_x, center_y;		// 椭圆中心点坐标变量
;    int32  radius_x, radius_y;		// 椭圆的半径,x轴半径和y轴半径
;    int32  radius_xx, radius_yy;		// 半径乘平方值
;    int32  radius_xx2, radius_yy2;	// 半径乘平方值的两倍
;    int32  di;						// 定义决策变量
; 	
;    /* 参数过滤 */
;    if( (x0==x1) || (y0==y1) ) return;
	xjmp L206
L207:
	.dbline 703
;    	
;    /* 计算出椭圆中心点坐标 */
;    center_x = (x0 + x1) >> 1;			
	movw R2,R10
	add R2,R12
	adc R3,R13
	lsr R3
	ror R2
	std y+28,R3
	std y+27,R2
	.dbline 704
;    center_y = (y0 + y1) >> 1;
	movw R2,R20
	add R2,R22
	adc R3,R23
	lsr R3
	ror R2
	std y+24,R3
	std y+23,R2
	.dbline 707
;    
;    /* 计算出椭圆的半径,x轴半径和y轴半径 */
;    if(x0 > x1)
	cp R12,R10
	cpc R13,R11
	brsh L210
	.dbline 708
;    {  radius_x = (x0 - x1) >> 1;
	.dbline 708
	movw R2,R10
	sub R2,R12
	sbc R3,R13
	lsr R3
	ror R2
	std y+26,R3
	std y+25,R2
	.dbline 709
;    }
	xjmp L211
L210:
	.dbline 711
;    else
;    {  radius_x = (x1 - x0) >> 1;
	.dbline 711
	movw R2,R12
	sub R2,R10
	sbc R3,R11
	lsr R3
	ror R2
	std y+26,R3
	std y+25,R2
	.dbline 712
;    }
L211:
	.dbline 713
;    if(y0 > y1)
	cp R22,R20
	cpc R23,R21
	brsh L212
	.dbline 714
;    {  radius_y = (y0 - y1) >> 1;
	.dbline 714
	movw R2,R20
	sub R2,R22
	sbc R3,R23
	lsr R3
	ror R2
	std y+22,R3
	std y+21,R2
	.dbline 715
;    }
	xjmp L213
L212:
	.dbline 717
;    else
;    {  radius_y = (y1 - y0) >> 1;
	.dbline 717
	movw R2,R22
	sub R2,R20
	sbc R3,R21
	lsr R3
	ror R2
	std y+22,R3
	std y+21,R2
	.dbline 718
;    }
L213:
	.dbline 721
; 		
;    /* 计算半径平方值 */
;    radius_xx = radius_x * radius_x;
	ldd R18,y+25
	ldd R19,y+26
	movw R16,R18
	xcall empy16s
	std y+18,R17
	std y+17,R16
	.dbline 722
;    radius_yy = radius_y * radius_y;
	ldd R18,y+21
	ldd R19,y+22
	movw R16,R18
	xcall empy16s
	std y+14,R17
	std y+13,R16
	.dbline 725
; 	
;    /* 计算半径平方值乘2值 */
;    radius_xx2 = radius_xx<<1;
	ldd R2,y+17
	ldd R3,y+18
	lsl R2
	rol R3
	std y+16,R3
	std y+15,R2
	.dbline 726
;    radius_yy2 = radius_yy<<1;
	ldd R2,y+13
	ldd R3,y+14
	lsl R2
	rol R3
	std y+20,R3
	std y+19,R2
	.dbline 729
; 	
;    /* 初始化画图变量 */
;    xx = 0;
	clr R12
	clr R13
	.dbline 730
;    yy = radius_y;
	ldd R14,y+21
	ldd R15,y+22
	.dbline 732
;   
;    di = radius_yy2 + radius_xx - radius_xx2*radius_y ;	// 初始化决策变量 
	movw R18,R14
	ldd R16,y+15
	ldd R17,y+16
	xcall empy16s
	ldd R2,y+17
	ldd R3,y+18
	ldd R10,y+19
	ldd R11,y+20
	add R10,R2
	adc R11,R3
	sub R10,R16
	sbc R11,R17
	.dbline 735
; 	
;    /* 计算出椭圆y轴上的两个端点坐标,作为作图起点 */
;    draw_x0 = draw_x1 = draw_x2 = draw_x3 = center_x;
	ldd R2,y+27
	ldd R3,y+

⌨️ 快捷键说明

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