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

📄 gui12864.s

📁 3D LCD for running graphical lCDs
💻 S
📖 第 1 页 / 共 4 页
字号:
	.byte 192,0
	.byte 254,0
	.byte 0,254
	.byte 0,0
	.byte 0,0
	.byte 0,254
	.byte 248,251
	.byte 248,248
	.byte 251,248
	.byte 248,251
	.byte 248,248
	.byte 251,250
	.byte 250,250
	.byte 250,250
	.byte 248,248
	.byte 251,248
	.byte 248,248
	.byte 248,249
	.byte 251,248
	.byte 248,248
	.byte 249,250
	.byte 250,250
	.byte 249,248
	.dbsym e menuicon1 _menuicon1 A[68:2:34]kc
_temperature::
	.byte 0,0
	.byte 64,32
	.byte 16,8
	.byte 6,6
	.byte 0,0
	.byte 255,255
	.byte 1,60
	.byte 'B,'B
	.byte 'B,0
	.dbsym e temperature _temperature A[18:18]kc
	.area text(rom, con, rel)
	.dbfile F:\CODE\LCD1286418\gui12864.h
	.dbfile F:\CODE\LCD1286418\gui12864.c
	.dbfunc e GuiDrawLine _GuiDrawLine fV
;          signy -> R14
;          signx -> R12
;             dy -> R22,R23
;             dx -> y+4
;           temp -> R20
;              y -> y+3
;              x -> y+2
;              p -> R10,R11
;          color -> y+24
;             y2 -> y+22
;             x2 -> y+20
;             y1 -> R10
;             x1 -> y+16
	.even
_GuiDrawLine::
	xcall push_arg4
	xcall push_xgsetF0FC
	mov R10,R18
	sbiw R28,6
	.dbline -1
	.dbline 46
