📄 240128.s
字号:
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 + -