📄 main.s
字号:
.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 + -