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

📄 megalcd.s

📁 ewts avr驱动程序 角速度传感器 104为秒
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 252
; 		 hz_p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 253
; 		 ocmj_write(*hz_p-0xa0);
	movw R30,R20
	ldd R16,z+0
	subi R16,160
	xcall _ocmj_write
	.dbline 254
; 		 hz_p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 255
; 		 if(x<0x09)
	mov R24,R10
	cpi R24,9
	brsh L31
	.dbline 256
;  		    x++;
	inc R10
	xjmp L32
L31:
	.dbline 258
; 		 else
; 		    {
	.dbline 259
; 			 x=0x02;
	ldi R24,2
	mov R10,R24
	.dbline 260
; 			 y++;
	inc R22
	.dbline 261
; 			}	
L32:
	.dbline 262
L29:
	.dbline 246
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L28
	.dbline -2
L27:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r hz_p 20 pc
	.dbsym r y 22 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e asc_tran _asc_tran fV
;          asc_p -> R20,R21
;              y -> R22
;              x -> R10
	.even
_asc_tran::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 267
; 		}
; 	}
; /*          传送ASCII字母到LCD            */
; /*          x:0x00~0x0f y:0~64            */	
; void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)
;     {
	.dbline 268
; 	 x+=4;
	mov R24,R10
	subi R24,252    ; addi 4
	mov R10,R24
	xjmp L35
L34:
	.dbline 270
; 	 while((*asc_p)!=0)
; 	    {
	.dbline 271
; 		 ocmj_write(0xf1);
	ldi R16,241
	xcall _ocmj_write
	.dbline 272
; 		 ocmj_write(x);
	mov R16,R10
	xcall _ocmj_write
	.dbline 273
; 		 ocmj_write(y);
	mov R16,R22
	xcall _ocmj_write
	.dbline 274
; 		 ocmj_write(*asc_p);
	movw R30,R20
	ldd R16,z+0
	xcall _ocmj_write
	.dbline 275
; 		 asc_p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 276
; 		 if (x<0x13) 
	mov R24,R10
	cpi R24,19
	brsh L37
	.dbline 277
; 		    x++;
	inc R10
	xjmp L38
L37:
	.dbline 279
; 		 else
; 		   {
	.dbline 280
; 		    x=0x04;
	ldi R24,4
	mov R10,R24
	.dbline 281
; 			y+=8;		    
	subi R22,248    ; addi 8
	.dbline 282
; 		   }	
L38:
	.dbline 283
L35:
	.dbline 269
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L34
	.dbline -2
L33:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r asc_p 20 pc
	.dbsym r y 22 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e pset _pset fV
;              y -> R20
;              x -> R22
	.even
_pset::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 287
; 		}	
; 	 }
; /*            画点函数              */
; void pset(unsigned char x,unsigned char y)
;      {
	.dbline 288
; 	  ocmj_write(0xf2);
	ldi R16,242
	xcall _ocmj_write
	.dbline 289
; 	  ocmj_write(x+32);
	mov R16,R22
	subi R16,224    ; addi 32
	xcall _ocmj_write
	.dbline 290
; 	  ocmj_write(y);
	mov R16,R20
	xcall _ocmj_write
	.dbline -2
L39:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e line _line fV
;           incy -> R20
;           incx -> R22
;        delta_y -> R10,R11
;        delta_x -> y+4
;              t -> R14
;           yerr -> y+2
;           xerr -> y+0
;       distance -> R12,R13
;             y2 -> y+22
;             x2 -> y+20
;             y1 -> y+18
;             x1 -> y+16
	.even
_line::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,6
	.dbline -1
	.dbline 294
; 	 }	
; /*             画线函数          */	 
; void line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
; {
	.dbline 296
;     unsigned char t;
; 	signed int xerr=0,yerr=0;
	clr R0
	clr R1
	std y+1,R1
	std y+0,R0
	.dbline 296
	std y+3,R1
	std y+2,R0
	.dbline 301
; 	signed int delta_x,delta_y,distance;
; 	signed char incx,incy;
; 
; /* 	计算两个方向的长度 */
; 	delta_x=x2-x1;
	ldd R2,y+16
	clr R3
	ldd R4,y+20
	clr R5
	sub R4,R2
	sbc R5,R3
	std y+5,R5
	std y+4,R4
	.dbline 302
; 	delta_y=y2-y1;
	ldd R2,y+18
	clr R3
	ldd R10,y+22
	clr R11
	sub R10,R2
	sbc R11,R3
	.dbline 305
; 
; /* 计算增量的方向,增量为"0"表示为垂直或水平线 */
; 	if(delta_x>0) 
	clr R2
	movw R0,R4
	cp R2,R4
	cpc R3,R5
	brge L41
	.dbline 306
; 	     incx=1;
	ldi R22,1
	xjmp L42
L41:
	.dbline 308
; 	else 
; 	    {
	.dbline 309
; 		 if( delta_x==0 )
	ldd R0,y+4
	ldd R1,y+5
	tst R0
	brne L43
	tst R1
	brne L43
X0:
	.dbline 310
; 		      incx=0;
	clr R22
	xjmp L44
L43:
	.dbline 312
; 		 else 
; 		      {
	.dbline 313
; 			   incx=-1;
	ldi R22,255
	.dbline 314
; 			   delta_x =-delta_x;
	ldd R24,y+4
	ldd R25,y+5
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	std y+5,R25
	std y+4,R24
	.dbline 315
; 			  }
L44:
	.dbline 316
; 		}
L42:
	.dbline 317
; 	if(delta_y>0) 
	clr R2
	clr R3
	cp R2,R10
	cpc R3,R11
	brge L45
	.dbline 318
; 	      incy=1;
	ldi R20,1
	xjmp L46
L45:
	.dbline 320
; 	else 
; 	    {
	.dbline 321
; 		 if( delta_y==0 )
	tst R10
	brne L47
	tst R11
	brne L47
X1:
	.dbline 322
; 		     incy=0;
	clr R20
	xjmp L48
L47:
	.dbline 324
; 		 else 
; 		     {
	.dbline 325
; 			  incy=-1;
	ldi R20,255
	.dbline 326
; 			  delta_y =-delta_y;
	movw R24,R10
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	movw R10,R24
	.dbline 327
; 			 }
L48:
	.dbline 328
; 		}
L46:
	.dbline 330
; /*  确定画线的范围 */
; 	if( delta_x > delta_y ) distance=delta_x;
	ldd R0,y+4
	ldd R1,y+5
	cp R10,R0
	cpc R11,R1
	brge L49
	.dbline 330
	movw R12,R0
	xjmp L50
L49:
	.dbline 331
; 	else distance=delta_y;
	movw R12,R10
L50:
	.dbline 334
; 
; /* 画线 */
; 	for(t=0;t<= distance+1;t++) 
	clr R14
	xjmp L54
L51:
	.dbline 335
; 	   {
	.dbline 336
; 		ocmj_write(0xf2);
	ldi R16,242
	xcall _ocmj_write
	.dbline 337
; 	    ocmj_write(x1+32);
	ldd R16,y+16
	subi R16,224    ; addi 32
	xcall _ocmj_write
	.dbline 338
; 	    ocmj_write(y1);
	ldd R16,y+18
	xcall _ocmj_write
	.dbline 339
;  	    xerr += delta_x ;
	ldd R0,y+0
	ldd R1,y+1
	ldd R16,y+4
	ldd R17,y+5
	add R0,R16
	adc R1,R17
	std y+1,R1
	std y+0,R0
	.dbline 340
; 		yerr += delta_y ;
	ldd R0,y+2
	ldd R1,y+3
	add R0,R10
	adc R1,R11
	std y+3,R1
	std y+2,R0
	.dbline 341
; 		if( xerr > distance ) 
	ldd R0,y+0
	ldd R1,y+1
	cp R12,R0
	cpc R13,R1
	brge L55
	.dbline 342
; 		    {
	.dbline 343
; 			xerr-=distance;
	sub R0,R12
	sbc R1,R13
	std y+1,R1
	std y+0,R0
	.dbline 344
;  		    x1+=incx;
	ldd R0,y+16
	add R0,R22
	std y+16,R0
	.dbline 345
; 		    }
L55:
	.dbline 346
; 		if( yerr > distance ) 
	ldd R0,y+2
	ldd R1,y+3
	cp R12,R0
	cpc R13,R1
	brge L57
	.dbline 347
; 		    {
	.dbline 348
; 			yerr-=distance;
	sub R0,R12
	sbc R1,R13
	std y+3,R1
	std y+2,R0
	.dbline 349
;  		    y1+=incy;
	ldd R0,y+18
	add R0,R20
	std y+18,R0
	.dbline 350
;     		}
L57:
	.dbline 351
L52:
	.dbline 334
	inc R14
L54:
	.dbline 334
	movw R24,R12
	adiw R24,1
	mov R2,R14
	clr R3
	cp R24,R2
	cpc R25,R3
	brge L51
	.dbline -2
L40:
	adiw R28,6
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r incy 20 C
	.dbsym r incx 22 C
	.dbsym r delta_y 10 I
	.dbsym l delta_x 4 I
	.dbsym r t 14 c
	.dbsym l yerr 2 I
	.dbsym l xerr 0 I
	.dbsym r distance 12 I
	.dbsym l y2 22 c
	.dbsym l x2 20 c
	.dbsym l y1 18 c
	.dbsym l x1 16 c
	.dbend
	.dbfunc e circle _circle fV
;             rs -> R20,R21
;             xt -> R22,R23
;             rr -> y+2
;             xx -> R14,R15
;              y -> R12
;              x -> R10
;             yt -> y+0
;              r -> y+18
;             y0 -> y+16
;             x0 -> y+14
	.even
_circle::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,4
	.dbline -1
	.dbline 355
;   	  }
; }	 
; /*            画圆函数             */
; void circle(unsigned char x0,unsigned char y0,unsigned char r)
;    {
	.dbline 358
; 	unsigned char x,y;
; 	unsigned int xx,rr,xt,yt,rs;
; 	yt=r;
	ldd R2,y+18
	clr R3
	std y+1,R3
	std y+0,R2
	.dbline 359
; 	rr=r*r+1;			//补偿 1 修正方形
	ldd R0,y+18
	mov R16,R0
	mul R0,R16
	movw R24,R0
	adiw R24,1
	std y+3,R25
	std y+2,R24
	.dbline 360
; 	rs=yt*3/4;      //画8分之一圆弧
	ldi R16,3
	ldi R17,0
	ldd R18,y+0
	ldd R19,y+1
	xcall empy16s
	movw R20,R16
	lsr R21
	ror R20
	lsr R21
	ror R20
	.dbline 361
; 	for (xt=0;xt<=rs;xt++)
	clr R22
	clr R23
	xjmp L63
L60:
	.dbline 362
; 	{
	.dbline 363
; 		xx=xt*xt;
	movw R18,R22
	movw R16,R22
	xcall empy16s
	movw R14,R16
	xjmp L65
L64:
	.dbline 365
	ldd R24,y+0
	ldd R25,y+1
	sbiw R24,1
	std y+1,R25
	std y+0,R24
L65:
	.dbline 364
	ldd R2,y+2
	ldd R3,y+3
	sub R2,R14
	sbc R3,R15
	ldd R18,y+0
	ldd R19,y+1
	movw R16,R18
	xcall empy16s
	cp R2,R16
	cpc R3,R17
	brlo L64
	.dbline 366
	ldd R10,y+14
	clr R11
	add R10,R22
	adc R11,R23
	.dbline 367
	ldd R12,y+16
	clr R13
	ldd R0,y+0
	ldd R1,y+1
	sub R12,R0
	sbc R13,R1
	.dbline 368
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 369
	ldd R10,y+14
	clr R11
	sub R10,R22
	sbc R11,R23
	.dbline 370
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 371
	ldd R12,y+16
	clr R13
	ldd R0,y+0
	ldd R1,y+1
	add R12,R0
	adc R13,R1
	.dbline 372
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 373
	ldd R10,y+14
	clr R11
	add R10,R22
	adc R11,R23
	.dbline 374
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 376
	ldd R10,y+14
	clr R11
	ldd R0,y+0
	ldd R1,y+1
	add R10,R0
	adc R11,R1
	.dbline 377
	ldd R12,y+16
	clr R13
	sub R12,R22
	sbc R13,R23
	.dbline 378
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 379
	ldd R10,y+14
	clr R11
	ldd R0,y+0
	ldd R1,y+1
	sub R10,R0
	sbc R11,R1
	.dbline 380
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 381
	ldd R12,y+16
	clr R13
	add R12,R22
	adc R13,R23
	.dbline 382
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 383
	ldd R10,y+14
	clr R11
	ldd R0,y+0
	ldd R1,y+1
	add R10,R0
	adc R11,R1
	.dbline 384
	mov R18,R12
	mov R16,R10
	xcall _pset
	.dbline 385
L61:
	.dbline 361
	subi R22,255  ; offset = 1
	sbci R23,255
L63:
	.dbline 361
	cp R20,R22
	cpc R21,R23
	brlo X2
	xjmp L60
X2:
	.dbline -2
L59:
	adiw R28,4
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r rs 20 i
	.dbsym r xt 22 i
	.dbsym l rr 2 i
	.dbsym r xx 14 i
	.dbsym r y 12 c
	.dbsym r x 10 c
	.dbsym l yt 0 i
	.dbsym l r 18 c
	.dbsym l y0 16 c
	.dbsym l x0 14 c
	.dbend

⌨️ 快捷键说明

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