173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

倒数音乐播放器单片机

htxw 2023-03-13 资讯中心 22 ℃

关于单片机课程设计的音乐提示定时器设计

其实那没什么,你了解单片机吗,如果了解的话应该不难的,单片机中有个定时器你可以让他定个基准一般为100ms,然后利用其循环次数,来定时间就可以了,短电和通电用寄电器就可以了,用单片机的I/O口来控制,也可以用晶体管来控制都可以,你说的四位显示用I/O进行段控和位控就可以了。53310015@163.com要联系的话就那个

谁能给我介绍下 单片机音乐播放器 是怎么实现 播放音乐 功能的 其原理 重谢

电路连接很简单,我用的是P3.0端口接个蜂鸣器就可以了(你可以根据你的具体硬件连接去改下

音乐程序的设计原理和程序如下:

设计原理

⑴ 总体原理:

乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,经过放大电路,由蜂鸣器放出,就产生了美妙和谐的乐曲。

⑵ 单片机产生不同频率脉冲信号的原理:

1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。

2)利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:

例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。

计数脉冲值与频率的关系公式如下:

N=Fi/2/Fr

(N:计数值,Fi:内部计时一次为1uS,故其频率为1MHz,Fr:要产生的频率 )

⑶ 其计数值的求法如下:

T=65536-N=65536-Fi/2/Fr

计算举例:

设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。

T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr

低音DO的T=65536-500000/262=63627

中音DO的T=65536-500000/523=64580

高音DO的T=65536-500000/1047=65059

⑷ C调个音符频率与计数值T的对照表如下表所示:

表9.1 C调各音符频率与计数值T的对照表

音符 频率(Hz) 简谱码T值 音符 频率(Hz) 简谱码T值

低1DO 262 63628 #4FA# 740 64860

#1DO# 277 63731 中5SO 784 64898

低2RE 294 63835 #5SO# 831 64923

#2RE# 311 63928 中6LA 880 64968

低3M 330 64103 #6 932 64994

低4FA 349 64103 中7SI 988 65030

#4FA# 370 64260 高1DO 1046 65058

低5SO 392 64260 #1DO# 1109 65085

#5SO# 415 64331 高2RE 1175 65110

低6LA 440 64400 #2RE# 1245 65124

#6 466 64463 高3M 1318 65157

低7SI 494 64524 高4FA 1397 65178

中1DO 523 64580 #4FA# 1480 65198

⑸ 每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,下表为节拍码的对照。但如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如下表为1/4和1/8节拍的时间设定。

表9.2 节拍码对照表

1/4节拍 1/8节拍

节拍码 节拍数 节拍码 节拍数

1 1/4拍 1 1/8拍

2 2/4拍 2 1/4拍

3 3/4拍 3 3/8拍

4 1拍 4 1/2拍

5 1又1/4拍 5 5/8拍

6 1又1/2拍 6 3/4拍

7 1又3/4拍 7 7/8拍

8 2拍 8 1拍

9 2又1/4拍 9 1又1/8拍

A 2又1/2拍 A 1又1/4拍

B 2又3/4拍 B 1又3/8拍

C 3拍 C 1又1/2拍

D 3又1/4拍 D 1又5/8拍

E 3又1/2拍 E 1又3/4拍

F 3又3/4拍 F 1又7/8拍

表9.3 各调节拍的时间设定表

1/4节拍 1/8节拍

曲调值 DELAY 曲调值 DELAY

调4/4 125毫秒 调4/4 62毫秒

调3/4 187毫秒 调3/4 94毫秒

调2/4 250毫秒 调2/4 125毫秒

⑹ 建立音乐的步骤:

1)先把吧乐谱的音符找出,然后由上表建立T值表的顺序。

2)把T值表建立在TABLE1,构成发音符的计数值放在“TABLE”。

3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。

表9.4 简谱对应的简谱码、T值、节拍数

简谱 发音 简谱码 T值 节拍码 节拍数

