📄 display.s
字号:
.dbline 533
.dbline 534
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R20,R16
.dbline 535
subi R22,1
sbci R23,0
.dbline 536
L157:
.dbline 532
L159:
.dbline 532
cpi R22,0
cpc R22,R23
brne L156
X10:
.dbline 537
; {
; y=y*2;
; ch--;
; }
; if(xx<64)
mov R24,R12
cpi R24,64
brsh L160
.dbline 538
; {
.dbline 539
; set_page_L(yy/8);
mov R16,R14
lsr R16
lsr R16
lsr R16
xcall _set_page_L
.dbline 540
; set_col_addr_L(xx);
mov R16,R12
xcall _set_col_addr_L
.dbline 541
; ch=read_LCD(LEFT);
clr R16
xcall _read_LCD
mov R22,R16
clr R23
.dbline 542
; set_col_addr_L(xx);
mov R16,R12
xcall _set_col_addr_L
.dbline 543
; if(flag)
tst R10
breq L162
.dbline 544
; write_LCD(LEFT,DATA,ch|y);
movw R2,R22
or R2,R20
or R3,R21
std y+0,R2
ldi R18,1
clr R16
xcall _write_LCD
xjmp L161
L162:
.dbline 546
; else
; {
.dbline 547
; y=~y;
com R20
com R21
.dbline 548
; ch&=y;
and R22,R20
and R23,R21
.dbline 549
; write_LCD(LEFT,DATA,ch|y);
movw R2,R22
or R2,R20
or R3,R21
std y+0,R2
ldi R18,1
clr R16
xcall _write_LCD
.dbline 550
; }
.dbline 551
; }
xjmp L161
L160:
.dbline 553
; else
; {
.dbline 554
; set_page_R(yy/8);
mov R16,R14
lsr R16
lsr R16
lsr R16
xcall _set_page_R
.dbline 555
; set_col_addr_R(xx-64);
mov R16,R12
subi R16,64
xcall _set_col_addr_R
.dbline 556
; ch=read_LCD(RIGHT);
ldi R16,1
xcall _read_LCD
mov R22,R16
clr R23
.dbline 557
; set_col_addr_R(xx-64);
mov R16,R12
subi R16,64
xcall _set_col_addr_R
.dbline 558
; if(flag)
tst R10
breq L164
.dbline 559
; write_LCD(RIGHT,DATA,ch|y);
movw R2,R22
or R2,R20
or R3,R21
std y+0,R2
ldi R18,1
ldi R16,1
xcall _write_LCD
xjmp L165
L164:
.dbline 561
; else
; {
.dbline 562
; y=~y;
com R20
com R21
.dbline 563
; ch&=y;
and R22,R20
and R23,R21
.dbline 564
; write_LCD(RIGHT,DATA,ch|y);
movw R2,R22
or R2,R20
or R3,R21
std y+0,R2
ldi R18,1
ldi R16,1
xcall _write_LCD
.dbline 565
; }
L165:
.dbline 566
L161:
.dbline -2
.dbline 567
; }
; }
L155:
adiw R28,1
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym r ch 22 i
.dbsym r y 20 i
.dbsym r flag 10 c
.dbsym r yy 14 c
.dbsym r xx 12 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 693
; /*void point(void)
; {
; uchar x1, y1, y;
;
; x1 = CurCol;
; y1 = CurRow;
; CurRow = y1 >> 3; //取Y方向分页地址
; Rddata(); // get cbyte on screen
; y = y1 & 0x07; //字节内位置计算
; Wrdata(cbyte | (1 << y)); //画上屏幕 /
; CurCol = x1; ///恢复xy坐标 /
; CurRow = y1;
; } */
;
; /************************************************/
; /*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
; /************************************************/
;
; /*void circle(uchar Ox, uchar Oy, uchar Rx)
; {
; unsigned int xx, rr, xt, yt, rs;
;
; yt = Rx;
; rr = Rx * Rx + 1; //补偿 1 修正方形
; rs = (yt + (yt >> 1)) >> 1; //(*0.75)分开1/8圆弧来画
; for (xt = 0; xt <= rs; xt++)
; {
; xx = xt * xt;
; while ((yt * yt) > (rr - xx))
; yt--;
; col = Ox + xt; //第一象限
; row=Oy-yt;
; point();
; col = Ox - xt; //第二象限
; point();
; row = Oy + yt; //第三象限
; point();
; col = Ox + xt; //第四象限
; point();
;
; // ***************45度镜象画另一半***************
;
; col = Ox + yt; //第一象限
; row = Oy - xt;
; point();
; col = Ox - yt; //第二象限
; point();
; row = Oy + xt; //第三象限
; point();
; col = Ox + yt; //第四象限
; point();
; }
; }
; */
;
; /************************************************/
; /*画线。任意方向的斜线,直线数学方程 aX+bY=1 */
; /************************************************/
;
; /*void Linexy(uchar x0,uchar y0,uchar xt,uchar yt)
; {
; uchar t;
; int xerr = 0, yerr = 0, delta_x, delta_y, distance;
; int incx, incy;
;
; delta_x = xt - x0; // 计算坐标增量
; delta_y = yt - y0;
; col = x0;
; row = y0;
;
; if (delta_x > 0)
; {
; incx = 1; // 水平+方向
; }
; else if (delta_x == 0 )
; {
; incx = 0; // 垂直线
; }
; else
; {
; incx =- 1; //水平负方向
; delta_x =- delta_x;
; }
;
; if (delta_y > 0)
; {
; incy = 1; // 垂直+方向
; }
; else
; if (delta_y == 0)
; {
; incy = 0; // 水平线
; }
; else
; {
; incy =- 1; //垂直-方向
; delta_y =- delta_y;
; }
;
;
; if (delta_x > delta_y)
; distance = delta_x; //选取基本增量坐标轴
; else
; distance = delta_y;
;
; for (t = 0; t <= distance + 1; t++)
; { // 画线输出
; point(); // 画点
; xerr += delta_x;
; yerr += delta_y;
;
; if (xerr > distance)
; {
; xerr -= distance;
; col += incx;
; }
; if (yerr > distance)
; {
; yerr -= distance;
; row += incy;
; }
; }
; }
; */
; void Linexy(uchar x0,uchar y0,uchar xt,uchar yt,uchar s)
; {
.dbline 695
; register uchar t;
; int xerr=0,yerr=0,delta_x,delta_y,distance;
clr R10
clr R11
.dbline 695
clr R22
clr R23
.dbline 698
; 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 699
; 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 700
; uRow = x0;
clr R21
.dbline 701
; uCol = y0;
clr R3
std y+2,R3
std y+1,R2
.dbline 702
; if(delta_x>0) incx=1; //设置单步方向
clr R2
ldd R4,y+3
ldd R5,y+4
cp R2,R4
cpc R3,R5
brge L167
.dbline 702
ldi R24,1
ldi R25,0
std y+8,R25
std y+7,R24
xjmp L168
L167:
.dbline 703
; else if( delta_x==0 ) incx=0; //垂直线
ldd R2,y+3
ldd R3,y+4
tst R2
brne L169
tst R3
brne L169
X11:
.dbline 703
clr R2
clr R3
std y+8,R3
std y+7,R2
xjmp L170
L169:
.dbline 704
; else {incx=-1;delta_x=-delta_x;}
.dbline 704
ldi R24,-1
ldi R25,-1
std y+8,R25
std y+7,R24
.dbline 704
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 704
L170:
L168:
.dbline 706
;
; if(delta_y>0) incy=1;
clr R2
clr R3
ldd R4,y+5
ldd R5,y+6
cp R2,R4
cpc R3,R5
brge L171
.dbline 706
ldi R24,1
ldi R25,0
std y+10,R25
std y+9,R24
xjmp L172
L171:
.dbline 707
; else if( delta_y==0 ) incy=0; //水平线
ldd R2,y+5
ldd R3,y+6
tst R2
brne L173
tst R3
brne L173
X12:
.dbline 707
clr R2
clr R3
std y+10,R3
std y+9,R2
xjmp L174
L173:
.dbline 708
; else {incy=-1;delta_y=-delta_y;}
.dbline 708
ldi R24,-1
ldi R25,-1
std y+10,R25
std y+9,R24
.dbline 708
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 708
L174:
L172:
.dbline 710
;
; if( delta_x > delta_y ) distance=delta_x; //选取基本增量坐标轴
ldd R2,y+5
ldd R3,y+6
ldd R4,y+3
ldd R5,y+4
cp R2,R4
cpc R3,R5
brge L175
.dbline 710
movw R12,R4
xjmp L176
L175:
.dbline 711
; else distance=delta_y;
ldd R12,y+5
ldd R13,y+6
L176:
.dbline 713
;
; for( t=0;t <= distance+1; t++ )
clr R14
xjmp L180
L177:
.dbline 714
; { //画线输出
.dbline 715
; pixel(uRow,uCol,s); //画点
ldd R0,y+25
std y+0,R0
ldd R18,y+1
mov R16,R20
xcall _pixel
.dbline 716
; xerr += delta_x ;
ldd R2,y+3
ldd R3,y+4
add R10,R2
adc R11,R3
.dbline 717
; yerr += delta_y ;
ldd R2,y+5
ldd R3,y+6
add R22,R2
adc R23,R3
.dbline 719
;
; if( xerr > distance )
cp R12,R10
cpc R13,R11
brge L181
.dbline 720
; {
.dbline 721
; xerr-=distance;
sub R10,R12
sbc R11,R13
.dbline 722
; uRow+=incx;
ldd R2,y+7
ldd R3,y+8
add R20,R2
adc R21,R3
.dbline 723
; }
L181:
.dbline 724
; if( yerr > distance )
cp R12,R22
cpc R13,R23
brge L183
.dbline 725
; {
.dbline 726
; yerr-=distance;
sub R22,R12
sbc R23,R13
.dbline 727
; 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 728
; }
L183:
.dbline 729
L178:
.dbline 713
inc R14
L180:
.dbline 713
movw R24,R12
adiw R24,1
mov R2,R14
clr R3
cp R24,R2
cpc R25,R3
brge L177
.dbline -2
.dbline 730
; }
; }
L166:
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 736
;
; /************************************************/
; /*画圆。数学方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
; /************************************************/
; void circle(uchar Ox,uchar Oy,uchar Rx,uchar s)
; {
.dbline 738
; unsigned int xx,rr,xt,yt,rs,row,col;
; yt=Rx;
ldd R2,y+19
clr R3
std y+4,R3
std y+3,R2
.dbline 739
; rr=Rx*Rx+1; //补偿 1 修正方形
ldd R0,y+19
mov R16,R0
mul R0,R16
movw R22,R0
subi R22,255 ; offset = 1
sbci R23,255
.dbline 740
; rs=(yt+(yt>>1))>>1; //(*0.75)分开1/8圆弧来画
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 741
; for (xt=0;xt<=rs;xt++)
clr R20
clr R21
xjmp L189
L186:
.dbline 742
; {
.dbline 743
; xx=xt*xt;
movw R18,R20
movw R16,R20
xcall empy16s
movw R14,R16
xjmp L191
L190:
.dbline 744
ldd R24,y+3
ldd R25,y+4
sbiw R24,1
std y+4,R25
std y+3,R24
L191:
.dbline 744
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 L190
.dbline 745
ldd R10,y+15
clr R11
add R10,R20
adc R11,R21
.dbline 746
ldd R12,y+17
clr R13
ldd R0,y+3
ldd R1,y+4
sub R12,R0
sbc R13,R1
.dbline 747
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _pixel
.dbline 748
ldd R10,y+15
clr R11
sub R10,R20
sbc R11,R21
.dbline 749
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _pixel
.dbline 750
ldd R12,y+17
clr R13
ldd R0,y+3
ldd R1,y+4
add R12,R0
adc R13,R1
.dbline 751
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _pixel
.dbline 752
ldd R10,y+15
clr R11
add R10,R20
adc R11,R21
.dbline 753
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _pixel
.dbline 757
ldd R10,y+15
clr R11
ldd R0,y+3
ldd R1,y+4
add R10,R0
adc R11,R1
.dbline 758
ldd R12,y+17
clr R13
sub R12,R20
sbc R13,R21
.dbline 759
ldd R0,y+21
std y+0,R0
mov R18,R12
mov R16,R10
xcall _pixel
.dbline 760
ldd R10,y+15
cl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -