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

📄 240128.s

📁 用ATmega88驱动LCD240128
💻 S
📖 第 1 页 / 共 3 页
字号:
	ldd R1,y+16
	add R2,R0
	adc R3,R1
	ldi R24,34
	mul R24,R20
	movw R4,R0
	ldi R24,<_GB_16x16
	ldi R25,>_GB_16x16
	movw R30,R4
	add R30,R24
	adc R31,R25
	lpm R30,Z
	movw R26,R2
	ld R6,x
	cp R6,R30
	brne L63
	ldi R24,<_GB_16x16+1
	ldi R25,>_GB_16x16+1
	movw R30,R4
	add R30,R24
	adc R31,R25
	lpm R30,Z
	adiw R26,1
	ld R2,x
	cp R2,R30
	brne L63
	.dbline 207
;                 {
	.dbline 208
;                     break;
	rjmp L61
L63:
	.dbline 210
L60:
	.dbline 204
	inc R20
L62:
	.dbline 204
	cpi R20,10
	brlo L59
L61:
	.dbline 211
;                 }	
;             }
;             for(k=0;k<sizeof(GB_16x16[0].Msk)/2;k++)
	clr R14
	clr R15
	rjmp L69
L66:
	.dbline 212
;             {
	.dbline 213
;                 LCD_SET_ADD(uRow+k,uCol);
	mov R18,R10
	mov R16,R22
	clr R17
	add R16,R14
	adc R17,R15
	rcall _LCD_SET_ADD
	.dbline 214
;         	    LCD_WR_CODE(LCD_AUT_WR);      		// 写数据
	ldi R16,176
	rcall _LCD_WR_CODE
	.dbline 215
;         	    if(j < sizeof(GB_16x16)/sizeof(GB_16x16[0]))
	cpi R20,10
	brsh L71
	.dbline 216
;           	    {
	.dbline 217
;           	        LCD_WR_DATA(GB_16x16[j].Msk[k*2]);
	ldi R24,34
	mul R24,R20
	movw R2,R0
	ldi R24,<_GB_16x16+2
	ldi R25,>_GB_16x16+2
	add R2,R24
	adc R3,R25
	ldi R16,2
	ldi R17,0
	movw R18,R14
	rcall empy16s
	movw R30,R16
	add R30,R2
	adc R31,R3
	lpm R16,Z
	rcall _LCD_WR_DATA
	.dbline 218
;           	        LCD_WR_DATA(GB_16x16[j].Msk[k*2+1]);
	ldi R24,34
	mul R24,R20
	movw R2,R0
	ldi R24,<_GB_16x16+2
	ldi R25,>_GB_16x16+2
	add R2,R24
	adc R3,R25
	ldi R16,2
	ldi R17,0
	movw R18,R14
	rcall empy16s
	movw R30,R16
	adiw R30,1
	add R30,R2
	adc R31,R3
	lpm R16,Z
	rcall _LCD_WR_DATA
	.dbline 219
;           	    }
	rjmp L72
L71:
	.dbline 221
;         	    else   		// 未找到该字
;           	    {
	.dbline 222
;           	        if(k < sizeof(GB_16x16[0].Msk)/4)
	movw R24,R14
	cpi R24,8
	ldi R30,0
	cpc R25,R30
	brsh L75
	.dbline 223
;             	    {
	.dbline 224
;                         LCD_WR_DATA(0x00);
	clr R16
	rcall _LCD_WR_DATA
	.dbline 225
;             		    LCD_WR_DATA(0x00);
	clr R16
	rcall _LCD_WR_DATA
	.dbline 226
;             	    }
	rjmp L76
L75:
	.dbline 228
;          	        else
;             	    {
	.dbline 229
;             		    LCD_WR_DATA(0xff);
	ldi R16,255
	rcall _LCD_WR_DATA
	.dbline 230
; 			            LCD_WR_DATA(0xff);
	ldi R16,255
	rcall _LCD_WR_DATA
	.dbline 231
;             	    }
L76:
	.dbline 232
;                 }
L72:
	.dbline 233
	ldi R16,178
	rcall _LCD_WR_CODE
	.dbline 234
L67:
	.dbline 211
	movw R24,R14
	adiw R24,1
	movw R14,R24
L69:
	.dbline 211
	movw R24,R14
	cpi R24,16
	ldi R30,0
	cpc R25,R30
	brsh X0
	rjmp L66
X0:
	.dbline 235
;         	    LCD_WR_CODE(LCD_AUT_OVR);
;             }
;       	    uCol += 2;
	mov R24,R10
	subi R24,254    ; addi 2
	mov R10,R24
	.dbline 236
