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

📄 课程设计.s

📁 PS2控制代码123456789
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbsym l data 6 i
	.dbsym l yy 4 i
	.dbsym r xx 20 i
	.dbsym r type 22 i
	.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 266
; }
; /*********************************************************************/
;  /***********************传送ASCII字母到LCD ********************** */
; /***************************    x:0x00~0x0f y:0~64 显示8*16个字符           */	
; void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)
;     {
	.dbline 267
; 	 x+=4;
	mov R24,R10
	subi R24,252    ; addi 4
	mov R10,R24
	xjmp L37
L36:
	.dbline 269
; 	 while((*asc_p)!=0)
; 	    {
	.dbline 270
; 		 ocmj_write(0xf1);
	ldi R16,241
	xcall _ocmj_write
	.dbline 271
; 		 ocmj_write(x);
	mov R16,R10
	xcall _ocmj_write
	.dbline 272
; 		 ocmj_write(y);
	mov R16,R22
	xcall _ocmj_write
	.dbline 273
; 		 ocmj_write(*asc_p);
	movw R30,R20
	ldd R16,z+0
	xcall _ocmj_write
	.dbline 274
; 		 asc_p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 275
; 		 if (x<0x13)
	mov R24,R10
	cpi R24,19
	brsh L39
	.dbline 276
; 		    x++;
	inc R10
	xjmp L40
L39:
	.dbline 278
; 		 else
; 		   {
	.dbline 279
; 		    x=0x04;
	ldi R24,4
	mov R10,R24
	.dbline 280
; 			y+=8;		
	subi R22,248    ; addi 8
	.dbline 281
; 		   }	
L40:
	.dbline 282
L37:
	.dbline 268
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L36
	.dbline -2
L35:
	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 write_hazi _write_hazi fV
;          data2 -> y+6
;          data1 -> y+4
;             yy -> R20,R21
;             xx -> R22,R23
	.even
_write_hazi::
	xcall push_gset2
	movw R20,R18
	movw R22,R16
	.dbline -1
	.dbline 289
; 		}	
; 	 }
; 
; /**********************************************/
; 	       /* 写汉字初始化  *///找代码
; /**********************************************/
; void write_hazi(unsigned xx,unsigned yy,unsigned data1,unsigned data2)
; {
	.dbline 290
;     ocmj_write(0xf0);//表示汉字//f0表示特殊符号,如&,以下
	ldi R16,240
	xcall _ocmj_write
	.dbline 291
;     ocmj_write(xx);
	mov R16,R22
	xcall _ocmj_write
	.dbline 292
;     ocmj_write(yy);
	mov R16,R20
	xcall _ocmj_write
	.dbline 293
;     ocmj_write(data1);
	ldd R16,y+4
	ldd R17,y+5
	xcall _ocmj_write
	.dbline 294
; 	ocmj_write(data2);
	ldd R16,y+6
	ldd R17,y+7
	xcall _ocmj_write
	.dbline -2
L41:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data2 6 i
	.dbsym l data1 4 i
	.dbsym r yy 20 i
	.dbsym r xx 22 i
	.dbend
	.dbfunc e hz_tran _hz_tran fV
;           hz_p -> R20,R21
;              y -> R22
;              x -> R10
	.even
_hz_tran::
	xcall push_gset3
	mov R22,R18
	mov R10,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 301
; }
; 
; /* ***********************************************************
;                        传送LCD内部汉字数据到LCD
; /* ************************** x:0x00~0x07 y:0x00~0x03********/
; void hz_tran(unsigned char x,unsigned char y,unsigned char *hz_p)
;     {
	.dbline 302
; 	 x+=2;
	mov R24,R10
	subi R24,254    ; addi 2
	mov R10,R24
	xjmp L44
L43:
	.dbline 304
;      while((*hz_p)!=0)
; 	    {
	.dbline 305
; 		 ocmj_write(0xf0);
	ldi R16,240
	xcall _ocmj_write
	.dbline 306
; 		 ocmj_write(x);
	mov R16,R10
	xcall _ocmj_write
	.dbline 307
; 		 ocmj_write(y);
	mov R16,R22
	xcall _ocmj_write
	.dbline 308
; 		 ocmj_write(*hz_p-0xa0);
	movw R30,R20
	ldd R16,z+0
	subi R16,160
	xcall _ocmj_write
	.dbline 309
; 		 hz_p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 310
; 		 ocmj_write(*hz_p-0xa0);
	movw R30,R20
	ldd R16,z+0
	subi R16,160
	xcall _ocmj_write
	.dbline 311
; 		 hz_p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 312
; 		 if(x<0x09)
	mov R24,R10
	cpi R24,9
	brsh L46
	.dbline 313
;  		    x++;
	inc R10
	xjmp L47
L46:
	.dbline 315
; 		 else
; 		    {
	.dbline 316
; 			 x=0x02;
	ldi R24,2
	mov R10,R24
	.dbline 317
; 			 y++;
	inc R22
	.dbline 318
; 			}	
L47:
	.dbline 319
L44:
	.dbline 303
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L43
	.dbline -2
L42:
	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 up _up fV
	.even
_up::
	.dbline -1
	.dbline 326
; 		}
; 	}
; /* ***********************************************************
;                    移动函数
; /* **********************************************************/
; 
; void up(void)                //上移
; {
	.dbline 327
;      ocmj_write(0xf5);
	ldi R16,245
	xcall _ocmj_write
	.dbline -2
L48:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e down _down fV
	.even
_down::
	.dbline -1
	.dbline 331
; }
; 
; void down(void)              //下移
; {
	.dbline 332
;     ocmj_write(0xf6);
	ldi R16,246
	xcall _ocmj_write
	.dbline -2
L49:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e left _left fV
	.even
_left::
	.dbline -1
	.dbline 336
; }
; 
; void left(void)              //左移
; {
	.dbline 337
;      ocmj_write(0xf7);
	ldi R16,247
	xcall _ocmj_write
	.dbline -2
L50:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e right _right fV
	.even
_right::
	.dbline -1
	.dbline 341
; }
; 
; void right(void)             //右移
; {
	.dbline 342
;     ocmj_write(0xf8);
	ldi R16,248
	xcall _ocmj_write
	.dbline -2
L51:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e fangbai _fangbai fV
	.even
_fangbai::
	.dbline -1
	.dbline 345
; }
; void fangbai()
; {
	.dbline 346
;  ocmj_write(0xfa);
	ldi R16,250
	xcall _ocmj_write
	.dbline -2
L52:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e mouse _mouse fV
	.even
_mouse::
	.dbline -1
	.dbline 350
;  
; }
; void  mouse (void)
; {
	.dbline 351
;     ocmj_write(0xFB);
	ldi R16,251
	xcall _ocmj_write
	.dbline 352
;     ocmj_write(0x07);
	ldi R16,7
	xcall _ocmj_write
	.dbline -2
L53:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e pset _pset fV
;              y -> R20
;              x -> R22
	.even
_pset::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 359
; }	
; 	
; /* ***********************************************************
;                       画点函数
; /* **********************************************************/
; void pset(unsigned char x,unsigned char y)
;      {
	.dbline 360
; 	  ocmj_write(0xf2);
	ldi R16,242
	xcall _ocmj_write
	.dbline 361
; 	  ocmj_write(x+32);
	mov R16,R22
	subi R16,224    ; addi 32
	xcall _ocmj_write
	.dbline 362
; 	  ocmj_write(y);
	mov R16,R20
	xcall _ocmj_write
	.dbline -2
L54:
	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 369
; 	 }	
; 
; /* ***********************************************************
;                       画线函数
; /* **********************************************************/
; void line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
; {
	.dbline 371
;     unsigned char t;
; 	signed int xerr=0,yerr=0;
	clr R0
	clr R1
	std y+1,R1
	std y+0,R0
	.dbline 371
	std y+3,R1
	std y+2,R0
	.dbline 376
; 	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 377
; 	delta_y=y2-y1;
	ldd R2,y+18
	clr R3
	ldd R10,y+22
	clr R11
	sub R10,R2
	sbc R11,R3
	.dbline 380
; 
; /* 计算增量的方向,增量为"0"表示为垂直或水平线 */
; 	if(delta_x>0)
	clr R2
	movw R0,R4
	cp R2,R4
	cpc R3,R5
	brge L56
	.dbline 381
; 	     incx=1;
	ldi R22,1
	xjmp L57
L56:
	.dbline 383
; 	else
; 	    {
	.dbline 384
; 		 if( delta_x==0 )
	ldd R0,y+4
	ldd R1,y+5
	tst R0
	brne L58
	tst R1
	brne L58
X0:
	.dbline 385
; 		      incx=0;
	clr R22
	xjmp L59
L58:
	.dbline 387
; 		 else
; 		      {
	.dbline 388
; 			   incx=-1;
	ldi R22,255
	.dbline 389
; 			   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 390
; 			  }
L59:
	.dbline 391
; 		}
L57:
	.dbline 392
; 	if(delta_y>0)
	clr R2
	clr R3
	cp R2,R10
	cpc R3,R11
	brge L60
	.dbline 393
; 	      incy=1;
	ldi R20,1
	xjmp L61
L60:
	.dbline 395
; 	else
; 	    {
	.dbline 396
; 		 if( delta_y==0 )
	tst R10
	brne L62
	tst R11
	brne L62
X1:
	.dbline 397
; 		     incy=0;
	clr R20
	xjmp L63
L62:
	.dbline 399
; 		 else
; 		     {
	.dbline 400
; 			  incy=-1;
	ldi R20,255
	.dbline 401
; 			  delta_y =-delta_y;
	movw R24,R10
	com R24
	com R25
	subi R24,0xFF
	sbci R25,0xFF
	movw R10,R24
	.dbline 402
; 			 }
L63:
	.dbline 403
; 		}
L61:
	.dbline 405
; /*  确定画线的范围 */
; 	if( delta_x > delta_y ) distance=delta_x;
	ldd R0,y+4
	ldd R1,y+5
	cp R10,R0
	cpc R11,R1
	brge L64
	.dbline 405
	movw R12,R0
	xjmp L65
L64:
	.dbline 406
; 	else distance=delta_y;
	movw R12,R10
L65:
	.dbline 409
; 
; /* 画线 */
; 	for(t=0;t<= distance+1;t++)
	clr R14
	xjmp L69
L66:
	.dbline 410
; 	   {
	.dbline 411
; 		ocmj_write(0xf2);
	ldi R16,242
	xcall _ocmj_write
	.dbline 412
; 	    ocmj_write(x1+32);
	ldd R16,y+16
	subi R16,224    ; addi 32
	xcall _ocmj_write
	.dbline 413
; 	    ocmj_write(y1);
	ldd R16,y+18
	xcall _ocmj_write
	.dbline 414
;  	    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 415
; 		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 416
; 		if( xerr > distance )
	ldd R0,y+0
	ldd R1,y+1
	cp R12,R0
	cpc R13,R1
	brge L70
	.dbline 417
; 		    {
	.dbline 418
; 			xerr-=distance;
	sub R0,R12
	sbc R1,R13
	std y+1,R1
	std y+0,R0
	.dbline 419
;  		    x1+=incx;
	ldd R0,y+16
	add R0,R22
	std y+16,R0
	.dbline 420
; 		    }
L70:
	.dbline 421
; 		if( yerr > distance )
	ldd R0,y+2
	ldd R1,y+3
	cp R12,R0
	cpc R13,R1
	brge L72
	.dbline 422
; 		    {
	.dbline 423
; 			yerr-=distance;
	sub R0,R12
	sbc R1,R13
	std y+3,R1
	std y+2,R0
	.dbline 424
;  		    y1+=incy;
	ldd R0,y+18
	add R0,R20
	std y+18,R0
	.dbline 425
;     		}
L72:
	.dbline 426
L67:
	.dbline 409
	inc R14
L69:
	.dbline 409
	movw R24,R12
	adiw R24,1
	mov R2,R14
	clr R3
	cp R24,R2
	cpc R25,R3
	brge L66
	.dbline -2
L55:
	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 scan_key _scan_key fc
;              i -> R22
	.even
_scan_key::
	xcall push_gset2
	.dbline -1
	.dbline 433
;   	  }
; }	     
; 
; /**********************************************/
; 	   /* 键盘子程序  */
; /**********************************************/
; unsigned char scan_key(void)
; {
	.dbline 435
;  unsigned char i;
;  DDRB=0x0f;	//列接低位,输出
	ldi R24,15
	out 0x17,R24
	.dbline 436
;  PORTB=0xff;	

⌨️ 快捷键说明

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