📄 t6963.s
字号:
X2:
.dbline 364
; fnSetPos(uRow,uCol);
; i++;
; }
; return uLen; //返回字串长度,汉字按2字节计算
.dbline -2
L67:
adiw R28,4
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l cData 3 c
.dbsym l uLen 2 c
.dbsym l i 1 c
.dbsym r c2 22 c
.dbsym l uRow 0 c
.dbsym r uCol 14 c
.dbsym r c1 20 c
.dbsym r k 10 i
.dbsym r j 12 c
.dbsym l ptr 14 pc
.dbsym r y 22 c
.dbsym r x 20 c
.dbend
.dbfunc e shortdelay _shortdelay fV
; i -> R20
; tt -> R16,R17
.even
_shortdelay::
xcall push_gset1
.dbline -1
.dbline 370
; }
; /*======================*/
; /* 延时*/
; /*======================*/
; void shortdelay(unsigned int tt)
; {
xjmp L109
L108:
.dbline 373
; unsigned char i;
; while (tt)
; {
.dbline 374
; i=100;
ldi R20,100
xjmp L112
L111:
.dbline 376
.dbline 377
dec R20
.dbline 378
L112:
.dbline 375
tst R20
brne L111
.dbline 379
subi R16,1
sbci R17,0
.dbline 380
L109:
.dbline 372
cpi R16,0
cpc R16,R17
brne L108
X3:
.dbline -2
.dbline 381
; while (i)
; {
; i--;
; }
; tt--;
; }
; }
L107:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r tt 16 i
.dbend
.dbfunc e point _point fV
; x1 -> R20
; s -> y+6
; y -> R10
; x -> R22
.even
_point::
xcall push_gset3
mov R10,R18
mov R22,R16
.dbline -1
.dbline 386
; /*************************/
; /* 画点*/
; /*************************/
; void point(unsigned char x,unsigned char y,unsigned char s)
; {
.dbline 388
; unsigned char x1;
; x1 = x >> 3; // 取Y方向分页地址
mov R20,R22
lsr R20
lsr R20
lsr R20
.dbline 389
; fnSetPos(y,x1); // 起点定位
mov R18,R20
mov R16,R10
xcall _fnSetPos
.dbline 390
; 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 391
; x1 = 0xF0 | x1 | s; // 字节内位置计算
ori R20,240
ldd R0,y+6
or R20,R0
.dbline 392
; fnPR12(x1); // 画上屏幕S显示属性8 画点0 擦除点
mov R16,R20
xcall _fnPR12
.dbline -2
.dbline 393
; }
L114:
xcall 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 Linexy _Linexy 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
_Linexy::
xcall push_gset5
mov R12,R18
mov R20,R16
sbiw R28,11
.dbline -1
.dbline 398
; /************************************************/
; /* 画线任意方向的斜线,直线数学方程aX+bY=1 */
; /************************************************/
; void Linexy(unsigned char x0,unsigned char y0,unsigned char xt,unsigned char yt,unsigned char s)
; {
.dbline 400
; register unsigned char t;
; int xerr = 0,yerr = 0;
clr R10
clr R11
.dbline 400
clr R22
clr R23
.dbline 403
; 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 404
; 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 405
; uRow = x0;
clr R21
.dbline 406
; uCol = y0;
clr R3
std y+2,R3
std y+1,R2
.dbline 407
; if(delta_x>0)
clr R2
ldd R4,y+3
ldd R5,y+4
cp R2,R4
cpc R3,R5
brge L116
.dbline 408
; {
.dbline 409
; incx = 1; // 设置单步方向
ldi R24,1
ldi R25,0
std y+8,R25
std y+7,R24
.dbline 410
; }
xjmp L117
L116:
.dbline 411
; else if( delta_x==0 )
ldd R2,y+3
ldd R3,y+4
tst R2
brne L118
tst R3
brne L118
X4:
.dbline 412
; {
.dbline 413
; incx=0; // 垂直线
clr R2
clr R3
std y+8,R3
std y+7,R2
.dbline 414
; }
xjmp L119
L118:
.dbline 416
; else
; {
.dbline 417
; incx = -1;
ldi R24,-1
ldi R25,-1
std y+8,R25
std y+7,R24
.dbline 418
; 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 420
;
; }
L119:
L117:
.dbline 421
; if(delta_y>0)
clr R2
clr R3
ldd R4,y+5
ldd R5,y+6
cp R2,R4
cpc R3,R5
brge L120
.dbline 422
; {
.dbline 423
; incy=1;
ldi R24,1
ldi R25,0
std y+10,R25
std y+9,R24
.dbline 424
; }
xjmp L121
L120:
.dbline 425
; else if( delta_y==0 )
ldd R2,y+5
ldd R3,y+6
tst R2
brne L122
tst R3
brne L122
X5:
.dbline 426
; {
.dbline 427
; incy=0; // 水平线
clr R2
clr R3
std y+10,R3
std y+9,R2
.dbline 428
; }
xjmp L123
L122:
.dbline 430
; else
; {
.dbline 431
; incy=-1;
ldi R24,-1
ldi R25,-1
std y+10,R25
std y+9,R24
.dbline 432
; 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 433
; }
L123:
L121:
.dbline 434
; 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 L124
.dbline 435
; {
.dbline 436
; distance=delta_x; // 选取基本增量坐标轴
movw R12,R4
.dbline 437
; }
xjmp L125
L124:
.dbline 439
; else
; {
.dbline 440
; distance=delta_y;
ldd R12,y+5
ldd R13,y+6
.dbline 441
; }
L125:
.dbline 442
; for( t=0;t <= distance+1; t++ ) // 画线输出
clr R14
xjmp L129
L126:
.dbline 443
; {
.dbline 444
; point(uRow,uCol,s); // 画点
ldd R0,y+25
std y+0,R0
ldd R18,y+1
mov R16,R20
xcall _point
.dbline 445
; xerr += delta_x;
ldd R2,y+3
ldd R3,y+4
add R10,R2
adc R11,R3
.dbline 446
; yerr += delta_y;
ldd R2,y+5
ldd R3,y+6
add R22,R2
adc R23,R3
.dbline 447
; if( xerr > distance )
cp R12,R10
cpc R13,R11
brge L130
.dbline 448
; {
.dbline 449
; xerr -= distance;
sub R10,R12
sbc R11,R13
.dbline 450
; uRow += incx;
ldd R2,y+7
ldd R3,y+8
add R20,R2
adc R21,R3
.dbline 451
; }
L130:
.dbline 452
; if( yerr > distance )
cp R12,R22
cpc R13,R23
brge L132
.dbline 453
; {
.dbline 454
; yerr -= distance;
sub R22,R12
sbc R23,R13
.dbline 455
; 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 456
; }
L132:
.dbline 457
L127:
.dbline 442
inc R14
L129:
.dbline 442
movw R24,R12
adiw R24,1
mov R2,R14
clr R3
cp R24,R2
cpc R25,R3
brge L126
.dbline -2
.dbline 458
; }
; }
L115:
adiw R28,11
xcall 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 circle _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
_circle::
xcall push_arg4
xcall push_gset5
sbiw R28,5
.dbline -1
.dbline 463
; /********************************************/
; /* 画圆数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
; /********************************************/
; void circle(unsigned char Ox,unsigned char Oy,unsigned char Rx,unsigned char s)
; {
.dbline 467
; 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 468
; rr = (unsigned int)Rx*Rx+1; // 补偿1 修正方形
ldd R2,y+19
clr R3
movw R18,R2
movw R16,R2
xcall empy16s
movw R22,R16
subi R22,255 ; offset = 1
sbci R23,255
.dbline 469
; 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 470
; for (xt=0;xt<=rs;xt++)
clr R20
clr R21
xjmp L138
L135:
.dbline 471
; {
.dbline 472
; xx = xt*xt;
movw R18,R20
movw R16,R20
xcall empy16s
movw R14,R16
xjmp L140
L139:
.dbline 474
.dbline 475
ldd R24,y+3
ldd R25,y+4
sbiw R24,1
std y+4,R25
std y+3,R24
.dbline 476
L140:
.dbline 473
movw R2,R22
sub R2,R14
sbc R3,R15
ldd R18,y+3
ldd R19,y+4
movw R16,R18
xcall empy16s
cp R2,R16
cpc R3,R17
brlo L139
.dbline 477
ldd R10,y+15
clr R11
add R10,R20
adc R11,R21
.dbline 478
ldd R12,y+17
clr R13
ldd R0,y+3
ldd R1,y+4
sub R12,R0
sbc R13,R1
.dbline 479
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 480
ldd R10,y+15
clr R11
sub R10,R20
sbc R11,R21
.dbline 481
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 482
ldd R12,y+17
clr R13
ldd R0,y+3
ldd R1,y+4
add R12,R0
adc R13,R1
.dbline 483
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 484
ldd R10,y+15
clr R11
add R10,R20
adc R11,R21
.dbline 485
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 487
ldd R10,y+15
clr R11
ldd R0,y+3
ldd R1,y+4
add R10,R0
adc R11,R1
.dbline 488
ldd R12,y+17
clr R13
sub R12,R20
sbc R13,R21
.dbline 489
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 490
ldd R10,y+15
clr R11
ldd R0,y+3
ldd R1,y+4
sub R10,R0
sbc R11,R1
.dbline 491
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 492
ldd R12,y+17
clr R13
add R12,R20
adc R13,R21
.dbline 493
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 494
ldd R10,y+15
clr R11
ldd R0,y+3
ldd R1,y+4
add R10,R0
adc R11,R1
.dbline 495
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _point
.dbline 496
L136:
.dbline 470
subi R20,255 ; offset = 1
sbci R21,255
L138:
.dbline 470
ldd R2,y+1
ldd R3,y+2
cp R2,R20
cpc R3,R21
brlo X6
xjmp L135
X6:
.dbline -2
.dbline 497
; while ((yt*yt)>(rr-xx))
; {
; yt--;
; }
; row = Ox+xt; // 第一象限
; col = Oy-yt;
; point(row,col,s);
; row = Ox-xt; // 第二象限
; point(row,col,s);
; col = Oy+yt; // 第三象限
; point(row,col,s);
; row = Ox+xt; // 第四象限
; point(row,col,s);
; /***************45度镜象画另一半***************/
; row = Ox+yt; // 第一象限
; col = Oy-xt;
; point(row,col,s);
; row = Ox-yt; // 第二象限
; point(row,col,s);
; col = Oy+xt; // 第三象限
; point(row,col,s);
; row = Ox+yt; // 第四象限
; point(row,col,s);
; }
; }
L134:
adiw R28,5
xcall 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:\NEW\AVR_T6963\t6963.c
_gCurCol::
.blkb 1
.dbfile D:\NEW\AVR_T6963/t6963.h
.dbsym e gCurCol _gCurCol c
_gCurRow::
.blkb 1
.dbsym e gCurRow _gCurRow c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -