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

📄 gui_basic_.lst

📁 一个基于MEGA16的GUI
💻 LST
📖 第 1 页 / 共 3 页
字号:
   1               		.file	"GUI_BASIC_.c"
   2               		.arch atmega16
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 130               	.global	GUI_Rectangle
 132               	GUI_Rectangle:
   1:GUI_BASIC_.c  **** /****************************************************************************************
   2:GUI_BASIC_.c  **** * 文件名:GUI_BASIC.C
   3:GUI_BASIC_.c  **** * 功能:GUI基本绘图函数。进行基本绘图运算,并调用相应的刷新程序更新LCD显示。
   4:GUI_BASIC_.c  **** * 日期:2004.02.26
   5:GUI_BASIC_.c  **** * 备注:图形操作层,进行各种图形运算操作。
   6:GUI_BASIC_.c  **** ****************************************************************************************/
   7:GUI_BASIC_.c  **** #include "config.h"
   8:GUI_BASIC_.c  **** 
   9:GUI_BASIC_.c  **** 
  10:GUI_BASIC_.c  **** /****************************************************************************
  11:GUI_BASIC_.c  **** * 名称:GUI_Rectangle()
  12:GUI_BASIC_.c  **** * 功能:画矩形。
  13:GUI_BASIC_.c  **** * 入口参数: x0		矩形左上角的x坐标值
  14:GUI_BASIC_.c  **** *           y0		矩形左上角的y坐标值
  15:GUI_BASIC_.c  **** *           x1      矩形右下角的x坐标值
  16:GUI_BASIC_.c  **** *           y1      矩形右下角的y坐标值
  17:GUI_BASIC_.c  **** *           color	显示颜色
  18:GUI_BASIC_.c  **** * 出口参数:无
  19:GUI_BASIC_.c  **** * 说明:操作失败原因是指定地址超出有效范围。
  20:GUI_BASIC_.c  **** ****************************************************************************/
  21:GUI_BASIC_.c  **** void  GUI_Rectangle(uint8 x0, uint8 y0, uint8 x1, uint8 y1, TCOLOR color)
  22:GUI_BASIC_.c  **** {  GUI_HLine(x0, y0, x1, color);
 134               	.LM1:
 135               	/* prologue: frame size=0 */
 136 0000 CF92      		push r12
 137 0002 DF92      		push r13
 138 0004 EF92      		push r14
 139 0006 FF92      		push r15
 140 0008 0F93      		push r16
 141 000a 1F93      		push r17
 142               	/* prologue end (size=6) */
 143 000c F82E      		mov r15,r24
 144 000e D62E      		mov r13,r22
 145 0010 C42E      		mov r12,r20
 146 0012 E22E      		mov r14,r18
 147 0014 202F      		mov r18,r16
 148 0016 0E94 0000 		call GUI_HLine
  23:GUI_BASIC_.c  ****    GUI_HLine(x0, y1, x1, color);
 150               	.LM2:
 151 001a 202F      		mov r18,r16
 152 001c 4C2D      		mov r20,r12
 153 001e 6E2D      		mov r22,r14
 154 0020 8F2D      		mov r24,r15
 155 0022 0E94 0000 		call GUI_HLine
  24:GUI_BASIC_.c  ****    GUI_RLine(x0, y0, y1, color);
 157               	.LM3:
 158 0026 202F      		mov r18,r16
 159 0028 4E2D      		mov r20,r14
 160 002a 6D2D      		mov r22,r13
 161 002c 8F2D      		mov r24,r15
 162 002e 0E94 0000 		call GUI_RLine
  25:GUI_BASIC_.c  ****    GUI_RLine(x1, y0, y1, color);
 164               	.LM4:
 165 0032 202F      		mov r18,r16
 166 0034 4E2D      		mov r20,r14
 167 0036 6D2D      		mov r22,r13
 168 0038 8C2D      		mov r24,r12
 169 003a 0E94 0000 		call GUI_RLine
 170               	/* epilogue: frame size=0 */
 171 003e 1F91      		pop r17
 172 0040 0F91      		pop r16
 173 0042 FF90      		pop r15
 174 0044 EF90      		pop r14
 175 0046 DF90      		pop r13
 176 0048 CF90      		pop r12
 177 004a 0895      		ret
 178               	/* epilogue end (size=7) */
 179               	/* function GUI_Rectangle size 38 (25) */
 181               	.Lscope0:
 188               	.global	GUI_RectangleFill
 190               	GUI_RectangleFill:
  26:GUI_BASIC_.c  **** }
  27:GUI_BASIC_.c  **** 
  28:GUI_BASIC_.c  **** 
  29:GUI_BASIC_.c  **** /****************************************************************************
  30:GUI_BASIC_.c  **** * 名称:GUI_RectangleFill()
  31:GUI_BASIC_.c  **** * 功能:填充矩形。画一个填充的矩形,填充色与边框色一样。
  32:GUI_BASIC_.c  **** * 入口参数: x0		矩形左上角的x坐标值
  33:GUI_BASIC_.c  **** *           y0		矩形左上角的y坐标值
  34:GUI_BASIC_.c  **** *           x1      矩形右下角的x坐标值
  35:GUI_BASIC_.c  **** *           y1      矩形右下角的y坐标值
  36:GUI_BASIC_.c  **** *           color	填充颜色
  37:GUI_BASIC_.c  **** * 出口参数:无
  38:GUI_BASIC_.c  **** * 说明:操作失败原因是指定地址超出有效范围。
  39:GUI_BASIC_.c  **** ****************************************************************************/
  40:GUI_BASIC_.c  **** void  GUI_RectangleFill(uint8 x0, uint8 y0, uint8 x1, uint8 y1, TCOLOR color)
  41:GUI_BASIC_.c  **** {  uint8  i;
 192               	.LM5:
 193               	/* prologue: frame size=0 */
 194 004c EF92      		push r14
 195 004e FF92      		push r15
 196 0050 0F93      		push r16
 197 0052 1F93      		push r17
 198 0054 CF93      		push r28
 199               	/* prologue end (size=5) */
 200 0056 F82E      		mov r15,r24
 201 0058 C62F      		mov r28,r22
 202 005a E42E      		mov r14,r20
 203 005c 122F      		mov r17,r18
  42:GUI_BASIC_.c  **** 
  43:GUI_BASIC_.c  ****    /* 先找出矩形左上角与右下角的两个点,保存在(x0,y0),(x1,y1) */
  44:GUI_BASIC_.c  ****    if(x0>x1) 						// 若x0>x1,则x0与x1交换
 205               	.LM6:
 206 005e 4817      		cp r20,r24
 207 0060 10F4      		brsh .L3
  45:GUI_BASIC_.c  ****    {  i = x0;
  46:GUI_BASIC_.c  ****       x0 = x1;
 209               	.LM7:
 210 0062 F42E      		mov r15,r20
  47:GUI_BASIC_.c  ****       x1 = i;
 212               	.LM8:
 213 0064 E82E      		mov r14,r24
 214               	.L3:
  48:GUI_BASIC_.c  ****    }
  49:GUI_BASIC_.c  ****    if(y0>y1)						// 若y0>y1,则y0与y1交换
 216               	.LM9:
 217 0066 1C17      		cp r17,r28
 218 0068 18F4      		brsh .L4
  50:GUI_BASIC_.c  ****    {  i = y0;
 220               	.LM10:
 221 006a 8C2F      		mov r24,r28
  51:GUI_BASIC_.c  ****       y0 = y1;
 223               	.LM11:
 224 006c C12F      		mov r28,r17
  52:GUI_BASIC_.c  ****       y1 = i;
 226               	.LM12:
 227 006e 182F      		mov r17,r24
 228               	.L4:
  53:GUI_BASIC_.c  ****    }
  54:GUI_BASIC_.c  ****    
  55:GUI_BASIC_.c  ****    /* 判断是否只是直线 */
  56:GUI_BASIC_.c  ****    if(y0==y1) 
 230               	.LM13:
 231 0070 C117      		cp r28,r17
 232 0072 39F4      		brne .L5
  57:GUI_BASIC_.c  ****    {  GUI_HLine(x0, y0, x1, color);
 234               	.LM14:
 235 0074 202F      		mov r18,r16
 236 0076 4E2D      		mov r20,r14
 237 0078 6C2F      		mov r22,r28
 238 007a 8F2D      		mov r24,r15
 239 007c 0E94 0000 		call GUI_HLine
  58:GUI_BASIC_.c  ****       return;
 241               	.LM15:
 242 0080 14C0      		rjmp .L2
 243               	.L5:
  59:GUI_BASIC_.c  ****    }
  60:GUI_BASIC_.c  ****    if(x0==x1) 
 245               	.LM16:
 246 0082 FE14      		cp r15,r14
 247 0084 39F4      		brne .L6
  61:GUI_BASIC_.c  ****    {  GUI_RLine(x0, y0, y1, color);
 249               	.LM17:
 250 0086 202F      		mov r18,r16
 251 0088 412F      		mov r20,r17
 252 008a 6C2F      		mov r22,r28
 253 008c 8F2D      		mov r24,r15
 254 008e 0E94 0000 		call GUI_RLine
  62:GUI_BASIC_.c  ****       return;
 256               	.LM18:
 257 0092 0BC0      		rjmp .L2
 258               	.L6:
  63:GUI_BASIC_.c  ****    }
  64:GUI_BASIC_.c  **** 
  65:GUI_BASIC_.c  ****    while(y0<=y1)						
  66:GUI_BASIC_.c  ****    {  GUI_HLine(x0, y0, x1, color);	// 当前画水平线
  67:GUI_BASIC_.c  ****       y0++;							// 下一行
 260               	.LM19:
 261 0094 1C17      		cp r17,r28
 262 0096 48F0      		brlo .L2
 263               	.L9:
 265               	.LM20:
 266 0098 202F      		mov r18,r16
 267 009a 4E2D      		mov r20,r14
 268 009c 6C2F      		mov r22,r28
 269 009e 8F2D      		mov r24,r15
 270 00a0 0E94 0000 		call GUI_HLine
 272               	.LM21:
 273 00a4 CF5F      		subi r28,lo8(-(1))
 274 00a6 1C17      		cp r17,r28
 275 00a8 B8F7      		brsh .L9
 276               	.L2:
 277               	/* epilogue: frame size=0 */
 278 00aa CF91      		pop r28
 279 00ac 1F91      		pop r17
 280 00ae 0F91      		pop r16
 281 00b0 FF90      		pop r15
 282 00b2 EF90      		pop r14
 283 00b4 0895      		ret
 284               	/* epilogue end (size=6) */
 285               	/* function GUI_RectangleFill size 53 (42) */
 290               	.Lscope1:
 296               	.global	GUI_Square
 298               	GUI_Square:
  68:GUI_BASIC_.c  ****    }
  69:GUI_BASIC_.c  **** }
  70:GUI_BASIC_.c  **** 
  71:GUI_BASIC_.c  **** 
  72:GUI_BASIC_.c  **** /****************************************************************************
  73:GUI_BASIC_.c  **** * 名称:GUI_Square()
  74:GUI_BASIC_.c  **** * 功能:画正方形。
  75:GUI_BASIC_.c  **** * 入口参数: x0		正方形左上角的x坐标值
  76:GUI_BASIC_.c  **** *           y0		正方形左上角的y坐标值
  77:GUI_BASIC_.c  **** *           with    正方形的边长
  78:GUI_BASIC_.c  **** *           color	显示颜色
  79:GUI_BASIC_.c  **** * 出口参数:无
  80:GUI_BASIC_.c  **** * 说明:操作失败原因是指定地址超出有效范围。
  81:GUI_BASIC_.c  **** ****************************************************************************/
  82:GUI_BASIC_.c  **** 
  83:GUI_BASIC_.c  **** void  GUI_Square(uint8 x0, uint8 y0, uint8  with, TCOLOR  color)
  84:GUI_BASIC_.c  **** {   if(with==0) return;
 300               	.LM22:
 301               	/* prologue: frame size=0 */
 302 00b6 0F93      		push r16
 303               	/* prologue end (size=1) */
 304 00b8 382F      		mov r19,r24
 305 00ba 022F      		mov r16,r18
 306 00bc 4423      		tst r20
 307 00be A1F0      		breq .L11
  85:GUI_BASIC_.c  **** 	if( (x0+with) > GUI_LCM_XMAX ) return;
 309               	.LM23:
 310 00c0 E42F      		mov r30,r20
 311 00c2 FF27      		clr r31
 312 00c4 CF01      		movw r24,r30
 313 00c6 830F      		add r24,r19
 314 00c8 911D      		adc r25,__zero_reg__
 315 00ca 8336      		cpi r24,99
 316 00cc 9105      		cpc r25,__zero_reg__
 317 00ce 64F4      		brge .L11
  86:GUI_BASIC_.c  **** 	if( (y0+with) > GUI_LCM_YMAX ) return;
 319               	.LM24:
 320 00d0 E60F      		add r30,r22
 321 00d2 F11D      		adc r31,__zero_reg__
 322 00d4 E434      		cpi r30,68
 323 00d6 F105      		cpc r31,__zero_reg__
 324 00d8 3CF4      		brge .L11
  87:GUI_BASIC_.c  **** 	GUI_Rectangle(x0, y0, x0+with, y0+with, color);
 326               	.LM25:
 327 00da 862F      		mov r24,r22
 328 00dc 840F      		add r24,r20
 329 00de 430F      		add r20,r19
 330 00e0 282F      		mov r18,r24
 331 00e2 832F      		mov r24,r19
 332 00e4 0E94 0000 		call GUI_Rectangle
 333               	.L11:
 334               	/* epilogue: frame size=0 */
 335 00e8 0F91      		pop r16
 336 00ea 0895      		ret
 337               	/* epilogue end (size=2) */
 338               	/* function GUI_Square size 27 (24) */
 340               	.Lscope2:
 347               	.global	GUI_Line
 349               	GUI_Line:
  88:GUI_BASIC_.c  **** }
  89:GUI_BASIC_.c  **** 
  90:GUI_BASIC_.c  **** 
  91:GUI_BASIC_.c  **** 
  92:GUI_BASIC_.c  **** /****************************************************************************
  93:GUI_BASIC_.c  **** * 名称:GUI_Line()
  94:GUI_BASIC_.c  **** * 功能:画任意两点之间的直线。
  95:GUI_BASIC_.c  **** * 入口参数: x0		直线起点的x坐标值
  96:GUI_BASIC_.c  **** *           y0		直线起点的y坐标值
  97:GUI_BASIC_.c  **** *           x1      直线终点的x坐标值
  98:GUI_BASIC_.c  **** *           y1      直线终点的y坐标值

⌨️ 快捷键说明

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