;       	    i++;
	inc R12
	.dbline 237
;         }		
L54:
	.dbline 238
;     	if(uCol >= 30)      					// 光标后移
	mov R24,R10
	cpi R24,30
	brlo L78
	.dbline 239
;       	{
	.dbline 240
;       	    uRow += 16;
	subi R22,240    ; addi 16
	.dbline 241
;             if(uRow < 0x80)
	cpi R22,128
	brsh L80
	.dbline 242
;             {
	.dbline 243
;                 uCol -= 30;
	subi R24,30
	mov R10,R24
	.dbline 244
;             }
	rjmp L81
L80:
	.dbline 246
;       	    else
;             {
	.dbline 247
;         	uRow = 0;
	clr R22
	.dbline 248
;         	uCol = 0;
	clr R10
	.dbline 249
;             }
L81:
	.dbline 250
;       	 }
L78:
	.dbline 251
	mov R18,R10
	mov R16,R22
	rcall _LCD_SET_ADD
	.dbline 252
	inc R12
	.dbline 253
L51:
	.dbline 187
	ldd R0,y+0
	cp R12,R0
	brsh X1
	rjmp L50
X1:
	.dbline -2
L46:
	adiw R28,1
	rcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l length 0 c
	.dbsym r uRow 22 c
	.dbsym r uCol 10 c
	.dbsym r i 12 c
	.dbsym r k 14 i
	.dbsym r j 20 c
	.dbsym l ptr 15 pc
	.dbsym l y 13 c
	.dbsym l x 11 c
	.dbend
	.dbfunc e PRINT_point _PRINT_point fV
;             x1 -> R20
;              s -> y+6
;              y -> R10
;              x -> R22
	.even
_PRINT_point::
	rcall push_gset3
	mov R10,R18
	mov R22,R16
	.dbline -1
	.dbline 259
