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

📄 niao.asm

📁 4位密码检测程序 可以修改所设定的密码 适合在C51单片机上使用
💻 ASM
字号:
      ORG 0000H
      SJMP MAIN
     
MAIN: MOV P1,#01H
      MOV A,#01H
NEXT: MOV P1,A     ;循环显示
      MOV R3,#0
LOOP: MOV R4,#0
      NOP
      NOP
      DJNZ R4,$
      DJNZ R3,LOOP
      ACALL DAY

      MOV R5,A        ;检查有无键入
DO:   SETB C
      MOV R0,#0
      MOV P0,#0FFH
      MOV A,P0
ROR:  RRC A
      JNC OUT
      INC R0
      CJNE R0,#06,ROR

      MOV A,R5
      RL A
      SJMP NEXT

OUT:  MOV A,#01H              ;显示字符
      MOV P1,A
      
      MOV A,R0
      MOV DPTR,#TAB
      MOVC A,@A+DPTR
      MOV P2,A
      MOV A,R5   
      
      
      
MUSIC:  SPK	EQU	P1.0			; 蜂鸣器所在端口
START:
	MOV	R3,#00H
NEXT1:
	MOV	A,R3
	MOV	DPTR,#TABLE
	MOVC	A,@A+DPTR     ;把表中内容的地址给A
	JZ	START         ;A=0则跳转
	MOV	R7,A
	INC	R3            ;偏移量加一
	MOV	A,R3          ;后半字节地址
	MOVC	A,@A+DPTR
	MOV	R2,A          ;R7,R2中分别存有半个字
	ACALL	SONG           ;播放该音节
	INC	R3             ;偏移量加一
        CJNE R3,#50,GOO
        SJMP MAIN           
GOO:	SJMP	NEXT1


;===============================================================================
;===  歌曲播放子程序 ===
SONG:
	MOV	A,R2		; 取出节拍
	RL	A
	JNZ	KEEP             ;A不等于零跳转
	MOV	A,#01H
KEEP:
	MOV	R2,A
REPEAT:
	ACALL	EIGHTH
	DJNZ	R2,REPEAT
	RET

;===============================================================================
;===  产生1/8拍延时子程序  ===
EIGHTH:
	MOV	A,R7					; 查表取出廷时参数,保存到R4
	MOV	DPTR,#DELAY_T
	MOVC	A,@A+DPTR
	MOV	R4,A
	MOV	A,R7					; 查表取出1/8拍周期数,保存到R5
	MOV	DPTR,#S_PARA
	MOVC	A,@A+DPTR
	MOV	R5,A
NEXTCYC:
	ACALL	SOUND
	DJNZ	R5,NEXTCYC
	RET

;===============================================================================
;===  发声子程序 ===
SOUND:
	SETB	SPK
	ACALL	SDELAY
	CLR	SPK
	ACALL	SDELAY
	RET

;===============================================================================
;===  延时子程序  ===
SDELAY:
	MOV	A,R4					; 廷时值在R4内
	MOV	R0,A
XL2:
	MOV	R1,#03H
DL11:
	NOP
	DJNZ	R1,DL11
	DJNZ	R0,XL2
	RET
;===============================================================================
;===  1/8拍周期表  ===
S_PARA:          ;拍子
	DS	1DH
	DB	15H,16H,00
	DB	19H,00H,1CH,00H,1FH,21H,00H,25H
	DB	00H,29H,2CH,00H,31H,34H,37H,00H
	DB	3EH,41H,00H,49H,00H,52H,57H,00H
	DB	62H

;===============================================================================
;===  延时参数表  ===
DELAY_T:           ;音符
	DS	1DH
	DB	7EH,77H,00H
	DB	6AH,00H,5EH,00H,54H,4FH,00H,46H
	DB	00H,3FH,3BH,38H,35H,32H,2FH,00H
	DB	2AH,27H,00H,23H,00H,1FH,1DH,0C0H
	DB	1AH

;===============================================================================
;===  歌曲表  ===
TABLE:  DW         2704H,2702H,2904H,2704H,2C04H,2B01H
        DW         2704H,2702H,2904H,2704H,2E04H,2C06H
        DW         2704H,2702H,3104H,2E04H,2C04H,2A04H,2904H
        DW         3004H,3002H,2E04H,2A04H,2C04H,2A04H
       
       RETI
       



DAY:   MOV R2,#0F0H
DL2:   MOV R3,#0F0H
DL1:   NOP
       NOP
       DJNZ R3,DL1
       DJNZ R2,DL2
       RET

TAB:DB 06H,5BH,4FH,66H,6DH,7DH

⌨️ 快捷键说明

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