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

📄 t6963.s

📁 LCD菜单的仿真及程序AVR_T6963.rar
💻 S
📖 第 1 页 / 共 4 页
字号:
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 + -