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

📄 main.s

📁 meg16 的所有功能实例
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 172
; 	    guanshu=1;
	ldi R24,1
	sts _guanshu,R24
L63:
	.dbline 173
; 	 if(NUM_BEST>NUM_YOUR)									  //存储最好成绩
	lds R2,_NUM_YOUR
	lds R3,_NUM_YOUR+1
	lds R4,_NUM_BEST
	lds R5,_NUM_BEST+1
	cp R2,R4
	cpc R3,R5
	brsh L45
	.dbline 174
; 	    NUM_BEST=NUM_YOUR;
	sts _NUM_BEST+1,R3
	sts _NUM_BEST,R2
	.dbline 175
; 	 break;				  									  //跳出此关,进行下一关
	.dbline 177
; 	}
;   }
	.dbline 140
	.dbline 140
L45:
	.dbline 178
L11:
	.dbline 81
	xjmp L10
X3:
	.dbline -2
L9:
	adiw R28,6
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e key_init _key_init fV
	.even
_key_init::
	.dbline -1
	.dbline 183
;  }
; }
; //=======================================================================
; //键盘初始化(采用定时扫描)
; void key_init(void)
; {
	.dbline 184
;  key_ddr&=~all_key;
	in R24,0x1a
	andi R24,7
	out 0x1a,R24
	.dbline 185
;  key_port|=all_key;
	in R24,0x1b
	ori R24,248
	out 0x1b,R24
	.dbline 188
; 
;  //t/c0初始化
;  TCCR0=0X0D;
	ldi R24,13
	out 0x33,R24
	.dbline 189
;  TCNT0=0X00;
	clr R2
	out 0x32,R2
	.dbline 190
;  OCR0=0XF0;         //定时30ms
	ldi R24,240
	out 0x3c,R24
	.dbline 191
;  TIMSK|=0X02;
	in R24,0x39
	ori R24,2
	out 0x39,R24
	.dbline -2
L67:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e read_keyboard _read_keyboard fV
	.even
_read_keyboard::
	.dbline -1
	.dbline 197
; }
; 
; //=======================================================================
; //扫描程序(带去抖功能)
; void read_keyboard(void)
; {
	.dbline 198
;  switch(key_state)
	lds R16,_key_state
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L72
X5:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L75
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L78
	xjmp L69
X6:
	.dbline 199
;  {
L72:
	.dbline 201
;   case 0:
;          if((key_pin&all_key)!=all_key)
	in R24,0x19
	andi R24,248
	cpi R24,248
	breq L70
	.dbline 202
; 		    key_state++;
	lds R24,_key_state
	subi R24,255    ; addi 1
	sts _key_state,R24
	.dbline 203
; 		 break;
	xjmp L70
L75:
	.dbline 205
;   case 1:
;          if((key_pin&all_key)!=all_key)
	in R24,0x19
	andi R24,248
	cpi R24,248
	breq L76
	.dbline 206
; 		    {
	.dbline 207
; 			 key_state++;
	lds R24,_key_state
	subi R24,255    ; addi 1
	sts _key_state,R24
	.dbline 208
; 			 key_value=key_pin&all_key;
	in R24,0x19
	andi R24,248
	sts _key_value,R24
	.dbline 209
; 			}
	xjmp L70
L76:
	.dbline 210
; 		 else key_state--;
	lds R24,_key_state
	subi R24,1
	sts _key_state,R24
	.dbline 211
; 		 break;
	xjmp L70
L78:
	.dbline 213
;   case 2:
;          if((key_pin&all_key)==all_key)
	in R24,0x19
	andi R24,248
	cpi R24,248
	brne L70
	.dbline 214
; 		    {key_state=0;
	.dbline 214
	clr R2
	sts _key_state,R2
	.dbline 215
; 			}
	.dbline 216
; 		 break;
L69:
L70:
	.dbline -2
L68:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 76
	jmp _timer0comp
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.dbfunc e timer0comp _timer0comp fV
	.even
_timer0comp::
	xcall push_lset
	.dbline -1
	.dbline 225
;  }
;  
; }
; 
; //=======================================================================
; //定时中断,进行键盘扫描
; #pragma interrupt_handler timer0comp:20
; void timer0comp (void)
; { 
	.dbline 226
;  read_keyboard();
	xcall _read_keyboard
	.dbline -2
L81:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e KBOD_task _KBOD_task fV
	.even
_KBOD_task::
	.dbline -1
	.dbline 232
; }
; 
; //=======================================================================
; //键盘键值处理(有键被按下以后进行的处理)
; void KBOD_task(void)
; {
	.dbline 234
;  
;  if(key_value!=0)
	lds R2,_key_value
	tst R2
	brne X17
	xjmp L83
X17:
	.dbline 235
;  {
	.dbline 236
;   switch(key_value)
	mov R16,R2
	clr R17
	cpi R16,216
	ldi R30,0
	cpc R17,R30
	brne X18
	xjmp L86
X18:
	ldi R24,216
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L373
L372:
	cpi R16,120
	ldi R30,0
	cpc R17,R30
	breq L88
	cpi R16,120
	ldi R30,0
	cpc R17,R30
	brge X19
	xjmp L85
X19:
L374:
	cpi R16,184
	ldi R30,0
	cpc R17,R30
	brne X20
	xjmp L163
X20:
	xjmp L85
L373:
	cpi R16,232
	ldi R30,0
	cpc R17,R30
	brne X21
	xjmp L229
X21:
	cpi R16,232
	ldi R30,0
	cpc R17,R30
	brge X22
	xjmp L85
X22:
L375:
	cpi R16,240
	ldi R30,0
	cpc R17,R30
	brne X23
	xjmp L294
X23:
	xjmp L85
X7:
	.dbline 237
;   {
L88:
	.dbline 239
;    case Up:		   //向上键被按下
;    		 if(key_last_value!=Enter)		  //判断是走局还是移动鼠标
	lds R24,_key_last_value
	cpi R24,216
	breq L89
	.dbline 240
; 		   {
	.dbline 241
; 		    if(X>0)X--;					  //鼠标向上移动
	clr R2
	lds R3,_X
	cp R2,R3
	brlo X24
	xjmp L86
X24:
	.dbline 241
	mov R24,R3
	subi R24,1
	sts _X,R24
	.dbline 242
; 		   }
	xjmp L86
L89:
	.dbline 245
; 		 
; 		 else		   					  //走局操作
; 		   {
	.dbline 246
; 		   if((disp_buffer[X][Y]&0xF0)==0x00)return;//如果移动的是空白,则跳出
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R24,z+0
	andi R24,240
	brne L93
	.dbline 246
	xjmp L82
L93:
	.dbline 247
; 		   else if((disp_buffer[X][Y]&0xF0)==0x10)	//如果移动的是兵
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R24,z+0
	andi R24,240
	cpi R24,16
	breq X25
	xjmp L95
X25:
	.dbline 248
; 		   {
	.dbline 249
; 		   if(X>0)
	clr R2
	lds R3,_X
	cp R2,R3
	brlo X26
	xjmp L86
X26:
	.dbline 250
; 		   if(disp_buffer[X-1][Y]==0x00)
	mov R2,R3
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer-4
	ldi R25,>_disp_buffer-4
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	tst R2
	breq X27
	xjmp L86
X27:
	.dbline 251
; 		     {
	.dbline 252
; 			 X--;
	lds R24,_X
	subi R24,1
	sts _X,R24
	.dbline 253
; 			 disp_buffer[X][Y]=disp_buffer[X+1][Y];
	mov R2,R24
	ldi R24,4
	mul R24,R2
	ldi R24,<_disp_buffer+4
	ldi R25,>_disp_buffer+4
	movw R2,R0
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	movw R4,R0
	add R4,R24
	adc R5,R25
	lds R30,_Y
	clr R31
	add R30,R4
	adc R31,R5
	std z+0,R2
	.dbline 254
; 			 disp_buffer[X+1][Y]=0x00;
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer+4
	ldi R25,>_disp_buffer+4
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	clr R2
	std z+0,R2
	.dbline 255
; 			 NUM_YOUR++;
	lds R24,_NUM_YOUR
	lds R25,_NUM_YOUR+1
	adiw R24,1
	sts _NUM_YOUR+1,R25
	sts _NUM_YOUR,R24
	.dbline 256
; 			 }
	.dbline 257
; 		   }
	xjmp L86
L95:
	.dbline 258
; 		   else if((disp_buffer[X][Y]&0xF0)==0x20) //如果移动的是竖将
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R24,z+0
	andi R24,240
	cpi R24,32
	breq X28
	xjmp L104
X28:
	.dbline 259
; 		   {
	.dbline 260
; 		   if(X>0)
	clr R2
	lds R3,_X
	cp R2,R3
	brsh L106
	.dbline 261
; 		   if(disp_buffer[X][Y]==disp_buffer[X-1][Y])
	mov R2,R3
	ldi R24,4
	mul R24,R2
	ldi R24,<_disp_buffer-4
	ldi R25,>_disp_buffer-4
	movw R2,R0
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	movw R4,R0
	add R4,R24
	adc R5,R25
	lds R30,_Y
	clr R31
	add R30,R4
	adc R31,R5
	ldd R3,z+0
	cp R3,R2
	brne L108
	.dbline 262
; 		      X--;
	lds R24,_X
	subi R24,1
	sts _X,R24
L108:
L106:
	.dbline 263
; 		   if(X>0)
	clr R2
	lds R3,_X
	cp R2,R3
	brlo X29
	xjmp L86
X29:
	.dbline 264
; 		   if(disp_buffer[X-1][Y]==0x00)
	mov R2,R3
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer-4
	ldi R25,>_disp_buffer-4
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	tst R2
	breq X30
	xjmp L86
X30:
	.dbline 265
; 		     {
	.dbline 266
; 			 X--;
	lds R24,_X
	subi R24,1
	sts _X,R24
	.dbline 267
; 			 disp_buffer[X][Y]=disp_buffer[X+2][Y];
	mov R2,R24
	ldi R24,4
	mul R24,R2
	ldi R24,<_disp_buffer+8
	ldi R25,>_disp_buffer+8
	movw R2,R0
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	movw R4,R0
	add R4,R24
	adc R5,R25
	lds R30,_Y
	clr R31
	add R30,R4
	adc R31,R5
	std z+0,R2
	.dbline 268
; 			 disp_buffer[X+2][Y]=0x00;
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer+8
	ldi R25,>_disp_buffer+8
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	clr R2
	std z+0,R2
	.dbline 269
; 			 NUM_YOUR++;
	lds R24,_NUM_YOUR
	lds R25,_NUM_YOUR+1
	adiw R24,1
	sts _NUM_YOUR+1,R25
	sts _NUM_YOUR,R24
	.dbline 270
; 			 }
	.dbline 271
; 		   }
	xjmp L86
L104:
	.dbline 272
; 		   else if((disp_buffer[X][Y]&0xF0)==0x30) //如果移动的是横将
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R24,z+0
	andi R24,240
	cpi R24,48
	breq X31
	xjmp L118
X31:
	.dbline 273
; 		   {
	.dbline 274
; 		   if(Y>0)
	clr R2
	lds R3,_Y
	cp R2,R3
	brsh L120
	.dbline 275
; 		   if(disp_buffer[X][Y]==disp_buffer[X][Y-1])
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	sbiw R30,1
	add R30,R2
	adc R31,R3
	ldd R4,z+0
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	cp R2,R4
	brne L122
	.dbline 276
; 		      Y--;
	lds R24,_Y
	subi R24,1
	sts _Y,R24
L122:
L120:
	.dbline 277
; 		   if(X>0)
	clr R2
	lds R3,_X
	cp R2,R3
	brlo X32
	xjmp L86
X32:
	.dbline 278
; 		   if((disp_buffer[X-1][Y]==0x00)&(disp_buffer[X-1][Y+1]==0x00))
	mov R2,R3
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer-4
	ldi R25,>_disp_buffer-4
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	tst R2
	brne L130
	ldi R18,1
	ldi R19,0
	xjmp L131
L130:
	clr R18
	clr R19
L131:
	lds R2,_X
	ldi R24,4
	mul R24,R2
	movw R2,R0
	ldi R24,<_disp_buffer-4
	ldi R25,>_disp_buffer-4
	add R2,R24
	adc R3,R25
	lds R30,_Y
	clr R31
	adiw R30,1
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	tst R2
	brne L132
	ldi R16,1
	ldi R17,0
	xjmp L133
L132:
	clr R16
	clr R17
L133:
	movw R2,R18
	and R2,R16
	and R3,R17
	tst R2
	brne X8
	tst R3
	brne X33
	xjmp L86
X33:
X8:
	.dbline 279
; 		     {
	.dbline 280
; 			 X--;

⌨️ 快捷键说明

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