📄 yuying.txt
字号:
MOV 3DH,38H
MOV 3CH,37H
LCALL CHANGE
LJMP L1
LC1: LJMP L1
X2: MOV A,48H
CJNE A,#01H,X3
MOV 3CH,37H
MOV 3DH,38H
LCALL CHANGE
MOV 29H,37H
DEC 31H
DEC 48H
LJMP L1
X3: LJMP LL
LO1: MOV A,31H ;LED显示位存储单元
CJNE A,#02H,LO2
MOV 3CH,33H
MOV A,29H
CJNE A,?24,LA1 ;判断若小时=24,(29H)=0
MOV 29H,#00H
LA1: MOV 34H,29H
MOV 3DH,34H
LCALL CHANGE
LJMP L1
LO2: MOV 3DH,34H
MOV A,29H
CJNE A,#60,LA2 ;判断若分=60,(29H)=0
MOV 29H,#0
LA2: MOV 33H,29H
MOV 3CH,33H
LCALL CHANGE
LJMP L1
LO3: MOV A 31H
CJNE A,#02H,LO4
MOV 3CH,35H
MOVA 29H
CJNE A,#13,LA3 ;判断若月份=19,(29H)=0
LA3: MOV 36H,29H
MOV 3DH,36H
LCALL CHANGE
LJMP L1
LO4: MOV A,36H
CJNE A,#30H,LA4 ;若月份=2,日期=30,(29H)=0
MOV 29H,#00H
LA4: MOV 35H,29H ;存储调整后的日值到35H
MOV 3CH,35H
LCALL CHANGE
LJMP L1
LO5: MOV A,31H
CJNE A,#02H,LO6
MOV 3CH,37H
MOV 3DH,38H
LCALL CHANGE
LJMP L1
LO6: MOV A,29H
CJNE A,#08H,LA6 ;判断若星期=8,(29H)=0
MOV 29H,#00H
LA6 MOV 3DH,38H
MOV 37H,29H
MOV 3CH,37H
LCALL CHANGE
L1: LCALL DISPLAY
LJMP LP0
LL: MOV 32H,#00H ;设置时钟的秒值=0
LCALL SET1302
LJMP ET
;定时时间设置子程序
ALARM:SETB P3.5 ;允许输入
MOV 39H,#01H
LCALL SEARCH ;读原来的定时时间
PP0: MOV 3CH,3AH
MOV 3DH,#3BH
LCALL CHANGE
NEXTA: LCALL DISPLAY ;显示定时时间
JB P3.1NEXTA ;扫描键盘,重新设置定时时间
LCALL DISPLAY
JB P3.1,NEXTA
LD1B LCALL DISPLAY
JNB P3.1,LD11B
LCALL SEARCH
MOV 3DH,3BH
MOV 3CHM3AH
LCALL CHANGE
MOV 31H,#02H
MOV 29H,3BH
LPOB: JB P3.0,NEXTB
LCALL DISPLAY
JB P3.0,LPOB
LP1B: LCALL DISPLAY
JNB P3.0,LP1B
MOV A,29H
ADD A,#01H
DA A
MOV 29H,A
SJMP LO1B
NEXTB:LCALL DISPLAY
JB P3.1,L1B
LCALL DISPLAY
JB P3.1,NEXTB
LD1B: LCALL DISPLAY
JNB P3.1,LD1B
MOV 29H,3AH
DJNZ 31H,LO1B
SJMP LLB
LO1B: MOV A,31H
CJNE A,#02H,LO2B
MOV A,29H
CJNE A,#24H,LA1B ;控制设置的小时在0~23之间循环
MOV 29H,#00H
LA1B: MOV 3BH,29H
MOV 3DH,3BH
LCALL CHANGE
SJMP L1B
LO2B: MOV A,29H
CJNE A,#60H,LA2B ;控制设置的分在0~59之间循环
MOV 29H,#00H
LA2B: MOV 3AH,29H
MOV 3CH,3AH
LCALL CHANGE
L1B: MOV A,31H
CJNE A,#00H,LP0B
LLB: LCALL WRIT ;存储当前设置的定时时间
INC 39H
MOV A,39H
CJNE A,#6,PA0 ;若设置的定时时间抄过5次,结束设置
SJMP ET
PA0: LIMP PP0
ET: POP PSW ;恢复现场
POP B
POP A
MOV TH1,#3CII ;重装定时/计数器1的计数器、初值
MOV TL1, #0B0H
SETB TR1 ;启动定时/计算器1
SETB ET1 ;开中断
SETB PT1
SETB EX0
SETB EX1
CLR TR0
CLR ET0
RET1 ;中断返回
WRIT: CLR RS1 ;存储设置的定时时间子程序
SETB RS0
MOV A,39H
MOV B,#3
MUL AB
ADD A,#46H
MOV R1,A
MOV R0,#39H
MOV R2,#3
MORE:MOV A,@R0
MOV @R1,A ;定时时间存储在49H为首的地址的单元中
INC R0
INC R1
DJNZ R2,MORE
RET
SEARCH:CLR RS1 ;读定时时间子程序
SETB RS0
MOV A,39H
MOV B,#3
MUL AB
ADD A,#46H
MOV R1,A
MOV R0,#39H
MOV R2,#2
INC R0
INC R1
MORE1MOV A,@R1 ; 读出定时时间,并送到3AH,3BH单元 MOV @RO,A
INC R0
INC R1
DJNZ R2,MORE1
RET
INTA: SETB P3.0 ;语音录入,播放中断子程序
SETB P3.1
CLR TR1
CLR ET1
CLR EX0
CLR EX1
PUSH A
PUSH B
PUSH PSW
JB P3.4,RECORD
LJMP PLAY
;录音子程序
RECORD:MOV 3EH,#01H
RECORD:MOV 3CH,3EH
MOV 3DH,#0AFH
LCALL CHANGE
NEXA: LCALL DISPLAY ;显示录入语音的顺序号
JB P3.1,NEXA
LCALL DISPLAY
JB P3.1,NEXA
MOV A,3EH
CJNE A,#0H,TRY1 ;控制从第一个定时时间开始录音
LJMP REC1
TRY1: CJNE A,#02H,TRY2
LJMP REC2
TRY2: CJNE A,#03H,TRY3
LJMP REC3
TRY3: CJNE A,#04H,TRY4
LJMP REC4
TRY4: CJNE A,#05H,TRY5
LJMP REC5
TRY5: LJMP ETB
REC1: MOV 58H,#40H ;第一段录入语音存放的首地址为40H
LCALL CLRPO ;控制第一段语音录入
REC11: LACLL RECM
CINE A,#48H,REC11
LCALL CLRP0
INC 3EH
SJMP NE1
REC2: MOV 58H,#48H ;第二段录入语音存放的首地址为48H
LCALL CLRP0 ;控制第二段语音录入
REC22: LCALL RECM
CJNE A,#50H,REC22
LCALL CLRP0
INC 3EH
SJMP NE1
REC3: MOV 58H,#50H ;第三段录入语音存放的首地址为50H
LCALL CLRP0 ;控制第三段语音录入
REC33: LACLL RECM
CJNE A,#58H,REC33
LCALL CLRP0
INE 3EH
SJMP NE1
REC4: MOV 58H,#58H
LCALL CLRP0
REC44: LCALL RECM
CJNE A,#50H,REC44
LCALL CLRP0
INC 3EH
SJMP NE1
REC5: MOV 58H,#60H ;第五段录入语音存放的首地址为60H
LCALL CLRP0
REC55: LCALL RECM
CJNE A,#68H,REC55
LCALL CLRP0
JNC 3EH
SJMP NE2
NE1: JNB P3.1,RECORD2
LCALL DISPLAY
JNB P3.1,NE1
SJMP NE1
NE2: JB P3.1,ETB1
LJMP ETB
ETB1: LCALL DISPLAY
JNB P3.1,NE2
SJMP NE2
RECORD2:JNB P3.1,RECORDX
LJMP RECODR1 ;录音循环控制
RECORDX:LCALL DISPLAY
SJMP RECORD2
;放音控制子程序
PLAY: SETB P3.4
MOV A,39H ;39H为放音顺序号存储单元
CJNE A,#01H,TPL1 ;顺序放音控制
SJMP PLAY1
TPL1: CJNE A,#02H,TPL2
SJMP PLAY2
TPL2: CJNE A,#03H,TPL3
SJMP PLAY3
TPL3: CJNE A,#04H,TPL4
SJMP PLAY4
TPL4: CJNE A,#05H,TPL5
SJMP PLAY5
TPL5: LJMP ETB
PLAY1: MOV 58H,#80H ;第一段放音的首地址为80H
LCALL CLRP0
PLAY11:LACLL PLAYM
CJNE A,#88H,PLAY11
LCALL CLRP0
LJMP ETB
PLAY2: MOV 58H,#88H ;第二段放音的首地址为88H
LCALL CLRP0
PLAY22: LCALL PLAYM
CJNE A,#90H,PLAY22
LCALL CLRP0
LJMP ETB
PLAY3: MOV 58H,#90H
LCALL CLRP0
PLAY33;LCALL PLAYM
CJNE A,#98H,PLAY33
LCALL CLRP0
LJMP ETB
PLAY4: MOV 58H,#98H
LCALL CLRP0
PLAY44:LCALL PLAYM
CJNE A,#0A0H,PLAY44
LCALL CLRP0
LJMP ETB
PLAY5: MOV 58H,#0A0H ;第五段放音的首地址为A0H
LCALL CLRP0
PLAY55:LCALL PLAYM
CJNE A,#0A8H,PLAY55
LCALL CLRP0
ETB: MOV 3CH,33H
MOV 3DH,34H
POP PSW
POP B
POP A
MOV TH1,#3CH
MOV TH2,#0B0H
SETB TR1
SETB ET1
SETB PT1
SETB EX0
SETB EX1
SETB EA
RET1
RECM: MOV 3CH,#0FCH ;录音控制子程序
MOV 3DH,#0FFH
LCALL CHANGE
LCALL DISPLAY
CLR P2.6
MOV A,58H
ORL A,#0C0H
MOV P0,A
SETB P2.6
NOP
NOP
CLR P2.6
MOV A,58H
MOV P0,A
SETB P2.6
LCALL DEL500
INC 58,H
MOV A,58H
RET
PLAYM: MOV 3CH,39H ;放音控制子程序
MOV 3DH,#0AAH
LCALL CHANGE
CLR P2.6
MOV A,58H
ORL A,#0C0H
MOV P0,A
SETB P2.6
NOP
NOP
CLER P2.6
MOV A,58H
MOV P0,A
SETB P2.6
LCALL DEL500
INC 58H
MOV A,58H
RET
CLRP0: CLR P2.6
MOV P0,#0C0H
SETB P2.6
LCALL DISPLAY
RET
DEL500: SETB RS1
SETB RS0
MOV R5,#74H
LLOP: LCALL DISPLAY
DJNZ R5,LLOP
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -