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

📄 多功能音乐播放控制器_80c51单片机.txt

📁 1.走时,六位LED7段数码管接24小时制显示时钟。 2.一个按键实现选曲(2~3首歌)
💻 TXT
字号:
ORG 0000H 

LJMP START 

ORG 000BH 

INC 20H ;中断服务,中断计数器加1 

MOV TH0, #0DBH 

MOV TL0, #0FFH ;11.0592M晶振,形成10毫秒中断 

RETI 

START: MOV SP, #50H 

MOV TH0, #0DBH 

MOV TL0, #0FFH 

MOV TMOD, #01H 

MOV IE, #82H 

MUSIC0: NOP 

MOV DPTR, #DAT ;表头地址送DPTR 

MOV 20H, #00H ;中断计数器清0 

MUSIC1: NOP 

CLR A ;A清零 

MOVC A, @A+DPTR ;查表取代码 

JZ END0 ;是00H,则结束 

CJNE A, #0FFH, MUSIC5 ;如果不是休止符,往下执行, 

;以R6作为音符频率控制,唱R7节拍那么久。 

LJMP MUSIC3 

MUSIC5: NOP 

MOV R6, A ;R6=18H音符的频率 

INC DPTR ;DPTR加1 

MOV A, #0 

MOVC A, @A+DPTR ;取节拍代码送R7 

MOV R7,A ;R7=30H音符发音的时间 

SETB TR0 ;启动计数 

MUSIC2: NOP 

CPL P3.2 ;P3.2是音乐输出引脚 

MOV A, R6 

MOV R3, A ;R3=R6=18H 

LCALL DEL 

MOV A, R7 

CJNE A, 20H, MUSIC2 ;中断计数器(20H)=R7否?;不等,则继续循环 

MOV 20H, #00H ;等于,则取下一代码 

INC DPTR 

LJMP MUSIC1 

MUSIC3: NOP ;休止100毫秒 

CLR TR0 

MOV R2, #0DH ;R2=13 

MUSIC4: NOP 

MOV R3, #0FFH ;R3=255 

LCALL DEL 

DJNZ R2, MUSIC4 

INC DPTR 

LJMP MUSIC1 

END0: NOP 

MOV R2, #0FFH ;歌曲结束,延时1秒后继续 

MUSIC6: 

MOV R3, #00H 

LCALL DEL 

DJNZ R2, MUSIC6 

LJMP MUSIC0 

DEL: NOP 

DEL3: MOV R4, #02H 

DEL4: NOP 

DJNZ R4, DEL4 

NOP 

DJNZ R3, DEL3 

RET 

NOP 

DAT: 

DB 18H, 30H, 1CH, 10H, 20H, 40H, 1CH, 10H 

DB 18H, 10H, 20H, 10H, 1CH, 10H, 18H, 40H 

DB 1CH, 20H, 20H, 20H, 1CH, 20H, 18H, 20H 

DB 20H, 80H, 0FFH, 20H,30H, 1CH, 10H, 18H 

DB 20H, 15H, 20H, 1CH, 20H, 20H, 20H, 26H 

DB 40H, 20H, 20H, 2BH, 20H, 26H, 20H, 20H 

DB 20H, 30H, 80H, 0FFH,20H, 20H, 1CH, 10H 

DB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20H 

DB 30H, 20H, 2BH, 40H, 20H, 20H, 1CH, 10H 

DB 18H, 10H, 20H, 20H, 26H, 20H, 2BH, 20H 

DB 30H, 20H, 2BH, 40H, 20H, 30H, 1CH, 10H 

DB 18H, 20H, 15H, 20H, 1CH, 20H, 20H, 20H 

DB 26H, 40H, 20H, 20H, 2BH, 20H, 26H, 20H 

DB 20H, 20H, 30H, 80H, 20H, 30H, 1CH, 10H 

DB 20H, 10H, 1CH, 10H, 20H, 20H, 26H, 20H 

