单片机毕业设计 智能MP3音乐播放器设计与实现 - 物联网
生活随笔
收集整理的這篇文章主要介紹了
单片机毕业设计 智能MP3音乐播放器设计与实现 - 物联网
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 簡介
- 2 緒論
- 2.1 課題背景與目的
- 3 系統設計
- 3.1 系統架構
- 3.2 軟件部分設計
- 3.3 實現效果
- 3.4 部分相關代碼
- 4 最后
1 簡介
Hi,大家好,學長今天向大家介紹一個 單片機項目
大家可用于 課程設計 或 畢業設計
2 緒論
2.1 課題背景與目的
隨著科學技術的發展, 帶數字語音功能的數碼終端類產品在日常生活中得到了廣泛的使用, 這也促進了與該功能相關的數字音頻壓縮技術的發展, 在數字音頻壓縮技術中, MP3的設計與實現以其優異的性能得到了廣泛的使用 。 隨著數字編解碼及壓縮技術的發展, 語音文件也朝著高壓縮比、 高保真度的方向發展, 從 MP1、 MP2 到目前的 MP3 格式。
3 系統設計
3.1 系統架構
學長設計的音樂播放器, 有四個按鍵控制按鈕: 下一曲, 上一曲, 音量加, 音量減。通過對按鈕的控制來實現對單片機要求播放的音樂, 并通過放大電路和音頻設備輸出聲音。 同時通過 LCD 顯示屏來顯示所播放的曲目。 必要時可調節音量的大小。 硬件系統總體方框圖如圖所示。
3.2 軟件部分設計
主程序實現對單片機進行初始化后, 進入歌曲識別子程序。 確定歌曲曲目后, 顯示屏進行顯示。 然后子程序對音樂播放文件進行循環判斷, 得到按鍵的命令后再進行按鍵播放。
音樂播放的同時, 顯示屏顯示歌曲名, 單片機調用字節模式讀取 U 盤數據進行音樂播放。 在播放音樂的過程中, 子程序循環判斷音樂是否播放結束。 當音樂文件播放結束時, 判斷是否有按鍵按下, 并執行相應的命令。 系統流程圖如下圖所示。
3.3 實現效果
3.4 部分相關代碼
#include <reg52.h> //包括一個 52 標準內核的頭文件 #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long char code dx516[3] _at_ 0x003b;//這是為了仿真設置的 sbit SPK=P1^0; //喇叭輸出腳 sbit k0=P3^0; //第一首歌按鍵 sbit k1=P3^1; //第二首歌按鍵 sbit k2=P3^2; //第三首歌按鍵 sbit k3=P3^3; //停止播放按鍵 uchar th0_f; //在中斷中裝載的 T0 的值高 8 位 uchar tl0_f; //在中斷中裝載的 T0 的值低 8 位 //T0 的值,及輸出頻率對照表 uchar code freq[36*2]={0xA9,0xEF,//00220HZ ,1 //00x93,0xF0,//00233HZ ,1#0x73,0xF1,//00247HZ ,20x49,0xF2,//00262HZ ,2#0x07,0xF3,//00277HZ ,30xC8,0xF3,//00294HZ ,40x73,0xF4,//00311HZ ,4#0x1E,0xF5,//00330HZ ,50xB6,0xF5,//00349HZ ,5#0x4C,0xF6,//00370HZ ,60xD7,0xF6,//00392HZ ,6#0x5A,0xF7,//00415HZ ,70xD8,0xF7,//00440HZ 1 //120x4D,0xF8,//00466HZ 1# //130xBD,0xF8,//00494HZ 2 //140x24,0xF9,//00523HZ 2# //150x87,0xF9,//00554HZ 3 //160xE4,0xF9,//00587HZ 4 //170x3D,0xFA,//00622HZ 4# //180x90,0xFA,//00659HZ 5 //190xDE,0xFA,//00698HZ 5# //200x29,0xFB,//00740HZ 6 //210x6F,0xFB,//00784HZ 6# //220xB1,0xFB,//00831HZ 7 //230xEF,0xFB,//00880HZ `10x2A,0xFC,//00932HZ `1#0x62,0xFC,//00988HZ `20x95,0xFC,//01046HZ `2#0xC7,0xFC,//01109HZ `30xF6,0xFC,//01175HZ `40x22,0xFD,//01244HZ `4#0x4B,0xFD,//01318HZ `50x73,0xFD,//01397HZ `5#0x98,0xFD,//01480HZ `60xBB,0xFD,//01568HZ `6#0xDC,0xFD,//01661HZ `7 //35}; //定時中斷 0,用于產生唱歌頻率 timer0() interrupt 1 {TL0=tl0_f; TH0=th0_f; //調入預定時值SPK=~SPK; //取反音樂輸出 IO } //****************************** //音樂符號串解釋函數 //入口:要解釋的音樂符號串,輸出的音調串,輸出的時長串 changedata(uchar *song,uchar *diao,uchar *jie) {uchar i,i1,j;char gaodi; //高低+/-12 音階uchar banyin;//有沒有半個升音階uchar yinchang;//音長uchar code jie7[8]={0,12,14,16,17,19,21,23}; //C 調的 7 個值*diao=*song;for(i=0,i1=0;;){gaodi=0; //高低=0banyin=0;//半音=0 yinchang=4;//音長 1 拍if((*(song+i)=='|') || (*(song+i)==' ')) i++;//拍子間隔和一個空格過濾switch(*(song+i)){case ',': gaodi=-12;i++;//低音break;case '`': gaodi=12;i++; //高音break;} if(*(song+i)==0) //遇到 0 結束{ *(diao+i1)=0; //加入結束標志 0 *(jie+i1)=0;return;}j=*(song+i)-0x30; i++; //取出基準音j=jie7[j]+gaodi; //加上高低音yinc: switch(*(song+i)){case '#': //有半音 j 加一個音階 i++;j++; goto yinc;case '-': //有一個音節加長yinchang+=4;i++;goto yinc;case '_': //有一個音節縮短yinchang/=2;i++;goto yinc;case '.': //有一個加半拍yinchang=yinchang+yinchang/2;i++;goto yinc;}*(diao+i1)=j; //記錄音符*(jie+i1)=yinchang; //記錄音長i1++;} } //****************************************** //奏樂函數 //入口:要演奏的音樂符號串 void play(uchar *songdata) {uchar i,c,j=0,a=0;uint n;uchar xdata diaodata[112]; //音調緩沖uchar xdata jiedata[112]; //音長緩沖changedata(songdata,diaodata,jiedata); //解釋音樂符號串TR0=1;for(i=0;diaodata[i]!=0;i++) //逐個符號演奏{tl0_f=freq[diaodata[i]*2]; //取出對應的定時值送給 T0th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++) //按照音長延時{for(n=0;n<32000;n++);if((k0==0)||(k1==0)||(k2==0)||(k3==0)) //發現按鍵,立即退出播放{ TR0=0;return;}} TR0=0;for(n=0;n<500;n++); //音符間延時TR0=1;}TR0=0; } //仙劍 uchar code music1[]={ "|3_3_3_2_3-|2_3_2_2_,6,6_,7_|12_1_,7,6_,5_|,6---|" "3_3_3_2_3.6_|5_6_5_5_22_3_|45_4_32_1_|3.--3_|" "67_6_55_3_|5--3_5_|26_5_32_3_|3---|" "26_6_6-|16_6_66_7_|`17_6_76_7_|3.--3_|" "67_6_55_3_|5--3_5_|67_6_76_7_|3---|" "26_6_6-|16_6_66_7_|`17_6_7.5_|6---|" }; uchar code music2[]={ "5-5_3_2_1_|3---|6-6_4_2_1_" ",7--,5_|1.3_5.1_|,7.3_5 5_|" "6.7_`1.6_|6_5_5-3_2_|1.1_13_2_|" "1.1_12_3_|2.1_,62_3_|2-- ,5_|" "1.3_5.1_|,7.3_55_|6.7_`1.6_|" "6_5_5-3_2_|1.1_13_2_|1.1_12_3_" "2.,6_,71_2_|1--" }; //世上只有媽媽好 uchar code music3[]={ "6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|" "2.3_55_6_|321-|5.3_2_1_,6_1_|,5--" }; void delayms(uint ms) //延時子程序 {uchar i; while(ms--)for(i=0;i<123;i++); } //3 個按鍵選擇 3 首不同的音樂播放,一個鍵停止播放 void main(void) // 主程序 {TMOD=0x01; //選擇為中斷 T0 定時方式 1 EA=1; //cpu 開中斷ET0=1; //T0 開中斷 TR0=1; //啟動 T0while(1){if(k0==0) //第一個按鍵按下{delayms(10);if(k0==0) //按鍵去抖{P0=0x06; //數碼管顯示“1”P2=0x00; //顯示位置為第一個數碼管 play(music1); //播放第一首音樂}}if(k1==0) //第二個按鍵按下 {delayms(10);if(k1==0) //按鍵去抖{P0=0x5b; //數碼管顯示“2”P2=0x01; //顯示位置為第二個數碼管play(music2); //播放第二首音樂}}if(k2==0) //第三個按鍵按下{delayms(10);if(k2==0) //按鍵去抖{P0=0x4f; //數碼管顯示“3”P2=0x02; //顯示位置為第三個數碼管play(music3); //播放第三首音樂}}} }4 最后
總結
以上是生活随笔為你收集整理的单片机毕业设计 智能MP3音乐播放器设计与实现 - 物联网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java岗位面试题(南京才丰软件技术开发
- 下一篇: 新名字