❶ 求一個單片機音樂播放器的電路,電路要4個鍵,上一曲,下一曲,停止,播放/暫停。。
單片機播放來MP3是肯定不行的,因為單片自機的速度根本處理不了MP3的解碼操作,需要專用解碼器或者DSP,單片機只能在其中起到一個控制解碼器解碼的作用,另外MP3文件都比較大,肯定需要U盤或者SD卡,這還需要在單片機中嵌入FAT32文件系統,否則沒法得到MP3數據。
大概過程是單片機從SD卡等存數設備中讀取數據然後送解碼晶元並控制其進行解碼,得到的數據送D/A轉換並進行功率放大,最後才能聽到音樂。總之這是個很復雜的電路,涉及到很多東西。不是一兩句能說清楚的,你最好去網上找找相關的資料,祝你成功~
❷ 我想用單片機做一個簡單的音樂播放器,但是不知道如何下手。
這個很簡單哈,網上很多相關的例子和程序,你在網上搜索一下很多,回而且音樂播放器答的的電路也不復雜哈。建議樓主自己搜索哈,查找資料的能力也是一種需要鍛煉的能力哈。一個高手可以查到美國三角大樓內部裡面去,這一點也不誇張哈!
❸ 基於單片機的音樂播放器中樂曲切換怎麼實現
不建議用中斷I/O的方式來做按鍵掃描,因為消振不好處理。按鍵你接普通的IO就行,專用定時中斷屬的方式掃描處理,多次判斷就可以自動消振了。
主程序播放音樂的子程序里要掃描按鍵標志,當檢測到按鍵時強制退出本首歌的播放。
❹ 基於51單片機的音樂播放器
單片機的速度要跟上數據放出的速度,不然就無法達到相應的播放速率,也就無法機一部提高播放質量,如果要能播放出高質量的wav,需要用到高速的MCU
❺ 最最簡單的是做個音樂播放器了,只要個51單片機最小系統+1個喇叭 程序也很簡單
單片機產生音樂的原理:
音樂的產生主要是通過單片機的I/O口輸出高低不同的脈沖信號來控制蜂鳴器發音,要想產生音頻脈沖信號,需要算出某音頻的周期(1/頻率),然後將此周期除以2,即為半周期的時間。利用單片機定時器計時這個半周期的時間,每當計時到後就輸出脈沖的I/O口反相,這樣就在此I/O口上得到此脈沖的頻率。
通常,利用單片機的內部定時器0,工作在方式一下,改變計數初始值TH0和TL0來產生不同的率。
例如,若單片機採用12MHzs晶振,要產生頻率為587Hzs的音頻脈沖時,其音頻信號的脈沖周期T=1/587=1703.5775us,半周期時間為852us,因此總要令計時器計數=852us/1us=852,在每計數852時將I/O口反相,就得到C大調的中調Re。
由於定時器0的在方式一計數方式為16位計數器,最多隻能裝載的數為2的16次方即65536個,也就是說定時器計數到65536就會進入中斷函數,而在中斷函數中將輸出脈沖的I/O口反相即可,故只需設置好定時器0的初值就可以了發出特定的音頻了。
參考:http://www.openedv.com/posts/list/12312.htm
❻ 利用單片機實現簡單的兩首歌曲的音樂播放器
void exten0() interrupt 0
{
count++;
if(count==3)
count = 1;
TR0 = 1;
}
❼ 單片機設計音樂播放器程序和模擬圖(用匯編語言)急求~謝謝!!!
NUMEQU30H
UPEQUP3.6
DNEQUP3.7
ORG0000H
AJMPSTART;Fosc=12MHz
ORG000BH;T0中斷入口地址
AJMPINT_T0
ORG001BH;T1中斷入口地址
AJMPINT_T1
START:
MOVSP,#60H
MOVTMOD,#11H
MOVIE,#8AH
MOVIP,#08H ;T1中斷優先於T0中斷
MOV TH1,#3CH
MOV TL1,#0BH ;以上為系統初始化,T=60ms
W1: MOV P2,#01110001B;等待提示"F" ,01110001
LCALL GETKEY
CJNEA,#0FFH,W1
MOVA,B
CJNEA,#0AH,W2
LCALLKEY_A;輸入鍵是'A',轉KEY_A
SJMP W1
W2: CJNE A,#0BH,W3
LCALLKEY_B;輸入鍵是'B',轉KEY_B
W3: CJNE A,#0CH,W4
LCALLKEY_C;輸入鍵是'C',轉KEY_C
W4: CJNE A,#0DH,W5
LCALLKEY_D
SJMP W1;輸入鍵是'D',轉KEY_D
W5: CJNEA,#0EH,W6 ;下一首
INCNUM
MOVA,NUM
CJNEA,#4,W51
W51:
JCW52
MOVNUM,#0
W52:
MOVA,NUM
SJMPD0
W6: CJNEA,#0FH,W7 ;上一首
MOVA,NUM
JNZW61
MOVNUM,#4
W61:
DECNUM
MOVA,NUM
SJMPD0
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:
JNZD1
SJMP E0
D1: DECA
JNZD2
SJMP E1
D2: DECA
JNZE3
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:;第一首《我和你》
MOVP2,#00000110B ;顯示1,00000110
MOVR5,#11111001B
MOV52H,#HIGHTABLE10
MOV53H,#LOWTABLE10
MOVNUM,#0
LCALLmusic
RET
MUSIC2: ;第二首《萬水千山總是情》
MOV P2,#01011011B ;顯示2,01011011
MOV R5,#10100100B
MOV52H,#HIGHTABLE20
MOV53H,#LOWTABLE20
MOVNUM,#1
LCALL music
RET
MUSIC3: ;第三首《送別》
MOV P2,#01001111B ;顯示3,01001111
MOV R5,#10110000B
MOV52H,#HIGHTABLE30
MOV53H,#LOWTABLE30
MOVNUM,#2
LCALL music
RET
MUSIC4: ;第四首《北京歡迎您》
MOV P2,#01100110B ;顯示4,01100110
MOV R5,#10011001B
MOV52H,#HIGHTABLE40
MOV53H,#LOWTABLE40
MOVNUM,#3
LCALL music
RET
music: MOVR3,#00H ;音樂解碼器
NEXT20:
MOVA,P3
ORLA,#0C0H
MOVP3,A
MOVA,P3
CPLA
ANLA,#0C0H
JZNEXT21
POPACC
POPACC
LJMPW1
RET
NEXT21:
MOVA,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
MOV22H,A
RL A
MOVDPTR,#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:
CLRTR1
CLRTR0
LCALL KEY_E
MOVTH1,#3CH
MOVTL1,#0BH
DJNZ 60H,OUT
MOV 60H,#20
OUT:
SETB TR1
RETI
KEY_E:
JB P3.1,L2 ;中斷鍵盤檢測
LCALL DELAY2 ;消除抖動
JB P3.1,L2 ;如果是高電平就跳到L2
JNBP3.1,$ ;如果仍然是低電平就執行中斷程序
MOV P2,#0111100B ;讓LED顯示E,01111001
L3: JB P3.1,$ ;檢測低電平,直到低電平時才跳出該指令
LCALL DELAY2
JB P3.1,L3
JNBP3.1,$ ;如果再來一個高電平才跳出中斷
MOV P2,R5
L2: SETBTR0
RET
GETKEY: ;讀ABCD鍵盤子程序
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
JNBP1.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
JNBP1.3,$
MOV P2,#01011110B ;顯示D,01011110
MOV R5,#10100001B
MOV A,#0FFH
MOV B,#0DH
L0: JBUP,L01
LCALLDELAY2
JBUP,L01
JNBUP,$
MOVA,#0FFH
MOVB,#0EH
RET
L01:
JBDN,L02
LCALLDELAY2
JBDN,L02
JNBDN,$
MOVA,#0FFH
MOVB,#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:;延時子程序
PUSH0;保存現場
PUSH1
MOV0,#0H
DELAY1:MOV1,#0H
DJNZ1,$
DJNZ0,DELAY1
POP1;恢復現場
POP0
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: ;頻率表
DW64260,64400,64524,64580;簡碼值低音5,低音6,低音7,1
DW64684,64777,64820,64898;簡碼值2,3,4,5
DW64968,65030,65058,65110;簡碼值6,7,高音1,高音
DW65157,65178,65217;簡碼值高音3,高音4,高音5
;--------------------------------------------------------------------
;第一首《我和你》
;--------------------------------------------------------------------
TABLE10:DB64H,82H,42H,48H
DB54H,64H,18H
DB44H,54H,64H,84H
DB5CH
DB64H,84H,44H,04H,42H
DB54H,64H,28H
DB54H,14H,54H,64H
DB4CH
DB98H,88H
DB98H,48H
DB64H,24H,64H,84H
DB5CH
DB64H,82H,42H,48H
DB54H,64H,28H
DB54H,14H,54H,34H
DB4CH
DB00H
;--------------------------------------------------------------------
;第二首《萬水千山總是情》
;--------------------------------------------------------------------
TABLE20: DB64H,74H,84H,04H,82H,94H,84H,6CH
DB54H,44H,04H,62H,54H,44H,2CH
DB24H,18H,44H,54H,64H,84H,94H,64H,5CH
DB64H,74H,84H,04H,82H,94H,84H,6CH
DB54H,44H,04H,62H,54H,44H,2CH
DB24H,18H,44H,64H,54H,04H,42H,24H,44H,4CH
DB64H,84H,9CH,0A4H,94H,74H,84H,04H,92H,8CH,64H,88H
DB64H,84H,9CH,0A4H,0A4H,94H,84H,64H,5CH
DB64H,74H,84H,04H,82H,94H,84H,6CH
DB54H,44H,04H,62H,54H,44H,2CH
DB24H,18H,44H,64H,54H,42H,24,44H,4CH
DB00H
;--------------------------------------------------------------------
;第三首《送別》
;--------------------------------------------------------------------
TABLE30:DB84H,62H,82H,0B8H
DB94H,0B2H,92H,88H
DB84H,42H,52H,64H,52H,44H
DB5CH
DB84H,62H,82H,0B4H,04H,82H
DB94H,0B4H,88H
DB84H,52H,62H,74H,04H,32H
DB4CH
DB94H,0B4H,0B8H
DB0A4H,92H,0A2H,0B8H
DB92H,0A2H,0B2H,92H,92H,82H,62H,42H
DB5CH
DB84H,62H,82H,0B4H,04H,0A2H
DB94H,0B4H,88H
DB84H,52H,62H,74H,04H,32H
DB4CH
DB00H
;--------------------------------------------------------------------
;第四首《北京歡迎您》
;--------------------------------------------------------------------
TABLE40:DB62H,82H,62H,52H,12H
DB62H,52H,12H,64H
DB62H,52H,22H,42H
DB62H,54H
DB52H,42H,22H,42H
DB52H,62H,82H,52H
DB62H,92H,82H,12H
DB52H,44H
DB52H,42H,22H,42H
DB52H,62H,82H,52H
DB62H,92H,82H,82H
DB68H
DB52H,62H,52H,42H
DB82H,92H,64H
DB22H,62H,64H
DB54H,64H
DB64H,84H
DB0B2H,82H,94H
DB02H,92H,82H,62H
DB62H,82H,88H
DB00H
END
❽ 基於單片機的音樂播放器
播放一段音樂的:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^7;
uchar code SONG_TONE[]=
{
212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
};
uchar code SONG_LONG[]=
{
9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
};
void DelayMS(uint ms)
{
uchar t;
while(ms--)
{
for(t=0;t<120;t++);
}
}
void PlayMusic()
{
uint i =0,j,k;
while(SONG_LONG[i]!=0||SONG_TONE[i]!=0)
{
for(j=0;j<SONG_LONG[i]*20;j++)
{
BEEP = ~BEEP;
for(k=0;k<SONG_TONE[i]/3;k++);
}
DelayMS(10);
i++;
}
}
void main()
{
while(1)
{
PlayMusic();
DelayMS(500);
}
}
按鍵發音的(可選擇,四個按鍵):
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P3^7;
sbit K1 = P1^4;
sbit K2 = P1^5;
sbit K3 = P1^6;
sbit K4 = P1^7;
void DelayMS(uint x)
{
uchar t;
while(x--)
{
for(t=0;t<120;t++);
}
}
void Play(uchar t)
{
uchar i;
for(i=0;i<100;i++)
{
BEEP = ~BEEP;
DelayMS(t);
}
BEEP = 0;
}
void main()
{
P1 = 0xff;
while(1)
{
if(K1==0) Play(1);
if(K2==0) Play(2);
if(K3==0) Play(3);
if(K4==0) Play(4);
}
}
自己綜合一下就好。當然再找幾首音樂。
❾ 誰能給我介紹下 單片機音樂播放器 是怎麼實現 播放音樂 功能的 其原理 重謝
單片機實現音樂播放,常見的有以下方式:
1. 利用定時器或PWM功能,輸出PWM,經一級有源濾波後放大驅動揚聲器。由於單片機的資源有限,這種方式一般只能實現類MIDI的效果;輸出語音則受制於片內ROM/Flash的容量,需要外擴存儲器,這樣成本就不太合適了。
2. 單片機僅僅作為控制/顯示功能,控制語音錄放晶元或MP3編解碼晶元(例如VS100x系列)之類。