日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STC-B学习板蜂鸣器播放音乐

發布時間:2024/3/26 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STC-B学习板蜂鸣器播放音乐 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

功能:單片機燒錄好程序后,按key1按鍵播放《IF YOU》,再次按key1可暫停播放,按key2可切換歌曲到《國際歌》,再按key3可切換歌曲到《孤勇者》

芯片:STC15F2K61S2

完整工程文件和hex文件在這
提取碼:1111

前言:相信大家焊好板子后最喜歡玩的就是蜂鳴器播放音樂,路過每個教室基本都是各種雜音,畢竟這玩意真挺好玩的,于是我就根據老師的代碼和譜子寫了播放其他歌曲的文件(國際歌是我直接拿往屆學長的音樂代碼,來湊個數的),說實話這玩意看起來挺簡單的,實際上挺難的,還得學一遍樂理知識,然后對著各種拍子和音調不斷調試才能得到一個比較理想的狀態,但是if you和孤勇者這兩首曲子總感覺有些地方不是很完美,但對于擺爛人來說能聽就行了。反正也是娛樂娛樂

廢話不多說,代碼如下:(譜子在最后)

/********************** 文件名稱:beep.c 說明:進行音樂播放的例程,按下key1鍵后開始播放音樂 修改記錄: ***********************//********************** 基于STC15F2K60S2系列單片機C語言編程實現 使用如下頭文件,不用另外再包含"REG51.H" ***********************/ #include <STC15F2K60S2.h> #define uint unsigned int #define uchar unsigned char sbit beep=P3^4; //蜂鳴器 sbit key1=P3^2; //按鍵1 sbit key2=P3^3; //按鍵2 uchar timeh,timel,jindu=0,gequ=0; //定義定時器的重裝值 bit flag; //播放標志位 uchar code music1[] = //音樂代碼,歌曲為《IF YOU》,格式為: 音符, 節拍, 音符, 節拍, {0x26,0x10,0x25,0x10,0x23,0x10,0x21,0x10,0x22,0x10,0x23,0x10,0x16,0x20,0x22,0x08,0x21,0x08,0x22,0x08,0x21,0x08,0x22,0x08,0x21,0x08,0x22,0x10,0x21,0x08,0x22,0x08,0x22,0x08,0x21,0x08,0x23,0x20,0x26,0x10,0x25,0x10,0x23,0x10,0x21,0x10,0x22,0x10,0x23,0x10,0x16,0x20,0x16,0x08,0x17,0x10,0x21,0x08,0x21,0x08,0x16,0x08,0x21,0x08,0x16,0x08,0x21,0x08,0x22,0x08,0x23,0x08,0x22,0x08,0x22,0x10,0x21,0x08,0x21,0x08,0x21,0x10,0x15,0x08,0x21,0x20,0x31,0x10,0x31,0x08,0x31,0x08,0x27,0x08,0x26,0x08,0x21,0x10,0x32,0x10,0x33,0x10,0x36,0x10,0x35,0x10,0x33,0x10,0x32,0x10,0x31,0x10,0x32,0x30,0x32,0x08,0x31,0x08,0x32,0x08,0x23,0x08,0x32,0x10,0x25,0x24,0x25,0x08,0x32,0x08,0x31,0x08,0x32,0x08,0x33,0x24,0x31,0x08,0x31,0x10,0x32,0x10,0x33,0x10,0x36,0x10,0x35,0x10,0x33,0x10,0x32,0x10,0x31,0x08,0x31,0x08,0x32,0x10,0x31,0x30,0x26,0x08,0x26,0x08,0x31,0x08,0x26,0x08,0x31,0x08,0x31,0x24,0x31,0x08,0x31,0x08,0x32,0x08,0x31,0x08,0x31,0x08,0x31,0x24,0x00,0x10,}; uchar code music2[] = //歌曲為國際歌 {0x25, 0x10, 0x31, 0x18, 0x27, 0x08, 0x32, 0x08, 0x31, 0x08, 0x25, 0x08, 0x23, 0x08, 0x26, 0x18, 0x26, 0x08, 0x24, 0x10, 0x20, 0x08,0x26, 0x08, 0x32, 0x18, 0x31, 0x08, 0x27, 0x08, 0x26, 0x08, 0x25, 0x08, 0x24, 0x08, 0x23, 0x30,0x25, 0x10, 0x31, 0x18, 0x27, 0x08, 0x32, 0x08, 0x31, 0x08, 0x25, 0x08, 0x23, 0x08, 0x26, 0x20, 0x24, 0x08,0x26, 0x08, 0x32, 0x08, 0x31, 0x08, 0x27, 0x10, 0x32, 0x10, 0x34, 0x10, 0x27, 0x10, 0x31, 0x20, 0x31, 0x08, 0x30, 0x08,0x33, 0x08, 0x32, 0x08, 0x27, 0x20, 0x26, 0x08, 0x27, 0x08, 0x31, 0x08, 0x26, 0x08, 0x27, 0x20, 0x25, 0x08,0x25, 0x08, 0x24, 0x08, 0x25, 0x08, 0x26, 0x18, 0x26, 0x08, 0x32, 0x18, 0x31, 0x08, 0x27, 0x20, 0x27, 0x08, 0x20, 0x08,0x32, 0x10, 0x32, 0x18, 0x27, 0x08, 0x25, 0x08, 0x25, 0x08, 0x24, 0x08, 0x25, 0x08, 0x33, 0x20, 0x31, 0x08,0x26, 0x08, 0x27, 0x08, 0x31, 0x08, 0x27, 0x10, 0x32, 0x10, 0x31, 0x10, 0x26, 0x10, 0x25, 0x20, 0x25, 0x08, 0x20, 0x08,0x33, 0x08, 0x32, 0x08, 0x31, 0x20, 0x25, 0x18, 0x23, 0x08, 0x26, 0x20, 0x24, 0x08, 0x20, 0x08,0x32, 0x0c, 0x31, 0x04, 0x27, 0x20, 0x26, 0x10, 0x25, 0x10, 0x25, 0x20, 0x25, 0x08, 0x20, 0x08,0x25, 0x10, 0x33, 0x20, 0x32, 0x10, 0x25, 0x10, 0x31, 0x20, 0x27, 0x18,0x27, 0x08, 0x26, 0x18, 0x25, 0x08, 0x26, 0x10, 0x32, 0x10, 0x32, 0x20, 0x32, 0x08, 0x30, 0x08,0x33, 0x0c, 0x32, 0x04, 0x31, 0x20, 0x25, 0x18, 0x23, 0x08, 0x26, 0x20, 0x24, 0x08, 0x20, 0x08,0x32, 0x0c, 0x31, 0x04, 0x27, 0x20, 0x26, 0x10, 0x25, 0x10, 0x33, 0x30,0x33, 0x10, 0x35, 0x20, 0x34, 0x10, 0x33, 0x10, 0x32, 0x18, 0x33, 0x08, 0x34, 0x10, 0x30, 0x08,0x34, 0x08, 0x33, 0x18, 0x33, 0x08, 0x32, 0x18, 0x32, 0x08, 0x31, 0x30,0x00, 0x00 }; uchar code music3[] = //歌曲為孤勇者 {0x16,0x08,0x17,0x08,0x21,0x08,0x22,0x08,0x17,0x08,0x21,0x08,0x21,0x10,0x21,0x08,0x17,0x08,0x21,0x08,0x22,0x08,0x17,0x08,0x21,0x08,0x21,0x10,0x21,0x08,0x22,0x08,0x23,0x08,0x22,0x08,0x23,0x08,0x22,0x08,0x23,0x10,0x23,0x08,0x22,0x08,0x23,0x10,0x25,0x10,0x23,0x10,0x16,0x08,0x17,0x08,0x21,0x08,0x22,0x08,0x17,0x08,0x21,0x08,0x21,0x10,0x21,0x08,0x17,0x08,0x21,0x08,0x22,0x08,0x17,0x08,0x21,0x08,0x21,0x10,0x21,0x08,0x22,0x08,0x23,0x08,0x22,0x08,0x23,0x08,0x22,0x08,0x23,0x10,0x23,0x08,0x22,0x08,0x23,0x10,0x25,0x10,0x23,0x10,0x25,0x10,0x23,0x14,0x25,0x08,0x23,0x14,0x25,0x08,0x23,0x08,0x25,0x08,0x26,0x08,0x23,0x08,0x25,0x10,0x25,0x08,0x23,0x14,0x25,0x08,0x23,0x14,0x25,0x08,0x23,0x08,0x25,0x08,0x26,0x08,0x23,0x08,0x25,0x10,0x25,0x08,0x25,0x08,0x23,0x08,0x22,0x08,0x22,0x10,0x22,0x10,0x21,0x08,0x23,0x08,0x23,0x08,0x22,0x08,0x22,0x10,0x22,0x10,0x21,0x08,0x21,0x08,0x16,0x20,0x25,0x08,0x25,0x08,0x23,0x08,0x22,0x08,0x22,0x10,0x22,0x10,0x21,0x08,0x23,0x08,0x23,0x08,0x22,0x08,0x22,0x10,0x22,0x10,0x21,0x08,0x21,0x08,0x16,0x20,0x00 }; uchar code quzi[] = //此數組數據為各個音符在定時器中的重裝值,第一列是高位,第二列是低位 //時間 {0xf8,0x8c, //低八度,低10xf9,0x5b,0xfa,0x15, //低30xfa,0x67,0xfb,0x04, //低50xfb,0x90,0xfc,0x0c, //低70xfc,0x44, //中央C調0xfc,0xac, //中20xfd,0x09,0xfd,0x34, //中40xfd,0x82,0xfd,0xc8, //中60xfe,0x06,0xfe,0x22, //高八度,高10xfe,0x56,0xfe,0x6e, //高30xfe,0x9a,0xfe,0xc1, //高50xfe,0xe4,0xff,0x03 //高7 }; /********************** 函數名稱:void delay(unsigned int xms) 功能描述:延時 入口參數:xms:輸入需要延時的毫秒值 出口參數:無 備注:***********************/ void delay(unsigned int xms) {uint i,j;for(i=xms; i>0; i--)for(j=124; j>0; j--); } /********************** 函數名稱:uchar quyin(uchar tem) 功能描述:在quzi數組中,找到music數組定義的簡譜音符的重裝值,并返回其在quzi數組中的位置 入口參數:tem:music數組中定義的簡譜音符 出口參數:返回的是tem音符在quzi數組中的位置值 備注:***********************/ uchar quyin(uchar tem) {uchar qudiao,jp,weizhi; //定義曲調,音符和位置qudiao=tem/16; //高4位是曲調值jp=tem%16; //低4位是音符if(qudiao==1) //當曲調值為1時,即是低八度,低八度在quzi數組中基址為0qudiao=0;else if(qudiao==2) //當曲調值為2時,即是中八度,中八度在quzi數組中基址為14qudiao=14;else if(qudiao==3) //當曲調值為3時,即是高八度,高八度在quzi數組中,基址為28qudiao=28;weizhi=qudiao+(jp-1)*2; //通過基址加上音符作為偏移量,即可定位此音符在quzi數組中的位置return weizhi; //返回這一個位置值 } /********************** 函數名稱:void playmusic() 功能描述:播放音樂 入口參數:無 出口參數:無 備注:***********************/ void playmusic() {uchar p,m,tem; //m為節拍while(1){if(flag==1) //若播放的標志位為1則播放音樂{if(gequ==0) //歌曲選擇位為0,則播放同一首歌{p=music1[jindu];if(p==0x00) //如果碰到結束符,延時1秒,回到開始再來一遍{jindu=0;delay(1000);break;}else if(p==0xff) //若碰到休止符,延時100ms,繼續取下一音符{jindu=jindu+1;delay(100);TR0=0;break;}else //正常情況下取音符和節拍{tem=quyin(music1[jindu]); //取出當前音符在quzi數組中的位置值timeh=quzi[tem]; //把音符相應的計時器重裝載值賦予timeh和timeltimel=quzi[tem+1];jindu++;TH0=timeh; //把timeh和timel賦予計時器TL0=timel;m=music1[jindu]; //取得節拍jindu++;}TR0=1; //開定時器1delay(m*180); //等待節拍完成, 通過P3^4口輸出音頻TR0=0; //關定時器1beep=0; //使beep端口置0,起保護蜂鳴器作用}else if(gequ==1) //歌曲選擇位為1,則播放小毛驢{p=music2[jindu];if(p==0x00) //如果碰到結束符,延時1秒,回到開始再來一遍{jindu=0;delay(1000);break;}else if(p==0xff) //若碰到休止符,延時100ms,繼續取下一音符{jindu=jindu+1;delay(100);TR0=0;break;}else //正常情況下取音符和節拍{tem=quyin(music2[jindu]); //取出當前音符在quzi數組中的位置值timeh=quzi[tem]; //把音符相應的計時器重裝載值賦予timeh和timeltimel=quzi[tem+1];jindu++;TH0=timeh; //把timeh和timel賦予計時器TL0=timel;m=music2[jindu]; //取得節拍jindu++;}TR0=1; //開定時器1delay(m*300); //等待節拍完成, 通過P3^4口輸出音頻TR0=0; //關定時器1beep=0; //使beep端口置0,起保護蜂鳴器作用}else if(gequ==2) //歌曲選擇位為2,則播放天空之城{p=music3[jindu];if(p==0x00) //如果碰到結束符,延時1秒,回到開始再來一遍{jindu=0;delay(1000);break;}else if(p==0xff) //若碰到休止符,延時100ms,繼續取下一音符{jindu=jindu+1;delay(100);TR0=0;break;}else //正常情況下取音符和節拍{tem=quyin(music3[jindu]); //取出當前音符在quzi數組中的位置值timeh=quzi[tem]; //把音符相應的計時器重裝載值賦予timeh和timeltimel=quzi[tem+1];jindu++;TH0=timeh; //把timeh和timel賦予計時器TL0=timel;m=music3[jindu]; //取得節拍jindu++;}TR0=1; //開定時器1delay(m*200); //等待節拍完成, 通過P3^4口輸出音頻TR0=0; //關定時器1beep=0; //使beep端口置0,起保護蜂鳴器作用}}else //播放標志位不為1時,暫停播放音樂while(flag!=1);} } /********************** 函數名稱:void init_sys() 功能描述:系統初始化,功能是配置IO口 入口參數:無 出口參數:無 備注:***********************/ void init_sys() {P0M0=0xff; //設置推挽模式P0M1=0x00;P2M0=0x08;P2M1=0x00;P3M0=0x10;P3M1=0x00;P4M0=0x00;P4M1=0x00;P5M0=0x00;P5M1=0x00; } /********************** 函數名稱:void init() 功能描述:定時器和外部中斷的初始化 入口參數:無 出口參數:無 備注:***********************/ void init() {TMOD=0x01; //設置定時器0,定時方式1,16位手動重裝模式TH0=0xD8; //設置定時初值TL0=0xEF;IE=0x87; // 1000 0111 EA=1,EX0=1,ET0=1,EX1=0;IP=0x02; // 0000 0010 PT0=1; 定時器0優先級高TR0=0; //定時器0開始運行beep=0; //使beep端口置0,起保護蜂鳴器作用 } void main() {init_sys(); //系統初始化init();P0=0x00;key1=1; //兩個按鍵設為輸入狀態,檢測中斷key2=1;flag=0; //播放標志位清零while(1){playmusic(); //播放音樂函數} } /********************** 函數名稱:void tim1() interrupt 1 功能描述:定時器0中斷處理,重新裝值,并把beep值取反,產生方波 入口參數:無 出口參數:無 備注:***********************/ void tim1() interrupt 1 //計時器控制頻率 {TH0=timeh; //賦初值TL0=timel;beep=~beep; //中斷使得beep翻轉產生方波 } /********************** 函數名稱:void ex1() interrupt 0 功能描述:按下按鍵1的外部中斷,對標志位取反,功能是暫停和播放音樂 入口參數:無 出口參數:無 備注:***********************/ void ex1() interrupt 0 {delay(5);if(key1==0) //判斷key1是否按下{delay(5);if(key1==0){while(!key1);flag=~flag; //播放中斷位取反,播放或者暫停}} } /********************** 函數名稱:void ex2() interrupt 2 功能描述:按下按鍵2的外部中斷,作用為切換歌曲 入口參數:無 出口參數:無 備注:***********************/ void ex2() interrupt 2 {delay(5);if(key2==0) //按鍵key2按下,切換歌曲{jindu=0; //歌曲的進度清零,從頭開始演唱gequ++; //下一曲if(gequ==3) //到達最后一首調到第一首gequ=0;} }


總結

以上是生活随笔為你收集整理的STC-B学习板蜂鸣器播放音乐的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91在线无精精品入口 | 日本特黄特黄刺激大片 | 亚洲免费成人网 | 亚洲超碰在线 | 综合色婷婷一区二区亚洲欧美国产 | 欧美激情校园春色 | 国产又粗又猛又爽又黄91 | 天天想你在线观看完整版电影高清 | 香蕉久久夜色精品升级完成 | 色欲亚洲Av无码精品天堂 | 日韩精品播放 | 日韩脚交footjobhd | 免费看一级视频 | 成人国产 | 91麻豆精品国产91久久久久久 | 99国产精品人妻噜啊噜 | 理论片在线观看理伦片 | av网站一区二区 | 久久久久久欧美 | 性色国产成人久久久精品 | 竹菊影视一区二区三区 | a天堂中文在线 | 色先锋av资源 | 国产美女特级嫩嫩嫩bbb | 捆绑调教在线观看 | 成人人伦一区二区三区 | 欧美不卡一区二区三区 | 欧美专区 日韩专区 | 丰满人妻熟妇乱偷人无码 | www黄色片| 国产a级片免费看 | 国产精品久久久久久免费观看 | 色婷婷av一区二区三区之红樱桃 | 肉嫁高柳家 高清 | 伊人一区二区三区 | 国产偷亚洲偷欧美偷精品 | 国产免费无码一区二区视频 | 免费的a级片 | 亚洲自拍偷拍视频 | 女人高潮特级毛片 | 亚洲第一av网站 | 男人插女人的网站 | 97黄色片 | 激情图片网站 | 亚洲欧美一区二区视频 | 中国免费观看的视频 | 国产成人99久久亚洲综合精品 | 日韩一区中文 | 熟妇人妻无乱码中文字幕真矢织江 | 依人综合网 | wwwxxxx在线观看 | 久久色在线观看 | 青青在线视频 | 欧美裸体xxxx极品少妇 | 影音先锋中文字幕在线 | 大地资源二中文在线影视观看 | 亚洲性图一区二区三区 | 亚洲高清在线视频 | 免费观看黄色网 | 日干夜干| 潘金莲三级野外 | 久久特级毛片 | 精品无码一区二区三区蜜臀 | 精品人妻人伦一区二区有限公司 | 日韩大尺度视频 | 国产一区二区视频在线观看免费 | 久久精品国产亚洲a | 日韩黄色一级片 | 久久无吗视频 | 亚洲九九九| 国产免费一区二区三区在线观看 | 18成人在线观看 | 日韩三级视频在线观看 | 香蕉av一区 | 日韩在线视频在线 | 日韩美女视频在线观看 | 日韩青青草 | 天堂资源中文 | av中文天堂 | 国产一在线观看 | 黑人操日本女优 | 中文字幕一区二区三区在线不卡 | 在线sese| 久久午夜夜伦鲁鲁片无码免费 | 亚洲视频2 | 美女自卫网站 | 大胸喷奶水www视频妖精网站 | 成人性生活毛片 | 丁香花国语版普通话 | 少妇无套内谢久久久久 | 九九国产精品视频 | 美日韩一区二区三区 | 亚洲小说区图片区 | 奇米色777| 日本精品三级 | 国产黄色大片在线观看 | www.伊人.com| 欧美一级少妇 | 欧美一区二区三区成人久久片 |