5 低5SO 1 64260 1 1/4拍

6 低6LA 2 64400 2 2/4拍

7 低7SI 3 64524 3 3/4拍

1 中1DO 4 64580 4 1拍

2 中2RE 5 64684 5 1又1/4拍

3 中3M 6 64777 6 1又2/4拍

4 中4FA 7 64820 7 1又3/4拍

5 中5SO 8 64898 8 2拍

6 中6LA 9 64968 9 2又1/4拍

7 中7SI A 65030 A 2又2/4拍

1 高1DO B 65058 B 2又3/4拍

2 高2RE C 65110 C 3拍

3 高3M D 65157 D 3又1/4拍

4 高4FA E 65178 E 3又2/4拍

5 高5SO F 65217 F 3又3/4拍

不发音 0

1/4拍的延迟时间=187毫秒

DELAY: MOV R7,#2

D2: MOV R4,#187

D3: MOV R3,#248

DJNZ R3,$

DJNZ R4,D3

DJNZ R7,D2

RET

4.程序范例

ORG 0000H ;主程序起始地址

SJMP START ;跳至主程序

ORG 000BH ;TIMER0中断起 始地址

LJMP TIM0 ;跳至TIMER0中断子程序

START: MOV TMOD,#01H ;设T0在M1

MOV IE,#82H ;中断使能

START0:MOV 30H,#00 ;取简谱码指针

NEXT: MOV A,30H ;简谱码指针载入A

MOV DPTR,#TAB ;至TAB取简谱码

MOVC A,@A+DPTR ;

MOV R2,A ;渠道的简谱码暂存于R2

JZ END0 ;是否渠道00(结束码)

ANL A,#0FH ;不是,则取低4位(节拍码)

MOV R5,A ;将节拍码存入R5

MOV A,R2 ;将取到的简谱码再载入A

SWAP A ;高低4位交换

ANL A,#0FH ;取低4位(音符码)

JNZ SING ;取到的音符码是否为0?

CLR TR0 ;开始,则不发音

SJMP D1 ;跳至D1

SING: DEC A ;取到的音符码减1(不含0)

MOV 22H,A ;存入(22H)

RL A ;乘2

MOV DPTR,#TAB1 ;至TABLE1取相对的高位字节计数值

MOVC A,@A+DPTR ;

MOV TH0,A ;取到的高位字节存入TH0

MOV 21H,A ;取到的高位字节存入(21H)

MOV A,22H ;在载入取到的音符码

RL A ;乘2

INC A ;加1

MOVC A,@A+DPTR ;至TABLE1取相对的低位字节计数值

MOV TL0,A ;取到的低位字节存入TL0

MOV 20H,A ;取到的低位字节存入(20H)

SETB TR0 ;启动TIMER0

D1: LCALL DELAY ;其本单位时间1/4拍187毫秒

INC 30H ;取简谱码指针加1

JMP NEXT ;取下一个简谱码

END0: CLR TR0 ;停止TIMER0

JMP START0 ;重复循环

TIM0: PUSH ACC ;将A的值暂存于堆栈

PUSH PSW ;将PSW的值暂存于堆栈

MOV TL0,20H ;重设计数值

MOV TH0,21H ;

CPL P3.0 ;将P3.0位反相,控制蜂鸣器发声

POP PSW ;至堆栈取回PSW的值

POP ACC ;至堆栈取回A的值

RETI

DELAY:MOV R7,#02

D2: MOV R4,#187

D3: MOV R3,#248

DJNZ R3,$

DJNZ R4,D3

DJNZ R7,D2

RET

TAB1: ;决定节拍

DW 64260,64400,64521,64580

DW 64684,64777,64820,64898

DW 64968,65030,65058,65110

DW 65157,65178,65217

TAB: ;乐曲名称《梁祝》

DB 02H,82H,62H,52H,48H,02H,52H,32H,22H,18H

DB 83H,91H,72H,62H,51H,61H,71H,61H,83H,61H

