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

📄 碰碰球.asm

📁 这是一些用汇编做的单片机程序
💻 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 + -