前? ?言
????????這是本人在大學(xué)期間的《單片機(jī)控制技術(shù)》課程中,所作的結(jié)課作業(yè)項(xiàng)目,而我也正想要一個(gè)電子音樂播放器,而且這樣設(shè)計(jì)的音樂播放器可以發(fā)出宜人的音樂旋律,能給生活增加不少的樂趣,本次作業(yè)項(xiàng)目也就讓我用51系列單片機(jī)設(shè)計(jì)這個(gè)電子音樂播放器。
????????這方面不僅僅是需要掌握單片機(jī)的基本知識(shí)、也是需要掌握一定的單片機(jī)程序設(shè)計(jì)的知識(shí),也包括硬件方面的選型、電路設(shè)計(jì)、各元器件的作用等。
目 ?錄
????????1、基本概論
????????2、使用說明
????????????????2.1 按鍵部分
????????????????2.2 接口部分
????????3、電路設(shè)計(jì)
????????????????3.1 原硬件設(shè)計(jì)方案
????????????????3.2 重新選型
????????????????3.3 新型設(shè)計(jì)方案
????????4、程序設(shè)計(jì)
????????????????4.1 定時(shí)器初始化設(shè)置
????????????????4.2 中斷程序
????????????????4.3 蜂鳴器頭文件程序
????????????????4.4 音樂節(jié)奏頭文件程序
????????5、總結(jié)收獲
==================================================
????????1、基本概論:
????????音樂盒可以發(fā)出宜人的音樂旋律,能給生活增加不少的樂趣,本次作業(yè)項(xiàng)目也讓我想到了用51系列單片機(jī)設(shè)計(jì)一個(gè)電子音樂播放器。
????????這方面不僅僅是需要掌握單片機(jī)的基本知識(shí)、也是需要掌握一定的單片機(jī)程序設(shè)計(jì)的知識(shí),也包括硬件方面的選型、電路設(shè)計(jì)、各元器件的作用等。
????????經(jīng)過思考與驗(yàn)證,決定基本功能如下:
- 基本功能實(shí)現(xiàn):
利用I/0口產(chǎn)生一定頻率的方波,驅(qū)動(dòng)蜂鳴器,發(fā)出不同的音調(diào),從而演奏樂曲;
- 按鍵功能實(shí)現(xiàn):
可通過功能鍵選擇樂曲,暫停,播放;
- USB供電功能:
可以通過USB接口進(jìn)行電源輸入,系統(tǒng)得電運(yùn)行;
- 整機(jī)小型化:
通過選型和優(yōu)化整體設(shè)計(jì),才用9CM*7CM的板子為基底設(shè)計(jì)電路。
?
????????2、使用說明
????????2.1 按鍵部分:
????????電路硬件設(shè)計(jì)上有四處按鍵,而上部分的TS6643ZJ輕觸開關(guān)是原先設(shè)計(jì)的方案遺留,實(shí)則沒有作用。
????????側(cè)邊三個(gè)按鍵分別是:
????????紅色按鍵為播放鍵,紅色為中心,兩邊按鍵分別為“上一首”和“下一首”的切換鍵。
????????2.2 接口部分:
????????電路硬件設(shè)計(jì)上有兩處接口,分別為USB接口和4PIN接口。
????????USB接口可以直接接入DC 5V電源的USB接口,以此得電,讓播放器工作;
????????4PIN接口可以通過USB轉(zhuǎn)TTL接口連接電腦,編譯程序和供電調(diào)試工作。
????????3、電路設(shè)計(jì)
????????最初的電路設(shè)計(jì)當(dāng)中,我采用的是STC89C51單片機(jī),經(jīng)過Proteus 8.11仿真軟件設(shè)計(jì)和實(shí)際電路焊接后,調(diào)試發(fā)現(xiàn)效果不佳,詢問專業(yè)的同學(xué)和查閱資料所知,若要實(shí)現(xiàn)更好的功能應(yīng)當(dāng)采用更好的單片機(jī)系統(tǒng),在后期就換選了STC15F2K60S2單片機(jī),而這種單片機(jī)與之前的STC89C51單片機(jī)有以下區(qū)別(通過芯片說明手冊對(duì)比):
- 兩者都是直流供電電壓單片機(jī),STC89C51電壓為4.5V-5.5V,而STC15F2K60S2為3.8V-5.5V,而且其Flash程序存儲(chǔ)器是60K;
- STC15F2K60S2不需要外部晶振和外部復(fù)位的單片機(jī);大容量2K字節(jié)SRAM;雙串口;高速10位8通道A/D轉(zhuǎn)換器T0-T2 三個(gè)定時(shí)器:EEPROM;CCP/PCA/PWM;SPI功能;
- STC15F2K60S2有先進(jìn)的指令集結(jié)構(gòu),也可以兼容原先的普通8051指令集,也有硬件乘法/除法指令。
????????總體而言,可以理解成STC15F2K60S2芯片就是增強(qiáng)版的STC89C51芯片。文章來源:http://www.zghlxwxcb.cn/news/detail-462659.html
????????3.1 原硬件設(shè)計(jì)方案:
????????在硬件設(shè)計(jì)工具的選用上,開始還是Proteus 8.11仿真工具,后來隨著需求增加,進(jìn)而增用了立創(chuàng)EDA工具,該軟件也同時(shí)支持STC15F2K60S2芯片的設(shè)計(jì),BOM表的制作與對(duì)比。
????????起初用Proteus 8.11對(duì)STC89C51單片機(jī)設(shè)計(jì)的最基本的音樂播放器電路設(shè)計(jì)方案設(shè)計(jì)如下:
????????時(shí)鐘電路:左上處以晶振為主的電路為時(shí)鐘電路,本音樂播放器配備的單片機(jī)系統(tǒng)是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證該系統(tǒng)的同步工作的實(shí)現(xiàn),加入這種唯一時(shí)鐘信號(hào)控制下進(jìn)行有序工作。
????????復(fù)位電路:左中處以一個(gè)復(fù)位按鍵為主的電路為復(fù)位電路,該系統(tǒng)剛開始接上電源時(shí),還是斷電或者發(fā)生故障后都要復(fù)位。而這樣的設(shè)計(jì)就是使 CPU和系統(tǒng)中的其他功能部件都恢復(fù)到一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作。
????????發(fā)光電路:右上處以兩個(gè)二極管(不同色)所組裝的電路為播放器的發(fā)光二極管示意,一邊綠色與一邊紅色所示意兩種音樂的播放。
????????發(fā)聲電路:右下處以蜂鳴器為主的電路為發(fā)聲電路,通過9012三極管配置產(chǎn)生向系統(tǒng)外發(fā)聲信號(hào),而蜂鳴器發(fā)聲原理則是電流通過內(nèi)部的電磁線圈,使電磁線圈產(chǎn)生磁場來驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng)發(fā)聲。
????????電路焊接設(shè)計(jì)后如下:
????????3.2 重新選型:
????????該電路設(shè)計(jì)完之后,在實(shí)際硬件設(shè)計(jì)下設(shè)計(jì)出現(xiàn)了一些問題,首先蜂鳴器的選型存在問題,再者最為主要的是芯片選型上檔次較低,后來選用STC15F2K60S2芯片。
????????STC15F2K60S2系列單片機(jī)中包含中央處理器(CPU)、程序存儲(chǔ)器(Flash)、數(shù)據(jù)存儲(chǔ)器(SRAM)、定時(shí)器、I/0口、高速A/D轉(zhuǎn)換、看門狗、UART超高速異步串行通信口1/串行通信口2,CCP/PWM/PCA,1組高速同步電行端口SPI,片內(nèi)高精度R/C時(shí)鐘及高可靠復(fù)位等模塊。STC15F2K60S2系列單片機(jī)幾乎包含了數(shù)據(jù)采集和控制中所需的所有單元模塊,可稱得上是一個(gè)片上系統(tǒng)。
????????重新選型后的硬件系統(tǒng)就要換上其他關(guān)鍵元器件,以下表格則為更換的關(guān)鍵元器件以及使用原因:
元件名稱 |
型號(hào) |
數(shù)量 |
使用原因 |
無源電磁蜂鳴器 |
SEA-12095-16 |
1 |
發(fā)聲部分 |
穩(wěn)壓二極管 |
1N4148W |
1 |
續(xù)流作用 |
4PIN排針 |
X6511WV-04H-C30D60 |
1 |
方便USB轉(zhuǎn)TTL |
發(fā)光二極管 |
204-10SURT/S530-A3 |
2 |
方便觀察電路狀態(tài) |
三極管 |
MPS8550-D-AT/PC |
1 |
放大作用 |
芯片 |
STC15F2K60S2-28I-PDIP40 |
1 |
相較于STC89C51芯片有更佳的性能 |
USB接口 |
USB-05 |
1 |
USB供電方式 |
????????3.3 新型設(shè)計(jì)方案:
????????通過使用立創(chuàng)EDA軟件設(shè)計(jì)了個(gè)STC15F2K60S2芯片為主的音樂播放器電路:
?????? 因?yàn)槠鸪踹€想著用STC89C51芯片繼續(xù)原方案設(shè)計(jì),僅是改動(dòng)部分電路和程序,所以在實(shí)際硬件電路中還留著晶振時(shí)鐘電路。
?????? 實(shí)際焊接后電路如下:
????????紅圈為復(fù)位電路:以一個(gè)復(fù)位按鍵為主的電路為復(fù)位電路,該系統(tǒng)剛開始接上電源時(shí),還是斷電或者發(fā)生故障后都要復(fù)位。而這樣的設(shè)計(jì)就是使 CPU和系統(tǒng)中的其他功能部件都恢復(fù)到一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開始工作,但其實(shí)更換了STC15F2K60S2芯片后,這個(gè)功能沒有什么用了。
????????黃圈為時(shí)鐘電路:本音樂播放器原方案的STC89C51單片機(jī)系統(tǒng)是一個(gè)復(fù)雜的同步時(shí)序電路,為了保證該系統(tǒng)的同步工作的實(shí)現(xiàn),加入這種唯一時(shí)鐘信號(hào)控制下進(jìn)行有序工作,但是后來STC15F2K60S2則不需要外部晶振,所以故此設(shè)計(jì)是原方案遺留,實(shí)際電路工作沒有作用。
????????藍(lán)圈為發(fā)聲電路:以蜂鳴器為主的電路為發(fā)聲電路,通過1N4148W穩(wěn)壓二極管和MPS8550三極管配置產(chǎn)生向系統(tǒng)外發(fā)聲信號(hào),而因?yàn)榉澍Q器在電氣屬性上是屬于電感類元件,會(huì)自感產(chǎn)生電動(dòng)勢,所以需要有個(gè)穩(wěn)壓二極管來放電,無源電磁蜂鳴器發(fā)聲原理則是利用電磁感應(yīng)現(xiàn)象,為音圈接入電流后形成的電磁鐵與永磁鐵相吸或相斥而推動(dòng)振膜發(fā)聲。
????????白圈為USB接口電路:本音樂播放器可以通過USB接口供電工作,一邊直接介入5V電路,一遍直接接地,其中通過電解電容過濾低頻雜波,USB的兩端EH端直接短接一起并接地。
????????綠圈為發(fā)光電路:以兩個(gè)二極管(不同色)所組裝的電路為播放器的發(fā)光二極管示意,一邊綠色與一邊紅色所示意兩種音樂的播放。
????????灰圈為4PIN電路:通過4PIN排針可以接入U(xiǎn)SB轉(zhuǎn)TTL電平轉(zhuǎn)換板。
????????4、程序設(shè)計(jì)
????????基本的程序部分參考了許多資料,尤其是音樂演奏程序部分,這方面是進(jìn)制轉(zhuǎn)換與音樂節(jié)奏相關(guān)專業(yè)的交叉學(xué)科內(nèi)容,所以參考了CSDN論壇的資料,集合了各種方式來調(diào)試,調(diào)用部分的.h頭文件。
????????4.1 定時(shí)器初始化設(shè)置:
????????定時(shí)器,簡單來說可以比喻為一個(gè)鬧鐘,當(dāng)你把他打開以后,他就會(huì)每秒動(dòng)一下,+1,+1,+1,+1,如果你設(shè)置了某一個(gè)時(shí)間點(diǎn)鬧鐘會(huì)向以后,那么當(dāng)鬧鐘的時(shí)間點(diǎn)+1,+1,+1,+到了你設(shè)置的時(shí)間的就會(huì)進(jìn)入中斷,也就是鬧鐘響了。
????????程序及其注釋:
????????void Timer0Init(void)???????????? //1毫秒@24.000MHz
????????{
?????? ????????AUXR |= 0x80;???????? //定時(shí)器時(shí)鐘1T模式
?????? ????????TMOD &= 0xF0;???????????? //設(shè)置定時(shí)器模式
?????? ????????TL0 = 0x40;??????? //設(shè)置定時(shí)初始值
?????? ????????TH0 = 0xA2;???????????? //設(shè)置定時(shí)初始值
?????? ????????TF0 = 0;????????????? //清除TF0標(biāo)志
?????? ????????ET0=1;
?????? ????????TR0 = 1;???????????? //定時(shí)器0開始計(jì)時(shí)
????????}
????????配置好定時(shí)器,并且設(shè)置了定時(shí)器要做什么事,接下把他放進(jìn)main函數(shù)里面:
????????void main()
????????{
?????? ????????Timer2Init();
?????? ????????Timer0Init();
?????? ????????EA=1;
????????4.2 中斷程序:
????????其作用是中斷此線程(此線程不一定是當(dāng)前線程),但實(shí)際上只是給線程設(shè)置一個(gè)中斷標(biāo)志,線程仍會(huì)繼續(xù)運(yùn)行。
????????程序示例:
????????void Timer0 ()interrupt 1
????????{
?????? ????????Keyboard_out();
?????? ????????Buzzer_out();
?????? ????????LED_flash();
????????}
????????4.3 蜂鳴器頭文件程序:
????????蜂鳴器程序的無符號(hào)數(shù)據(jù)類型有做每分鐘的節(jié)拍數(shù)節(jié)拍延時(shí)計(jì)數(shù)、音樂計(jì)數(shù)等;變量時(shí)會(huì)發(fā)生字節(jié)截?cái)嗟恼蛿?shù)據(jù)有單個(gè)節(jié)拍的時(shí)間、音高序號(hào)、音樂開始標(biāo)志位等。
????????程序示例:
????????typedef struct
????????{
?????? ????????unsigned char flag;
?????? ????????unsigned char divisions;//divisions值暫且不明
?????? ????????unsigned int BeatNumber;//每分鐘的節(jié)拍數(shù)
?????? ????????unsigned char BeatTime;//單個(gè)節(jié)拍的時(shí)間
?????? ????????unsigned char PitchNumber;//音高序號(hào)
?????? ????????unsigned char Start_flag; //音樂開始標(biāo)志位
?????? ????????unsigned int BeatCount;//節(jié)拍延時(shí)計(jì)數(shù)
?????? ????????unsigned int MusicCount;// 音樂計(jì)數(shù)
?????? ????????unsigned char *Music;
?????? ????????unsigned char Music_num; //樂曲序號(hào)
????????}BuzzerTypedef;
????????extern BuzzerTypedef Buzzer;
????????void Buzzer_out();
????????void Buzzer_start(unsigned char Music[]);
????????void Buzzer_stop();
????????void Timer2Init(void);??????????? //毫秒@24.000MHz
????????void Switch_music(unsigned Music_num);
????????void Switch_music_Init();
????????#endif
????????關(guān)于divisions值這個(gè)代表一個(gè)基本節(jié)拍時(shí)間,也就是10ms。拿生成的節(jié)拍數(shù)/基本節(jié)拍時(shí)間,就可以知道這個(gè)音符需要保持的時(shí)長。
????????4.4 音樂節(jié)奏頭文件程序:
????????添加音樂對(duì)應(yīng)的單片機(jī)代碼,程序里邊的數(shù)字為每分鐘節(jié)拍數(shù)、數(shù)組結(jié)尾放入0表示結(jié)束。中間的值按順序每兩個(gè)表示一個(gè)音高和維持的時(shí)間(需要通過換算求出實(shí)際時(shí)間)。
????? 程序示例(生日快樂歌):
????????code unsigned char happy_birthday_to_you[]={
????????2,96,
????????8,6,2,8,6,2,5,4,2,
????????5,4,1,6,4,2,5,4,2,
????????1,5,2,7,4,4,5,4,1,
????????5,4,1,6,4,2,5,4,2,
????????2,5,2,1,5,4,5,4,1,
????????5,4,1,5,5,2,3,5,2,
????????1,5,2,7,4,2,6,4,2,
????????4,5,1,4,5,1,3,5,2,
????????1,5,2,2,5,2,1,5,6,
????????0
????????};
????????5、總結(jié)收獲
????????經(jīng)過對(duì)這一段時(shí)間對(duì)單片機(jī)控制技術(shù)作業(yè)項(xiàng)目的研究與制作,我不僅收獲到了STC89C51系列單片機(jī)的一些基礎(chǔ)知識(shí),以及它的控制原理,在這次作業(yè)當(dāng)中,經(jīng)過不斷的調(diào)試之后,我決定選用其他的 芯片,也就換成了STC15F2K60S2芯片,而在這個(gè)過程當(dāng)中,也懂得了新芯片的連接方式,以及包括USB的基本連接和知識(shí)。
????????硬件方面采用的是STC89C51單片機(jī),經(jīng)過Proteus 8.11仿真軟件設(shè)計(jì)和實(shí)際電路焊接后,調(diào)試發(fā)現(xiàn)效果不佳,詢問專業(yè)的同學(xué)和查閱資料所知,若要實(shí)現(xiàn)更好的功能應(yīng)當(dāng)采用更好的單片機(jī)系統(tǒng),在后期就換選了STC15F2K60S2單片機(jī),而這種單片機(jī)與之前的STC89C51單片機(jī)有以下區(qū)別(通過芯片說明手冊對(duì)比):
????????a)??? 兩者都是直流供電電壓單片機(jī),STC89C51電壓為4.5V-5.5V,而STC15F2K60S2為3.8V-5.5V,而且其Flash程序存儲(chǔ)器是60K;
????????b)??? STC15F2K60S2不需要外部晶振和外部復(fù)位的單片機(jī);大容量2K字節(jié)SRAM;雙串口;高速10位8通道A/D轉(zhuǎn)換器T0-T2 三個(gè)定時(shí)器:EEPROM;CCP/PCA/PWM;SPI功能;
????????c)??? STC15F2K60S2有先進(jìn)的指令集結(jié)構(gòu),也可以兼容原先的普通8051指令集,也有硬件乘法/除法指令。
????????總體而言,可以理解成STC15F2K60S2芯片就是增強(qiáng)版的STC89C51芯片。
????????而程序方面其實(shí)是參考了相對(duì)多的資料,在整個(gè)過程中是比較煎熬的,因?yàn)閾Q過很多程序,也出過很多BUG,搬運(yùn)過不少資料,也借鑒了很多CSDN上面的資料,也翻閱了很多芯片的說明書,在硬件選型上面也是換過幾個(gè)題材,最開始的是有流水燈,然后簡易音樂盒到現(xiàn)在的小型USB接口的音樂盒。文章來源地址http://www.zghlxwxcb.cn/news/detail-462659.html
到了這里,關(guān)于【單片機(jī)】電子音樂播放器的設(shè)計(jì)與制作(說明書)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!