;          LCD_SET_ADD(uRow,uCol);
;     	 i++;
;     }
; }
; /*******************************************************************************
;  画点
; *******************************************************************************/
; void PRINT_point(unsigned char x,unsigned char y,unsigned char s)
; {
	.dbline 261
;     unsigned char x1;
;     x1 = x >> 3; // 取Y方向分页地址
	mov R20,R22
	lsr R20
	lsr R20
	lsr R20
	.dbline 262
;     LCD_SET_ADD(y,x1); // 起点定位
	mov R18,R20
	mov R16,R10
	rcall _LCD_SET_ADD
	.dbline 263
;     x1 = turnf[ x & 0x07 ];
	ldi R24,<_turnf
	ldi R25,>_turnf
	mov R30,R22
	clr R31
	andi R30,7
	andi R31,0
	add R30,R24
	adc R31,R25
	lpm R20,Z
	.dbline 264
;     x1 = 0xF0 | x1 | s; // 字节内位置计算
	ori R20,240
	ldd R0,y+6
	or R20,R0
	.dbline 265
;     LCD_WR_CODE(x1); // 画上屏幕S显示属性8 画点0 擦除点
	mov R16,R20
	rcall _LCD_WR_CODE
	.dbline -2
L82:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r x1 20 c
	.dbsym l s 6 c
	.dbsym r y 10 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e PRINT_line _PRINT_line fV
;           incy -> y+9
;           incx -> y+7
;        delta_y -> y+5
;        delta_x -> y+3
;           uCol -> y+1
;           uRow -> R20,R21
;           yerr -> R22,R23
;           xerr -> R10,R11
;       distance -> R12,R13
;              t -> R14
;              s -> y+25
;             yt -> y+23
;             xt -> y+21
;             y0 -> R12
;             x0 -> R20
	.even
_PRINT_line::
	rcall push_gset5
	mov R12,R18
	mov R20,R16
	sbiw R28,11
	.dbline -1
	.dbline 271
; }
; /*******************************************************************************
;  画线任意方向的斜线,直线数学方程aX+bY=1
; *******************************************************************************/
; void PRINT_line(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
; {
	.dbline 273
;     register unsigned char t;
;     int xerr = 0,yerr = 0;
	clr R10
	clr R11
	.dbline 273
	clr R22
	clr R23
	.dbline 276
;     int delta_x,delta_y,distance;
;     int incx,incy,uRow,uCol;
;     delta_x = xt-x0; // 计算坐标增量
	mov R2,R20
	clr R3
	ldd R4,y+21
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+4,R5
	std y+3,R4
	.dbline 277
;     delta_y = yt-y0;
	mov R2,R12
	clr R3
	ldd R4,y+23
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+6,R5
	std y+5,R4
	.dbline 278
;     uRow = x0;
	clr R21
	.dbline 279
;     uCol = y0;
	clr R3
	std y+2,R3
	std y+1,R2
	.dbline 280
;     if(delta_x>0)
	clr R2
	ldd R4,y+3
	ldd R5,y+4
	cp R2,R4
	cpc R3,R5
	brge L84
	.dbline 281
;     {
	.dbline 282
;         incx = 1; // 设置单步方向
	ldi R24,1
	ldi R25,0
	std y+8,R25
	std y+7,R24
	.dbline 283
;     }
	rjmp L85
L84:
	.dbline 284
;     else if( delta_x==0 )
	ldd R2,y+3
	ldd R3,y+4
	tst R2
	brne L86
	tst R3
	brne L86
X2:
	.dbline 285
;     {
	.dbline 286
;         incx=0; // 垂直线
	clr R2
	clr R3
	std y+8,R3
	std y+7,R2
	.dbline 287
;     }
	rjmp L87
L86:
	.dbline 289
;     else
;     {
	.dbline 290
;         incx = -1;
	ldi R24,-1
	ldi R25,-1
	std y+8,R25
	std y+7,R24
	.dbline 291
;         delta_x = -delta_x;
	ldd R24,y+3
	ldd R25,y+4
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	std y+4,R25
	std y+3,R24
	.dbline 293
;      
;     }
L87:
L85:
	.dbline 294
;     if(delta_y>0)
	clr R2
	clr R3
	ldd R4,y+5
	ldd R5,y+6
	cp R2,R4
	cpc R3,R5
	brge L88
	.dbline 295
;     {
	.dbline 296
;         incy=1;
	ldi R24,1
	ldi R25,0
	std y+10,R25
	std y+9,R24
	.dbline 297
;     }
	rjmp L89
L88:
	.dbline 298
;     else if( delta_y==0 ) 
	ldd R2,y+5
	ldd R3,y+6
	tst R2
	brne L90
	tst R3
	brne L90
X3:
	.dbline 299
;     {
	.dbline 300
;         incy=0; // 水平线
	clr R2
	clr R3
	std y+10,R3
	std y+9,R2
	.dbline 301
;     }
	rjmp L91
L90:
	.dbline 303
;     else 
;     {
	.dbline 304
;         incy=-1;
	ldi R24,-1
	ldi R25,-1
	std y+10,R25
	std y+9,R24
	.dbline 305
;         delta_y=-delta_y;
	ldd R24,y+5
	ldd R25,y+6
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	std y+6,R25
	std y+5,R24
	.dbline 306
;     }
L91:
L89:
	.dbline 307
;     if( delta_x > delta_y ) 
	ldd R2,y+5
	ldd R3,y+6
	ldd R4,y+3
	ldd R5,y+4
	cp R2,R4
	cpc R3,R5
	brge L92
	.dbline 308
;     {
	.dbline 309
;         distance=delta_x; // 选取基本增量坐标轴
	movw R12,R4
	.dbline 310
;     }
	rjmp L93
L92:
	.dbline 312
;     else 
;     {
	.dbline 313
;         distance=delta_y;
	ldd R12,y+5
	ldd R13,y+6
	.dbline 314
;     }
L93:
	.dbline 315
;     for( t=0;t <= distance+1; t++ )   // 画线输出
	clr R14
	rjmp L97
L94:
	.dbline 316
;     { 
	.dbline 317
;         PRINT_point(uRow,uCol,s); // 画点
	ldd R0,y+25
	std y+0,R0
	ldd R18,y+1
	mov R16,R20
	rcall _PRINT_point
	.dbline 318
;         xerr += delta_x;
	ldd R2,y+3
	ldd R3,y+4
	add R10,R2
	adc R11,R3
	.dbline 319
;         yerr += delta_y;
	ldd R2,y+5
	ldd R3,y+6
	add R22,R2
	adc R23,R3
	.dbline 320
;         if( xerr > distance )
	cp R12,R10
	cpc R13,R11
	brge L98
	.dbline 321
;         {
	.dbline 322
;             xerr -= distance;
	sub R10,R12
	sbc R11,R13
	.dbline 323
;             uRow += incx;
	ldd R2,y+7
	ldd R3,y+8
	add R20,R2
	adc R21,R3
	.dbline 324
;         }
L98:
	.dbline 325
;         if( yerr > distance )
	cp R12,R22
	cpc R13,R23
	brge L100
	.dbline 326
;         {
	.dbline 327
;             yerr -= distance;
	sub R22,R12
	sbc R23,R13
	.dbline 328
;             uCol += incy;
	ldd R2,y+9
	ldd R3,y+10
	ldd R4,y+1
	ldd R5,y+2
	add R4,R2
	adc R5,R3
	std y+2,R5
	std y+1,R4
	.dbline 329
;         }
L100:
	.dbline 330
L95:
	.dbline 315
	inc R14
L97:
	.dbline 315
	movw R24,R12
	adiw R24,1
	mov R2,R14
	clr R3
	cp R24,R2
	cpc R25,R3
	brge L94
	.dbline -2
L83:
	adiw R28,11
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l incy 9 I
	.dbsym l incx 7 I
	.dbsym l delta_y 5 I
	.dbsym l delta_x 3 I
	.dbsym l uCol 1 I
	.dbsym r uRow 20 I
	.dbsym r yerr 22 I
	.dbsym r xerr 10 I
	.dbsym r distance 12 I
	.dbsym r t 14 c
	.dbsym l s 25 c
	.dbsym l yt 23 c
	.dbsym l xt 21 c
	.dbsym r y0 12 c
	.dbsym r x0 20 c
	.dbend
	.dbfunc e PRINT_circle _PRINT_circle fV
;             rs -> y+1
;             xt -> R20,R21
;             rr -> R22,R23
;             xx -> R14,R15
;            col -> R12,R13
;            row -> R10,R11
;             yt -> y+3
;              s -> y+21
;             Rx -> y+19
;             Oy -> y+17
;             Ox -> y+15
	.even
_PRINT_circle::
	rcall push_arg4
	rcall push_gset5
	sbiw R28,5
	.dbline -1
	.dbline 336
;     }
; }
; /*******************************************************************************
;  画圆数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2
; *******************************************************************************/
; void PRINT_circle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
; {
	.dbline 340
;     unsigned int xx,rr;
;     unsigned int xt,yt;
;     unsigned int rs,row,col;
;     yt = Rx;
	ldd R2,y+19
	clr R3
	std y+4,R3
	std y+3,R2
	.dbline 341
;     rr = (unsigned int)Rx*Rx+1; // 补偿1 修正方形
	ldd R2,y+19
	clr R3
	movw R18,R2
	movw R16,R2
	rcall empy16s
	movw R22,R16
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 342
;     rs = (yt+(yt>>1))>>1; // (*0.75)分开1/8圆弧来画
	ldd R2,y+3
	ldd R3,y+4
	lsr R3
	ror R2
	ldd R4,y+3
	ldd R5,y+4
	add R4,R2
	adc R5,R3
	lsr R5
	ror R4
	std y+2,R5
	std y+1,R4
	.dbline 343
;     for (xt=0;xt<=rs;xt++)
	clr R20
	clr R21
	rjmp L106
L103:
	.dbline 344
;     {
	.dbline 345
;         xx = xt*xt;
	movw R18,R20
	movw R16,R20
	rcall empy16s
	movw R14,R16
	rjmp L108
L107:
	.dbline 347
	.dbline 348
	ldd R24,y+3
	ldd R25,y+4
	sbiw R24,1
	std y+4,R25
	std y+3,R24
	.dbline 349
L108:
	.dbline 346
	movw R2,R22
	sub R2,R14
	sbc R3,R15
	ldd R18,y+3
	ldd R19,y+4
	movw R16,R18
	rcall empy16s
	cp R2,R16
	cpc R3,R17
	brlo L107
	.dbline 350
	ldd R10,y+15
	clr R11
	add R10,R20
	adc R11,R21
	.dbline 351
	ldd R12,y+17
	clr R13
	ldd R0,y+3
	ldd R1,y+4
	sub R12,R0
	sbc R13,R1
	.dbline 352
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 353
	ldd R10,y+15
	clr R11
	sub R10,R20
	sbc R11,R21
	.dbline 354
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 355
	ldd R12,y+17
	clr R13
	ldd R0,y+3
	ldd R1,y+4
	add R12,R0
	adc R13,R1
	.dbline 356
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 357
	ldd R10,y+15
	clr R11
	add R10,R20
	adc R11,R21
	.dbline 358
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 360
	ldd R10,y+15
	clr R11
	ldd R0,y+3
	ldd R1,y+4
	add R10,R0
	adc R11,R1
	.dbline 361
	ldd R12,y+17
	clr R13
	sub R12,R20
	sbc R13,R21
	.dbline 362
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 363
	ldd R10,y+15
	clr R11
	ldd R0,y+3
	ldd R1,y+4
	sub R10,R0
	sbc R11,R1
	.dbline 364
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 365
	ldd R12,y+17
	clr R13
	add R12,R20
	adc R13,R21
	.dbline 366
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 367
	ldd R10,y+15
	clr R11
	ldd R0,y+3
	ldd R1,y+4
	add R10,R0
	adc R11,R1
	.dbline 368
	ldd R0,y+21
	std y+0,R0
	mov R18,R12
	mov R16,R10
	rcall _PRINT_point
	.dbline 369
L104:
	.dbline 343
	subi R20,255  ; offset = 1
	sbci R21,255
L106:
	.dbline 343
	ldd R2,y+1
	ldd R3,y+2
	cp R2,R20
	cpc R3,R21
	brlo X4
	rjmp L103
X4:
	.dbline -2
L102:
	adiw R28,5
	rcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym l rs 1 i
	.dbsym r xt 20 i
	.dbsym r rr 22 i
	.dbsym r xx 14 i
	.dbsym r col 12 i
	.dbsym r row 10 i
	.dbsym l yt 3 i
	.dbsym l s 21 c
	.dbsym l Rx 19 c
	.dbsym l Oy 17 c
	.dbsym l Ox 15 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\工作\240X12~1\(000)\240128.C
_gCurCol::
	.blkb 1
	.dbsym e gCurCol _gCurCol c
_gCurRow::
	.blkb 1
	.dbsym e gCurRow _gCurRow c

⌨️ 快捷键说明

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