DB 81H,51H,61H,71H,61H,51H,46H,82H,32H,52H

DB 22H,42H,16H,21H,41H,18H,0E4H,13H,21H,43H

DB 51H,21H,41H,12H,83H,81H,61H,81H,58H,53H

DB 61H,31H,22H,13H,21H,42H,52H,0E2H,42H,21H

DB 11H,91H,41H,18H,63H,81H,32H,52H,21H,41H,

DB 16H,0E4H,11H,21H,31H,51H,26H,11H,21H,43H

DB 51H,82H,62H,52H,61H,51H,42H,21H,11H,0E4H

DB 44H,21H,41H,21H,11H,0E1H,11H,21H,41H,18H

DB 61H,81H,51H,61H,51H,41H,32H,21H,41H,18H

DB 08H,0H,04H ;曲子最后静音5拍长的时间

DB 00H ;乐曲结束

END

单片机设计音乐播放器程序和仿真图(用汇编语言)?急求~谢谢!!!

NUM EQU 30H

UP EQU P3.6

DN EQU P3.7

ORG     0000H

AJMP    START           ;Fosc=12MHz

ORG     000BH           ;T0 中断入口地址

AJMP    INT_T0

ORG     001BH           ;T1 中断入口地址

AJMP    INT_T1

START:

MOV  SP, #60H

MOV TMOD, #11H

MOV IE, #8AH 

MOV IP, #08H          ;T1中断优先于T0中断

MOV TH1, #3CH

MOV TL1, #0BH        ;以上为系统初始化,T=60ms

W1: MOV P2, #01110001B    ;等待提示"F" ,01110001

LCALL GETKEY

CJNE  A, #0FFH, W1  

MOV  A, B

CJNE    A, #0AH, W2

LCALL   KEY_A            ;输入键是'A',转KEY_A

SJMP W1

W2: CJNE A, #0BH, W3

LCALL   KEY_B           ;输入键是'B',转KEY_B

W3: CJNE A, #0CH, W4

LCALL   KEY_C           ;输入键是'C',转KEY_C

W4: CJNE A, #0DH, W5

LCALL   KEY_D

    SJMP W1                ;输入键是'D',转KEY_D

W5: CJNE A,#0EH,W6 ;下一首

INC NUM

MOV A,NUM

CJNE A,#4,W51

W51:

JC W52

MOV NUM,#0

W52:

MOV A,NUM

SJMP D0

W6: CJNE A,#0FH,W7 ;上一首

MOV A,NUM

JNZ W61

MOV NUM,#4

W61:

DEC NUM

MOV A,NUM

SJMP D0

W7:

SJMP W1

KEY_A:                        ;从1~4按顺序播放

LCALL MUSIC1      ;乐曲《我和你》

LCALL MUSIC2       ;乐曲《万水千山总是情》

LCALL MUSIC3               ;乐曲《送别》

LCALL MUSIC4               ;乐曲《北京欢迎您》

RET

KEY_B:                         ;从1~4循环播放

T11: LCALL KEY_A

SJMP T11

RET

KEY_C:                        ;循环播放某一乐曲

T3: LCALL GETWORD

CJNE A, #0FFH, T3

MOV A, B

D0:

JNZ D1

SJMP E0

D1: DEC A

JNZ D2

SJMP E1

D2: DEC A

JNZ E3

SJMP E2

E0: LCALL MUSIC1            ;乐曲《我和你》

SJMP E0

E1: LCALL MUSIC2           ;乐曲《万水千山总是情》

SJMP E1

E2: LCALL MUSIC3           ;乐曲《送别》

SJMP E2

E3: LCALL MUSIC4           ;乐曲《北京欢迎您》

SJMP E3

RET

KEY_D:                      ;从某一乐曲开始播放,播放完后停止

T2: LCALL GETWORD

CJNE A, #0FFH, T2

MOV A, B

CJNE A, #00H, B1

SJMP C0

B1: CJNE A, #01H, B2

SJMP C1

B2: CJNE A, #02H, C3

SJMP C2

C0: LCALL MUSIC1               ;乐曲《我和你》

C1: LCALL MUSIC2               ;乐曲  《万水千山总是情》 

C2: LCALL MUSIC3               ;乐曲《送别》

C3: LCALL MUSIC4               ;乐曲《北京欢迎您》

RET

MUSIC1:                         ;第一首《我和你》

MOV  P2, #00000110B  ;显示1,00000110

MOV  R5, #11111001B

MOV  52H, #HIGH TABLE10

    MOV  53H, #LOW TABLE10

MOV NUM,#0

LCALL  music

RET

MUSIC2:     ;第二首《万水千山总是情》

MOV P2, #01011011B           ;显示2,01011011

MOV R5, #10100100B

MOV  52H, #HIGH TABLE20

    MOV  53H, #LOW TABLE20 

MOV NUM,#1

    LCALL  music

RET

MUSIC3:                   ;第三首《送别》

MOV P2, #01001111B   ;显示3,01001111

MOV R5, #10110000B

MOV  52H, #HIGH TABLE30

    MOV  53H, #LOW TABLE30 

MOV NUM,#2

    LCALL  music

RET

MUSIC4:                         ;第四首《北京欢迎您》

MOV P2, #01100110B     ;显示4,01100110

MOV R5, #10011001B

MOV  52H, #HIGH TABLE40

    MOV  53H, #LOW TABLE40 

MOV NUM,#3

    LCALL  music

RET 

music: MOV R3,#00H           ;音乐解码器

NEXT20:

MOV A,P3

ORL A,#0C0H

MOV P3,A

MOV A,P3

CPL A

ANL A,#0C0H

JZ NEXT21

POP ACC

POP ACC

LJMP W1

RET

NEXT21:

     MOV   A, R3

 MOV  DPH, 52H

 MOV  DPL, 53H

 MOVC A, @A+DPTR

 MOV  R2, A

 JZ  STOP

 ANL  A, #0FH

 MOV  R1, A

 MOV  A, R2

 SWAP  A

 ANL  A, #0FH

 JNZ  SING

 CLR  TR0

 JMP  W11

;----------------------------------------------------------

SING:

DEC  A

MOV  22H, A

RL   A

MOV  DPTR, #TABLE00

MOVC  A, @A+DPTR

MOV  TH0, A

MOV  21H, A

MOV  A, 22H

RL  A

INC  A

MOVC  A, @A+DPTR

MOV  TL0, A

MOV  20H, A

SETB  TR0

SETB   TR1

W11: 

LCALL  DELAY3

INC  R3

LJMP  NEXT20

;-----------------------------------------------------------

STOP:

CLR  TR0

CLR  TR1

    RET

;***************************************************

;定时器0中断子程序

;***************************************************

INT_T0: 

CLR  TR0

MOV  TL0, 20H

MOV  TH0, 21H

CPL  P3.0

SETB TR0

RETI

;***************************************************

;定时器1中断子程序

;***************************************************

INT_T1: 

CLR  TR1

CLR  TR0

LCALL KEY_E

MOV  TH1, #3CH

  MOV  TL1, #0BH

DJNZ  60H, OUT

    MOV  60H, #20

OUT:

SETB TR1

RETI                      

KEY_E:

JB P3.1, L2              ;中断键盘检测

LCALL DELAY2           ;消除抖动

JB  P3.1, L2           ;如果是高电平就跳到L2

JNB   P3.1, $           ;如果仍然是低电平就执行中断程序

MOV P2, #0111100B        ;让LED显示E,01111001

L3: JB P3.1, $           ;检测低电平,直到低电平时才跳出该指令

LCALL DELAY2

JB P3.1, L3

JNB  P3.1, $           ;如果再来一个高电平才跳出中断

MOV P2,R5

L2: SETB  TR0

RET

GETKEY:                ;读A B C D键盘子程序 