DB 2BH, 20H, 30H, 20H, 2BH, 40H, 20H, 15H 

DB 1FH, 05H, 20H, 10H, 1CH, 10H, 20H, 20H 

DB 26H, 20H, 2BH, 20H, 30H, 20H, 2BH, 40H 

DB 20H, 30H, 1CH, 10H, 18H, 20H, 15H, 20H 

DB 1CH, 20H, 20H, 20H, 26H, 40H, 20H, 20H 

DB 2BH, 20H, 26H, 20H, 20H, 20H, 30H, 30H 

DB 20H, 30H, 1CH, 10H, 18H, 40H, 1CH, 20H 

DB 20H, 20H, 26H, 40H, 13H, 60H, 18H, 20H 

DB 15H, 40H, 13H, 40H, 18H, 80H, 00H 

END 

2.时钟程式部分 
ORG 00H 
JMP START 
ORG 0BH 
JMP TIM0 
START: MOV SP,#70H 
MOV 28H,#00 
MOV 2AH,#12H 
MOV 2BH,#00 
MOV 2CH,#00 
MOV TMOD,#00000001B 
MOV TH0,#>(65536-4000) 
MOV TL0,#<(65536-4000) 
MOV IE,#10000010B 
MOV R4,#250 
SETB TR0 
LOOP: JB P0.0,N2 
CALL DELAY 
MOV A,2CH 
ADD A,#01 
DA A 
MOV 2CH,A 
CJNE A,#60H,N1 
MOV 2CH,#00 
N1: JNB P0.0,$ 
CALL DELAY 
N2: JB P0.1,N4 
CALL DELAY 
MOV A,2BH 
ADD A,#01 
DA A 
MOV 2BH,A 
CJNE A,#60H,N3 
MOV 2BH,#00 
N3: JNB P0.1,$ 
CALL DELAY 
N4: JB P0.2,LOOP 
CALL DELAY 
MOV A,2AH 
ADD A,#01 
DA A 
MOV 2AH,A 
CJNE A,#24H,N5 
MOV 2AH,#00 
N5: JNB P0.2,$ 
CALL DELAY 
JMP LOOP 
TIM0: MOV TH0,#>(65536-4000) 
MOV TL0,#<(65536-4000) 
PUSH A 
PUSH PSW 
DJNZ R4,X2 
MOV R4,#250 
CALL CLOCK 
CALL DISP 
X2: CALL SCAN 
POP PSW 
POP A 
RETI 
SCAN: MOV R0,#28H 
INC @R0 
CJNE @R0,#6,X3 
MOV @R0,#0 
X3: MOV A,@R0 
ADD A,#20H 
MOV R1,A 
MOV A,@R0 
SWAP A 
ORL A,@R1 
MOV P1,A 
RET 

CLOCK: MOV A,2CH 
ADD A,#1 
DA A 
MOV 2CH,A 
CJNE A,#60H,X4 
MOV 2CH,#00 
MOV A,2BH 
ADD A,#1 
DA A 
MOV 2BH,A 
CJNE A,#60H,X4 
MOV 2BH,#00 
MOV A,2AH 
ADD A,#1 
DA A 
MOV 2AH,A 
CJNE A,#24H,X4 
MOV 2AH,#00 
X4: RET 
DISP: MOV R1,#20H 
MOV A,2CH 
MOV B,#10H 
DIV AB 
MOV @R1,B 
INC R1 
MOV @R1,A 
INC R1 
MOV A,2BH 
MOV B,#10H 
DIV AB 
MOV @R1,B 
INC R1 
MOV @R1,A 
INC R1 
MOV A,2AH 
MOV B,#10H 
DIV AB 
MOV @R1,B 
INC R1 
MOV @R1,A 
RET 
DELAY: MOV R6,#10 
D1: MOV R7,#248 
DJNZ R7,$ 
DJNZ R6,D1 
RET 
END

⌨️ 快捷键说明

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