; /***********************************************************************************************
; *  FILE NAME: gui12864.c
; *  PURPOSE: lcd1286418 GUI Firmware
; *  DESCRIPTION: ONLY FOR 128*64 PIXEL LCD 
; *  DEVELOPMENT HISTORY:
; *    Date         Author         Release                   Description Of Change
; *  --------    ------------     ---------     ------------------------------------------------
; *  08-04-11     XuGuohong         1.0                        Testing Edition    	     
; /**********************************************************************************************/
; 
; /* Include Global Parameters */
; #include <iom128v.h>
; #include "avr.h"
; #include "gui12864.h"
; 
; /* Include Global Parameters */
; 
; 
; /* Declare Prototypes */
; void GuiDrawLine(unsigned char,unsigned char,unsigned char,unsigned char,unsigned char);
; void GuiDrawCircle(unsigned char,unsigned char,unsigned char,unsigned char);
; void GuiDrawSquare(unsigned char,unsigned char,unsigned char,unsigned char,unsigned char);
; void GuiDisCharF3(unsigned char,unsigned char,unsigned char,unsigned char);
; void GuiDisStringF3(unsigned char,unsigned char,unsigned char *,unsigned char);
; //void GuiDisCharF2(unsigned char,unsigned char,unsigned char,unsigned char);
; //void GuiDisCharF1(unsigned char,unsigned char,unsigned char,unsigned char);
; void GuiDisLogo(unsigned char);
; void GuiDisRoolStringF3(unsigned char,unsigned char,unsigned char,unsigned char *,unsigned char);
; void GuiDisBattery(unsigned char,unsigned char,unsigned char);
; void GuiDisUsb(unsigned char,unsigned char);
; void GuiDisAcin(unsigned char,unsigned char);
; void GuiDisTemp(unsigned char,unsigned char,signed char);
; void GuiDisShortIcon(unsigned char,unsigned char,unsigned char);
; void GuiDisMainMenu(void);
; void GuiDisMenuIcon(unsigned char,unsigned char,unsigned char);
; 
; /*****************************************
; *  FUNCTION NAME: GuiDrawLine
; *  DESCRIPTION: Draw A Line From Between
; *               Any 2-Point
; *  (x1,y1) as start point
; *  (x2,y2) as end point
; *  Based On "Breshenham Line"
; /*****************************************/
; void  GuiDrawLine(unsigned char  x1, unsigned char  y1, unsigned char  x2, unsigned char  y2, unsigned char color) 
; {
	.dbline 55
;     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+16
	cp R24,R0
	brsh L4
X0:
	ldi R24,1
	ldi R25,0
	movw R14,R24
	xjmp L5
L4:
	clr R14
	clr R15
L5:
	ldi R24,63
	cp R24,R10
	brsh L6
X1:
	ldi R24,1
	ldi R25,0
	movw R12,R24
	xjmp L7
L6:
	clr R12
	clr R13
L7:
	ldi R24,123
	ldd R0,y+20
	cp R24,R0
	brsh L8
X2:
	ldi R22,1
	ldi R23,0
	xjmp L9
L8:
	clr R22
	clr R23
L9:
	ldi R24,63
	ldd R0,y+22
	cp R24,R0
	brsh L10
X3:
	ldi R20,1
	ldi R21,0
	xjmp L11
L10:
	clr R20
	clr R21
L11:
	movw R2,R14
	or R2,R12
	or R3,R13
	or R2,R22
	or R3,R23
	or R2,R20
	or R3,R21
	tst R2
	brne X4
	tst R3
	breq L2
X4:
	.dbline 56
; 	    return;
	xjmp L1
L2:
	.dbline 57
; 	x = x1;
	ldd R0,y+16
	std y+2,R0
	.dbline 58
; 	y = y1;
	std y+3,R10
	.dbline 60
; 	 /* 1.计算X方向的参数 */
; 	if(x2 > x1)								
	ldd R2,y+16
	clr R3
	ldd R4,y+20
	clr R5
	cp R2,R4
	cpc R3,R5
	brge L12
X5:
	.dbline 61
; 	{
	.dbline 62
; 	    dx = x2 - x1;	
	clr R3
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+5,R5
	std y+4,R4
	.dbline 63
; 		signx = 1;					 
	clr R12
	inc R12
	.dbline 64
; 	}
	xjmp L13
L12:
	.dbline 65
; 	else if(x2 < x1)
	ldd R0,y+20
	ldd R16,y+16
	cp R0,R16
	brsh L14
X6:
	.dbline 66
; 	{
	.dbline 67
; 	    dx = x1 - x2;	
	mov R2,R0
	clr R3
	mov R4,R16
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+5,R5
	std y+4,R4
	.dbline 68
; 		signx = -1;					 
	ldi R24,255
	mov R12,R24
	.dbline 69
; 	}
	xjmp L15
L14:
	.dbline 71
; 	else
; 	{
	.dbline 72
; 	    dx = 0;	
	clr R0
	clr R1
	std y+5,R1
	std y+4,R0
	.dbline 73
; 		signx = 0;					 
	clr R12
	.dbline 74
; 	}
L15:
L13:
	.dbline 76
; 	 /* 2.计算Y方向的参数 */
; 	if(y2 > y1)								
	mov R2,R10
	clr R3
	ldd R4,y+22
	clr R5
	cp R2,R4
	cpc R3,R5
	brge L16
X7:
	.dbline 77
; 	{
	.dbline 78
; 	    dy = y2 - y1;	
	clr R3
	mov R22,R4
	clr R23
	sub R22,R2
	sbc R23,R3
	.dbline 79
; 		signy = 1;					 
	clr R14
	inc R14
	.dbline 80
; 	}
	xjmp L17
L16:
	.dbline 81
; 	else if(y2 < y1)
	ldd R0,y+22
	cp R0,R10
	brsh L18
X8:
	.dbline 82
; 	{
	.dbline 83
; 	    dy = y1 - y2;	
	mov R2,R0
	clr R3
	mov R22,R10
	clr R23
	sub R22,R2
	sbc R23,R3
	.dbline 84
; 		signy = -1;					 
	ldi R24,255
	mov R14,R24
	.dbline 85
; 	}
	xjmp L19
L18:
	.dbline 87
; 	else
; 	{
	.dbline 88
; 	    dy = 0;	
	clr R22
	clr R23
	.dbline 89
; 		signy = 0;
	clr R14
	.dbline 90
; 	}
L19:
L17:
	.dbline 92
; 	/* 3.计算首个判断因子 */
; 	p = 2*dy -dx;	
	movw R10,R22
	lsl R10
	rol R11
	ldd R0,y+4
	ldd R1,y+5
	sub R10,R0
	sbc R11,R1
	.dbline 94
;     /* 4a.以X方向增长画图 */				 		 
; 	if(dx >= dy)								
	cp R0,R22
	cpc R1,R23
	brlt L20
X9:
	.dbline 95
; 	{
	.dbline 96
; 		for(temp=0; temp<dx; temp++)
	clr R20
	xjmp L25
L22:
	.dbline 97
; 		{
	.dbline 98
; 	        LcdDisplayDot(x,y,color);		/* 画点 */
	ldd R2,y+24
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+3
	clr R19
	ldd R16,y+2
	clr R17
	xcall _LcdDisplayDot
	.dbline 99
; 			if(p >= 0)						/* 根据P来判断画哪一点 */
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L26
X10:
	.dbline 100
; 			{
	.dbline 101
; 			    x = x + signx;
	ldd R0,y+2
	add R0,R12
	std y+2,R0
	.dbline 102
; 				y = y + signy;
	ldd R0,y+3
	add R0,R14
	std y+3,R0
	.dbline 103
; 				p = p + 2*(dy - dx);		/* dy,dx需要定义定义成有符号的,才能得到正确的值 */
	movw R2,R22
	ldd R0,y+4
	ldd R1,y+5
	sub R2,R0
	sbc R3,R1
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 104
; 			}
	xjmp L27
L26:
	.dbline 106
; 			else
; 			{
	.dbline 107
; 				x = x + signx;
	ldd R0,y+2
	add R0,R12
	std y+2,R0
	.dbline 108
; 				y = y;
	.dbline 109
; 				p = p + 2*dy;
	movw R2,R22
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 110
; 			}
L27:
	.dbline 111
; 		}
L23:
	.dbline 96
	inc R20
L25:
	.dbline 96
	mov R2,R20
	clr R3
	ldd R0,y+4
	ldd R1,y+5
	cp R2,R0
	cpc R3,R1
	brlt L22
X11:
	.dbline 112
;     }
	xjmp L21
L20:
	.dbline 114
; 	else								
; 	{
	.dbline 115
; 		for(temp=0; temp<dy; temp++)
	clr R20
	xjmp L31
L28:
	.dbline 116
; 		{
	.dbline 117
; 	        LcdDisplayDot(x,y,color);		/* 画点 */
	ldd R2,y+24
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+3
	clr R19
	ldd R16,y+2
	clr R17
	xcall _LcdDisplayDot
	.dbline 118
; 			if(p >= 0)						/* 根据P来判断画哪一点 */
	movw R24,R10
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brlt L32
X12:
	.dbline 119
; 			{
	.dbline 120
; 			    y = y + signy;
	ldd R0,y+3
	add R0,R14
	std y+3,R0
	.dbline 121
; 				x = x + signx;
	ldd R0,y+2
	add R0,R12
	std y+2,R0
	.dbline 122
; 				p = p + 2*(dx - dy);
	ldd R2,y+4
	ldd R3,y+5
	sub R2,R22
	sbc R3,R23
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 123
; 			}
	xjmp L33
L32:
	.dbline 125
; 			else
; 			{
	.dbline 126
; 				y = y + signy;
	ldd R0,y+3
	add R0,R14
	std y+3,R0
	.dbline 127
; 				x = x;
	.dbline 128
; 				p = p + 2*dx;
	ldd R2,y+4
	ldd R3,y+5
	lsl R2
	rol R3
	add R10,R2
	adc R11,R3
	.dbline 129
; 			}
L33:
	.dbline 130
; 		}
L29:
	.dbline 115
	inc R20
L31:
	.dbline 115
	mov R2,R20
	clr R3
	cp R2,R22
	cpc R3,R23
	brlt L28
X13:
	.dbline 131
;     }
L21:
	.dbline 132
;     LcdDisplayDot(x2,y2,color);		        /* 画最后一个点 */
	ldd R2,y+24
	clr R3
	std y+1,R3
	std y+0,R2
	ldd R18,y+22
	clr R19
	ldd R16,y+20
	clr R17
	xcall _LcdDisplayDot
	.dbline -2
L1:
	.dbline 0 ; func end
	adiw R28,6
	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 4 I
	.dbsym r temp 20 c
	.dbsym l y 3 c
	.dbsym l x 2 c
	.dbsym r p 10 I
	.dbsym l color 24 c
	.dbsym l y2 22 c
	.dbsym l x2 20 c
	.dbsym r y1 10 c
	.dbsym l x1 16 c
	.dbend
	.dbfunc e GuiDrawCircle _GuiDrawCircle fV
;        draw_x7 -> y+28
;        draw_x6 -> y+26
;        draw_y3 -> y+24
;        draw_y1 -> y+22
;        draw_x5 -> y+20
;        draw_x4 -> y+18
;        draw_y2 -> y+16
;        draw_y0 -> y+14
;             di -> R14,R15
;             yy -> R22,R23
;        draw_y7 -> R12,R13
;        draw_y6 -> y+12
;        draw_x3 -> y+10
;        draw_x1 -> y+8
;        draw_y5 -> R10,R11
;        draw_y4 -> y+6
;        draw_x2 -> y+4
;        draw_x0 -> y+2
;             xx -> R20,R21
;          color -> y+42
;              r -> R22
;             y0 -> R10
;             x0 -> R12
	.even
_GuiDrawCircle::
	xcall push_xgsetF0FC
	mov R10,R18
	mov R12,R16
	sbiw R28,30
	ldd R22,y+40
	.dbline -1
	.dbline 141
; }
; 
; /*****************************************
; *  FUNCTION NAME: GuiDrawCircle
; *  DESCRIPTION: Draw Circle
; *  Based On "Breshenham Circle"
; /*****************************************/
; void GuiDrawCircle(unsigned char  x0, unsigned char  y0, unsigned char  r, unsigned char  color)
; { 
	.dbline 153
;     int  draw_x0, draw_y0;                  /* 绘制图点坐标变量 */
;     int  draw_x1, draw_y1;         
;     int  draw_x2, draw_y2;         
;     int  draw_x3, draw_y3;         
;     int  draw_x4, draw_y4;         
;     int  draw_x5, draw_y5;         
;     int  draw_x6, draw_y6;         
;     int  draw_x7, draw_y7;         
;     int  xx, yy;                           /* 画圆控制变量 */ 
;     int  di;                               /* 决策变量 */
;     /* 参数过滤 */ 
;     if(r==0) 
	tst R22
	brne L35
X14:
	.dbline 154
;         return; 
	xjmp L34
L35:
	.dbline 156
;    /* 计算出8个特殊点(0、45、90、135、180、225、270度),进行显示 */ 
;    draw_x0 = draw_x1 = x0; 
	mov R2,R12
	clr R3
	std y+9,R3
	std y+8,R2
	clr R3
	std y+3,R3
	std y+2,R2
	.dbline 157
;    draw_y0 = draw_y1 = y0 + r; 
	mov R2,R22
	clr R3
	mov R4,R10
	clr R5
	add R4,R2
	adc R5,R3
	std y+23,R5
	std y+22,R4
	std y+15,R5
	std y+14,R4
	.dbline 158
;    LcdDisplayDot(draw_x0, draw_y0, color);                // 90度 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	movw R18,R4
	ldd R16,y+2
	ldd R17,y+3
	xcall _LcdDisplayDot
	.dbline 159
;    draw_x2 = draw_x3 = x0; 
	mov R2,R12
	clr R3
	std y+11,R3
	std y+10,R2
	clr R3
	std y+5,R3
	std y+4,R2
	.dbline 160
;    draw_y2 = draw_y3 = y0 - r; 
	mov R2,R22
	clr R3
	mov R4,R10
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+25,R5
	std y+24,R4
	std y+17,R5
	std y+16,R4
	.dbline 161
;    LcdDisplayDot(draw_x2, draw_y2, color);                // 270度 
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	movw R18,R4
	ldd R16,y+4
	ldd R17,y+5
	xcall _LcdDisplayDot
	.dbline 162
;    draw_x4 = draw_x6 = x0 + r; 
	mov R2,R22
	clr R3
	mov R14,R12
	clr R15
	add R14,R2
	adc R15,R3
	std y+27,R15
	std y+26,R14
	std y+19,R15
	std y+18,R14
	.dbline 163
;    draw_y4 = draw_y6 = y0; 
	mov R2,R10
	clr R3
	std y+13,R3
	std y+12,R2
	clr R3
	std y+7,R3
	std y+6,R2
	.dbline 164
;    LcdDisplayDot(draw_x4, draw_y4, color);                // 0度 
	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 165
;    draw_x5 = draw_x7 = x0 - r; 
	mov R2,R22
	clr R3
	mov R4,R12
	clr R5
	sub R4,R2
	sbc R5,R3
	movw R12,R4
	std y+29,R13
	std y+28,R12
	std y+21,R13
	std y+20,R12
	.dbline 166
;    draw_y5 = draw_y7 = y0; 
	mov R12,R10
	clr R13
	clr R11
	.dbline 167
;    LcdDisplayDot(draw_x5, draw_y5, color);                // 180度    
	ldd R2,y+42
	clr R3
	std y+1,R3
	std y+0,R2
	movw R18,R10
	movw R16,R4
	xcall _LcdDisplayDot
	.dbline 168
;    if(r==1) 
	cpi R22,1
	brne L37
X15:
	.dbline 169
;        return;                                            // 若半径为1,则已圆画完 
	xjmp L34
L37:
	.dbline 172
; 
;    /* 使用Bresenham法进行画圆 */ 
;    di = 3 - 2*r;                                          // 初始化决策变量 
	mov R2,R22
	clr R3
	lsl R2
	rol R3
	ldi R24,3
	ldi R25,0
	movw R14,R24
	sub R14,R2
	sbc R15,R3
	.dbline 173
;    xx = 0; 
	clr R20
	clr R21
	.dbline 174
;    yy = r;         
	clr R23
	xjmp L40
L39:
	.dbline 176
;    while(xx<yy) 
;    { 
	.dbline 177
;       if(di<0) 
	movw R24,R14
	cpi R24,0
	ldi R30,0
	cpc R25,R30
	brge L42
X16:
	.dbline 178
;       { 
	.dbline 179
;          di += 4*xx + 6; 
	movw R24,R20
	lsl R24
	rol R25
	lsl R24
	rol R25
	adiw R24,6
	add R14,R24
	adc R15,R25
	.dbline 180
;       } 
	xjmp L43
L42:
	.dbline 182
;       else 
;       { 
	.dbline 183
;          di += 4*(xx - yy) + 10; 
	movw R24,R20
	sub R24,R22
	sbc R25,R23
	lsl R24
	rol R25
	lsl R24
	rol R25
	adiw R24,10
	add R14,R24
	adc R15,R25
	.dbline 185
;            
;          yy--; 
	subi R22,1
	sbci R23,0
	.dbline 186
;          draw_y0--; 
	ldd R24,y+14
	ldd R25,y+15
	sbiw R24,1
	std y+15,R25
	std y+14,R24
	.dbline 187
;          draw_y1--; 
	ldd R24,y+22
	ldd R25,y+23
	sbiw R24,1
	std y+23,R25
	std y+22,R24
	.dbline 188
;          draw_y2++; 
	ldd R24,y+16
	ldd R25,y+17
	adiw R24,1
	std y+17,R25
	std y+16,R24
	.dbline 189
;          draw_y3++; 
	ldd R24,y+24
	ldd R25,y+25
	adiw R24,1
	std y+25,R25
	std y+24,R24
	.dbline 190
;          draw_x4--; 
	ldd R24,y+18
	ldd R25,y+19
	sbiw R24,1
	std y+19,R25
	std y+18,R24
	.dbline 191
;          draw_x5++; 
	ldd R24,y+20
	ldd R25,y+21
	adiw R24,1
	std y+21,R25
	std y+20,R24
	.dbline 192
;          draw_x6--; 
	ldd R24,y+26
	ldd R25,y+27
	sbiw R24,1
	std y+27,R25
	std y+26,R24
	.dbline 193
;          draw_x7++; 
	ldd R24,y+28
	ldd R25,y+29
	adiw R24,1
	std y+29,R25
	std y+28,R24
	.dbline 194
;       } 
L43:
	.dbline 196
;            
;       xx++; 
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 197
;       draw_x0++; 
	ldd R24,y+2
	ldd R25,y+3
	adiw R24,1
	std y+3,R25
	std y+2,R24
	.dbline 198
;       draw_x1--; 
	ldd R24,y+8
	ldd R25,y+9
	sbiw R24,1
	std y+9,R25

⌨️ 快捷键说明

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