SA: JB P1.0, SB            ;读A,是高电平表示没有按键,跳转到SB

LCALL DELAY2

JB P1.0, SA

JNB  P1.0, $

MOV P2, #01110111B     ;显示A,01110111

MOV R5, #10001000B

MOV A, #0FFH

MOV B, #0AH

RET

SB: JB P1.1, C11              ;读B,是高电平表示没有按键按下,跳转到C11

LCALL DELAY2

JB P1.1, SB

JNB P1.1, $

MOV P2, #01111100B        ;显示B,01111100

MOV R5, #10000011B

MOV A, #0FFH

MOV B, #0BH

RET

C11:JB P1.2, ED1        ;读C

LCALL DELAY2

JB  P1.2, C11

JNB  P1.2, $

MOV P2, #00111001B ;显示C,00111001

MOV R5, #11000110B

MOV A, #0FFH

MOV B, #0CH

RET

ED1:

JB P1.3, L0             ;读D

LCALL DELAY2

JB  P1.3, ED1

JNB   P1.3, $

MOV P2, #01011110B   ;显示D,01011110

MOV R5, #10100001B

MOV A, #0FFH

MOV B,  #0DH

L0: JB UP,L01

LCALL DELAY2

JB UP,L01

JNB UP,$

MOV A,#0FFH

MOV B,#0EH

RET

L01:

JB DN,L02

LCALL DELAY2

JB DN,L02

JNB DN,$

MOV A,#0FFH

MOV B,#0FH

L02:

RET

GETWORD:                     ;读音乐序号子程序

S1: JB P1.4, S2         ;读1键

LCALL DELAY2

JB P1.4, S1

JNB P1.4, $

MOV P2, #00000110B    ;显示1

MOV R5, #11111001B

MOV A, #0FFH

MOV B, #00H

RET

S2: JB P1.5, S3            ;读2键

LCALL DELAY2

JB P1.5, S2

JNB P1.5, $

MOV P2, #01011011B    ;显示2

MOV R5, #10100100B

MOV A, #0FFH

MOV B, #01H

RET

S3: JB P1.6,S4           ;读3键

LCALL DELAY2

JB P1.6,S3

JNB P1.6,$

MOV P2,#01001111B    ;显示3

MOV R5,#10110000B

MOV A,#0FFH

MOV B,#02H

RET

S4: JB P1.7, L1           ;读4键

LCALL DELAY2

JB P1.7, S1

JNB P1.7, $

MOV P2, #01100110B ;显示4

MOV R5, #10011001B

MOV A, #0FFH

MOV B, #03H

L1: RET

DELAY:                          ;延时子程序

        PUSH    0               ;保存现场

        PUSH    1

        MOV     0, #0H

DELAY1: MOV     1, #0H

        DJNZ    1, $

        DJNZ    0, DELAY1

        POP     1               ;恢复现场

        POP     0

        RET

DELAY2: MOV 41H, #100        ;延时子程序2

F1: MOV 42H, #250

DJNZ 42H, $

DJNZ 41H, F1

RET

DELAY3:           ;延时子程序3 

MOV  R7, #2

W22: MOV  R4, #125

W33: MOV  R0, 248

DJNZ  R0, $

DJNZ  R4, W33

DJNZ  R7, W22

DJNZ  R1, DELAY3

RET

TABLE00:                       ;频率表

DW 64260,64400,64524,64580          ;简码值 低音5, 低音6, 低音7,1

DW 64684,64777,64820,64898          ; 简码值 2,3,4,5

DW 64968,65030,65058,65110          ; 简码值 6,7,高音1,高音

        DW 65157,65178,65217            ;简码值 高音3,高音4,高音5

;--------------------------------------------------------------------

;第一首《我和你》

;--------------------------------------------------------------------

TABLE10: DB 64H,82H,42H,48H

DB 54H,64H,18H

DB 44H,54H,64H,84H

DB 5CH

DB 64H,84H,44H,04H,42H

DB 54H,64H,28H

DB 54H,14H,54H,64H

DB 4CH

DB 98H,88H

DB 98H,48H

DB 64H,24H,64H,84H

DB 5CH

DB 64H,82H,42H,48H

DB 54H,64H, 28H

DB 54H,14H,54H,34H

DB 4CH

DB 00H

;--------------------------------------------------------------------

;第二首《万水千山总是情》

;--------------------------------------------------------------------

TABLE20: DB 64H,74H,84H,04H,82H,94H,84H,6CH

DB 54H,44H,04H,62H,54H,44H,2CH

DB 24H,18H, 44H,54H,64H,84H,94H,64H,5CH

DB 64H,74H,84H,04H,82H,94H,84H,6CH

DB 54H,44H,04H,62H,54H,44H,2CH

DB 24H,18H, 44H,64H,54H,04H,42H,24H,44H,4CH

DB 64H,84H,9CH,0A4H,94H,74H,84H,04H,92H,8CH,64H,88H

DB 64H,84H,9CH,0A4H,0A4H,94H,84H,64H,5CH

DB 64H,74H, 84H,04H,82H,94H,84H,6CH

DB 54H,44H,04H,62H,54H,44H,2CH

DB 24H,18H,44H,64H,54H,42H,24,44H,4CH

DB 00H

;--------------------------------------------------------------------

;第三首《送别》

;--------------------------------------------------------------------

TABLE30:   DB 84H,62H,82H,0B8H

DB 94H,0B2H,92H,88H

DB 84H,42H,52H,64H,52H,44H

        DB 5CH

        DB 84H,62H,82H,0B4H,04H,82H

DB 94H,0B4H, 88H

DB 84H,52H,62H,74H,04H,32H

DB 4CH

DB 94H,0B4H,0B8H

DB 0A4H,92H,0A2H,0B8H

DB 92H,0A2H,0B2H,92H,92H,82H,62H,42H

DB 5CH

DB 84H,62H,82H,0B4H,04H,0A2H

DB 94H,0B4H,88H

DB 84H,52H,62H,74H,04H,32H

DB 4CH

DB 00H

;--------------------------------------------------------------------

;第四首《北京欢迎您》

;--------------------------------------------------------------------

TABLE40:    DB 62H,82H,62H,52H,12H

DB 62H,52H,12H,64H

DB 62H,52H,22H,42H 

DB 62H,54H

DB 52H,42H,22H,42H

DB 52H,62H,82H,52H

DB 62H,92H,82H,12H

DB 52H,44H

DB 52H,42H,22H,42H

DB 52H,62H,82H,52H

DB 62H,92H,82H,82H

DB 68H

DB 52H,62H,52H,42H

DB 82H,92H,64H

DB 22H,62H,64H

DB 54H,64H

DB 64H,84H

DB 0B2H,82H,94H

DB 02H,92H,82H,62H

DB 62H, 82H,88H

DB 00H

END

一个51单片机音乐播放器,请问电路图右边该如何连接

音频信号应该是从DAC取出,经运放、滤波后,再去功放(简单的或者一个运放,或者一个三极管,然后喇叭),这个你可以去参考该芯片的DAC电路;

至于代码嘛,没有做过,倒想通过你去做这个实验,你得有个正弦波发生器,将所需要的音阶信号录下来,如:以国际标准音 A-la-440HZ为准

C - do - 261.6HZ

D - re - 293.6HZ

E - mi - 329.6HZ

F - fa - 349.2HZ

G - sol- 392HZ

A - la - 440HZ

B - si - 493.8HZ

简单的几个音阶,通过ADC每个录一两个周期,所得数据,建立音阶表。回放时,得根据节拍时间去计算某一个音阶需要连续输出多少个周期数据给DAC。这些完成后,就可以配上小键盘,来个单8度音演奏了;

倒数音乐播放器单片机的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:倒数音乐播放器单片机

<