📄 isd_play.asm
字号:
T_INIT EQU 30H ;延时时间的初值
TIME EQU 31H ;调用延时子程序的次数
REC EQU P1.0 ;录音控制
PLAYL EQU P1.1 ;电平放音控制
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV SP,#60H
PLAY_CYC:
MOV DPTR,#PLAYADDR;查表发音地址
MOV A,#0CH ;总共
MOVC A,@A+DPTR
MOV 40H,A
LCALL PLAY2
MOV A,#08H ;8
MOVC A,@A+DPTR
MOV 40H,A
LCALL PLAY
MOV A,#0AH ;十
MOVC A,@A+DPTR
MOV 40H,A
LCALL PLAY
MOV A,#06H ;6
MOVC A,@A+DPTR
MOV 40H,A
LCALL PLAY
MOV A,#0BH ;分钟
MOVC A,@A+DPTR
MOV 40H,A
LCALL PLAY2
SJMP PLAY_CYC
PLAY: ;调用放音子程序
PUSH DPH
PUSH DPL
MOV DPTR,#8000H ;74LS273的控制口
MOV A,#0FFH ;送停止录放音码
MOVX @DPTR,A
MOV A,40H ;放音控制码由40H单元送入A
LCALL DELAY20 ;延时20MS
MOVX @DPTR,A
CLR PLAYL
LCALL DELAY500 ; 延时放音时间
MOV A,#0FFH
MOVX @DPTR,A ;停止放音
SETB PLAYL
POP DPL
POP DPH
RET
PLAY2:
PUSH DPH
PUSH DPL
MOV DPTR,#8000H
MOV A,#0FFH ;送停止录放音码
MOVX @DPTR,A
MOV A,40H ;放音控制码由40H单元送入A
LCALL DELAY20 ;延时20MS
MOVX @DPTR,A
CLR PLAYL
LCALL DELAY500 ; 延时放音时间
LCALL DELAY500
MOV A,#0FFH
MOVX @DPTR,A ;停止放音
SETB PLAYL
POP DPL
POP DPH
RET
DELAY:
PUSH TIME ; 延时TIMER1*1 MS FOR 12MHZ
PUSH T_INIT
DELAY1:
MOV T_INIT,#250 ;循环一次需要4个机器周期,时间为4*1ΜS
DELAY2:
NOP ; 1个周期
NOP ; 1个周期
DJNZ T_INIT,DELAY2 ;2个周期
DJNZ TIME,DELAY1
POP T_INIT
POP TIME
RET
DELAY20: ; 延时20 MS
PUSH TIME
MOV TIME,#20
LCALL DELAY
LCALL DELAY
POP TIME
RET
DELAY500: ; 延时500 MS
PUSH TIME
MOV TIME,#250
LCALL DELAY
LCALL DELAY
POP TIME
RET
PLAYADDR:
DB 00H,04H,08H,0CH,10H,14H,18H,1CH,20H,24H,28H,2CH,34H
; 0 1 2 3 4 5 6 7 8 9 十 分钟 总共
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -