📄 碰碰球.asm
字号:
;Big shooting
.include "d:\avrtools\appnotes\2313def.inc"
.def temp=r16
.def pcont1=r8
.def pcont2=r9
.def pcont3=r10
.def disda=r19
.def disda1=r14
.def count=r17
.def timda=r21
.def timge=r1
.def timsh=r2
.def timba=r3
.def bitda=r22
.def bitge=r4
.def bitsh=r5
.def bitba=r6
.def shotda=r23
.def eeawr1=r7
.def eeawr=r18
.def tempt=r20
.def timcon1=r26
.def timcon2=r27
.def vd27da=r28
.def cotim=r29
.def temp2=r31
.def bjdata=r25
.def temp5=r24
.def disdat=r30
.equ data=7 ;公共数显数据
.equ clktim=6 ;时间时钟
.equ clkbit=5 ;击中时钟
.equ clkshot=4 ;击发时钟
.cseg
.org 0
rjmp reset
.org $01
rjmp intr0
.org $0006
rjmp time0
.org $007
reset:nop
ldi temp,$65
out spl,temp
ldi temp,13
out wdtcr,temp
ldi temp,0
out ddrd,temp ;b0,b6,usually is high
out portd,temp
ldi temp,$0f
out portb,temp
ldi temp,$ff
out ddrb,temp
sbi ddrd,1
sbi portd,1
sbi ddrd,3
sbi portd,3
sbi ddrd,6
cbi portd,6
clr bjdata
ldi temp,64
out gimsk,temp
clr r25
disall:nop
e2write:nop ;write e2
ldi temp,$3f
ldi eeawr,0
rcall eewrit
ldi temp,$06
inc eeawr
rcall eewrit
ldi temp,$5b
inc eeawr
rcall eewrit
ldi temp,$4f
inc eeawr
rcall eewrit
ldi temp,$66
inc eeawr
rcall eewrit
ldi temp,$6d
inc eeawr
rcall eewrit
ldi temp,$7d
inc eeawr
rcall eewrit
ldi temp,$07
inc eeawr
rcall eewrit
ldi temp,$7f
inc eeawr
rcall eewrit
ldi temp,$6f
inc eeawr
rcall eewrit
wdr
;*************8
clr vd27da
clr timcon1
clr timcon2
ldi bitda,0
ldi shotda,0
ldi temp,5
out tccr0,temp
ldi temp,217
out tcnt0,temp
ldi temp,0 ;2
out timsk,temp
;******8
ldi timda,0
ldi temp,$3f
mov disda1,temp
rcall ddss
ldi temp,0
mov disda1,temp
rcall ddss
;rcall ddss
ldi disda,$3f
rcall ddss1
ldi disda,0
rcall ddss1
ldi disda,$3f
rcall ddss2
ldi disda,0
rcall ddss2
ldi temp,3 ;2
out mcucr,temp
wdr
sei
;*******
waits:nop ;无人玩演示
wdr
ldi temp,64
out gimsk,temp
.include "yscx.asm"
;cli
cpi bjdata,2 ;投币个数
brsh ybplay
rjmp waits
;********
ybplay: ldi temp,$65
out spl,temp
ldi temp,0
out gimsk,temp ;enable int0
cbi portb,0
cbi portb,1
cbi portb,2
cbi portb,3
wdr
clr disda1
clr disda
;cbi portd,3
sbi portd,1
clr bjdata
ldi timda,0
ldi temp,$3f
mov disda1,temp
rcall ddss
ldi temp,0
mov disda1,temp
rcall ddss
cbi portd,1
;rcall ddss
ldi disda,$3f
rcall ddss1
ldi disda,0
rcall ddss1
ldi disda,$3f
rcall ddss2
ldi disda,0
rcall ddss2
clr bitda
clr shotda
clr vd27da
clr timcon1
clr timcon2
clr timda
cbi portd,3
ldi cotim,90
;sbic pind,4
;ldi cotim,180
ldi temp,2
out timsk,temp
sei
begann:nop
;(((((((((((((((((
;cpi bjdata,10
;brne kdkda
;clr bjdata
;mov disda,bitda ;shotda
;rcall bcdtb1
;mov eeawr,bitge
;rcall eeread
;rcall ddss2 ;1
;mov eeawr,bitsh
;rcall eeread
;ldi temp,$3f
;cp temp,disda
;brne disb1
;clr disda
disb1: ;rcall ddss2
;(((((((((((((
;***********
cpi shotda,5 ;封枪数20
brsh dendiz
;rcall pase2
;cpi shotda,5
;brsh dendiz
cpi bitda,5
brsh dendiz
kdkda: cp timda,cotim ;time=180
brlo bbeea
;rcall pase2
;cp timda, cotim
;brlo bbeea
dendiz: ldi temp,0
out timsk,temp
sbi portb,0
sbi portb,1
sbi portb,2
sbi portb,3
clr bjdata
sbi portd,3
ldi temp,64
out gimsk,temp
sbi portd,1
ldi r28,200
dendi: rcall pase2
rcall pase2
cpi bjdata,2
brlo dendid ;ybplay
;rjmp reset
rjmp ybplay
dendid: rcall pase2
rcall pase2
cpi bjdata,2
brlo dendig ;ybplay
rjmp ybplay
dendig: rcall pase2
rcall pase2
dec r28
brne dendi
rjmp reset ;reset
bbeea:
sbis pind,4
;rjmp begann
rjmp jdong
rcall pausea
sbis pind,4
;rjmp begann
rjmp jdong
;ldi temp,64
;out gimsk,temp ;enable int0
ddfw: wdr
cp timda,cotim
brlo ddfwm
rjmp dendiz
ddfwm: sbic pind,4
rjmp ddfw
;sbi ddrd,0 ;cbi portd,shooting lighting
cbi portd,6
sbi ddrd,6 ;shooting sound
wdr
rcall jfsound
;rcall pase2;;等待VD5027反应时间
test3: inc shotda
mov disda,shotda ;
rcall bcdtb1
mov eeawr,bitge
rcall eeread
rcall ddss1 ;22
mov eeawr,bitsh
rcall eeread
ldi temp,$3f
cp temp,disda
brne disc1
clr disda
disc1:
rcall ddss1 ;2
wdr
cbi portd,6 ;stop sound
;ldi temp2,3 ;等待VD5027反应时间
mkmk1:
;rcall pase2;
;dec temp2
;brne mkmk1
;cbi ddrd,0
wdr
rjmp begann
;**********
jdong: sbis pind,5
rjmp begann
rcall pausea
sbis pind,5
rjmp begann
ddfw1: wdr
cp timda,cotim
brlo ddfwn
rjmp dendiz
ddfwn: sbic pind,5
rjmp ddfw1
;cpi bjdata,2
;brne nnnn
rcall jfsound
inc bitda
mov disda,bitda ;shotda
rcall bcdtb1
mov eeawr,bitge
rcall eeread
rcall ddss2 ;1
mov eeawr,bitsh
rcall eeread
ldi temp,$3f
cp temp,disda
brne disb21
clr disda
disb21:rcall ddss2
;********^^^^^^^
nnnn: wdr
nop
;sbic pind,1
;rjmp nnnn
;1
pppp:nop
ldi bjdata,0
;)))))))))))
rjmp begann ;display
;ssss1:rjmp ssss
ddss:ldi tempt,8 ;rx>>"data" to display
ddsb:nop
rol disda1 ;r15>>c
brcs set1
cbi portb,data ;4
rjmp ddsa
set1: sbi portb,data ;4
ddsa:nop
sbi portb,clktim ;5
;**************
cpi bjdata,2 ;投币个数
brlo mnbv
rjmp ybplay
;sbi portb,clkbit
;sbi portb,clkshot
;**************
mnbv: nop
cbi portb,clktim ;5
;***************
cbi portb,clkbit
cbi portb,clkshot
;*************
nop
dec tempt
brne ddsb
ret
;****************
ddss1:ldi count,8 ;rx>>"data" to display
ddsb1:nop
rol disda ;r15>>c
brcs set11
cbi portb,data ;4
rjmp ddsa1
set11: sbi portb,data ;4
ddsa1:nop
;sbi portb,clktim ;5
;**************
cpi bjdata,2 ;投币个数
brlo mnba
rjmp ybplay
mnba: sbi portb,clkbit
;sbi portb,clkshot
;**************
nop
cbi portb,clktim ;5
;***************
cbi portb,clkbit
cbi portb,clkshot
;*************
nop
dec count
brne ddsb1
ret
ddss2:ldi count,8 ;rx>>"data" to display
ddsb2:nop
rol disda ;r15>>c
brcs set12
cbi portb,data ;4
rjmp ddsa2
set12: cbi portb,clktim ;5
;***************
cbi portb,clkbit
sbi portb,data ;4
ddsa2:nop
;sbi portb,clktim ;5
;**************
cpi bjdata,2 ;投币个数
brlo mnbb
rjmp ybplay
;sbi portb,clkbit
mnbb: sbi portb,clkshot
;**************
nop
cbi portb,clkshot
;*************
nop
dec count
brne ddsb2
ret
;***************
;++++++++++++++++++++++++++子程序
eewrit:nop
wdr
sbic eecr,eewe
rjmp eewrit
out eear,eeawr
out eedr,temp
sbi eecr,eemwe ;2313 only
;nop
sbi eecr,eewe
wdr
ret
eeread:nop
ldi temp,0
out timsk,temp
eerea :wdr
sbic eecr,eewe
rjmp eerea
out eear,eeawr
sbi eecr,eere
sbi eecr,eere
in disda,eedr
ldi temp,2
out timsk,temp
wdr
eeend: ret
;&&&&&&&&&&&&&&&&&
eeread1:nop ;time0
wdr
sbic eecr,eewe
rjmp eeread1
out eear,eeawr1
sbi eecr,eere
sbi eecr,eere
in disda1,eedr
wdr
eeend1:nop
ret
;&&&&&&&&&&&&&&
;disdat变为bcd (r3,r2,r1)(百,十,个)
bcdmb1:wdr ;dog
;清r3,r2,r1
clr timge
clr timsh
clr timba
bcdmm2:;cpi disdat,100
;brlo bcdmc1
;subi disdat,100
;inc timba
;rjmp bcdmm2
bcdmc1:cpi disdat,10
brlo bcdme1
subi disdat,10
inc timsh
rjmp bcdmc1
bcdme1:mov timge,disdat ;停止变换
clr disdat
ret ;
;###########################
;disda变为bcd (r3,r2,r1)(百,十,个)
bcdtb1:wdr ;dog
;清r3,r2,r1
nop
clr bitge
clr bitsh
clr bitba
bcdtm2:cpi disda,100
brlo bcdtc1
subi disda,100
inc bitba
rjmp bcdtm2
;&&&&&&&&&
bcdtc1:cpi disda,10
brlo bcdte1
subi disda,10
inc bitsh
rjmp bcdtc1
bcdte1:mov bitge,disda ;停止变换
clr disda
ret ;
;$$$$$$$$$$$$$$$$$$$$$$$$$
.include "jfsound.asm"
;$$$$$$$$$$$$$$$$$$$$$
pase1:nop
wdr
ldi temp,200
mov pcont1,temp
pasea:
ldi temp,200
mov pcont2,temp
paseb:
ldi temp,20
mov pcont3,temp
pasec:nop
wdr
dec pcont3
brne pasec
dec pcont2
brne paseb
dec pcont1
brne pasea
ret
pase2:nop
wdr
ldi temp,50
mov pcont1,temp
pasea2:
ldi temp,80
mov pcont2,temp
paseb2:
ldi temp,20
mov pcont3,temp
pasec2:nop
cpi bjdata,2 ;投币个数
brlo mnbc
ret
rjmp ybplay
mnbc: wdr
dec pcont3
brne pasec2
dec pcont2
brne paseb2
dec pcont1
brne pasea2
ret
;%%%%%%%%%%%%%%%%%%%%%%%%%%
pausea: ldi temp,100
mov r13,temp
fpase: ldi temp,100
mov r12,temp
tbpase: dec r12
brne tbpase
dec r13
brne fpase
ret
;%%%%%%%%%%%%%%%%%%%%%%%%
time0:nop
wdr
in r0,sreg
ldi tempt,217
out tcnt0,tempt
inc timcon1
cpi timcon1,106
brne time01
inc timcon2
inc timda
;*************8$$$$
disptim:nop
mov disdat,timda
rcall bcdmb1
mov eeawr1,timge
rcall eeread1
rcall ddss
mov eeawr1,timsh
rcall eeread1
ldi tempt,$3f
cp tempt,disda1
brne disa1
;ldi tempt,0
;cp tempt,timba
;brne disa1
clr disda1
disa1:
rcall ddss
;mov eeawr1,timba
;rcall eeread1
;ldi tempt,$3f
;cp tempt,disda1
;brne disa2
;clr disda1
disa2: ;rcall ddss
;*********$$$$$$$$
clr timcon1
out sreg,r0
time01:wdr
reti
intr0:nop
in r11,sreg
ldi temp5,0
out gimsk,temp5
nop
nop
sbis pind,2
rjmp gfgfa
;7777777777777
;in vd27da,pinb
;andi vd27da,$0f
;cpi vd27da,1 ;sbm
;brne gfgfa
;ldi temp5,0
;out gimsk,temp5
;cbi ddrd,0
;8888888888888888
inc bjdata
;inc bitda
;dis bitdata
;**********
;********
;ldi bitda,12
;*******^^^^^^^^
gfgfa:wdr
;mov disda,bitda ;shotda
;rcall bcdtb1
;mov eeawr,bitge
;rcall eeread
;rcall ddss2 ;1
;mov eeawr,bitsh
;rcall eeread
;ldi temp5,$3f
;cp temp5,disda
;brne disbt1
;clr disda
disbt1:;rcall ddss2
;cpi bjdata,2
ldi temp5,64
out gimsk,temp5
out sreg,r11
reti
nop
nop
nop
rjmp reset
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -