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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机利用蜂鸣器如何输出音乐

發(fā)布時(shí)間:2025/5/22 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机利用蜂鸣器如何输出音乐 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

采用音樂音譜節(jié)拍的方式

舉個(gè)栗子,單片機(jī)通過蜂鳴器來播放生日快樂歌。

#include "reg51.h" #define uchar unsigned char #define uint unsigned intsbit Beep=P1^5; /*要產(chǎn)生音頻脈沖,只要算出某一音頻的脈沖(1/頻率),然后將此周期除以2,即為半周 期的時(shí)間,利用定時(shí)器計(jì)時(shí)這個(gè)半周期的時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出脈沖的I/O 反相,然 后重復(fù)計(jì)時(shí)此半周期的時(shí)間再對(duì)I/O 反相,就可以在I/O 腳上得到此頻率的脈沖。 2)利用8051 的內(nèi)部定時(shí)器使其工作在計(jì)數(shù)器模式MODE1 下,改變計(jì)數(shù)值TH0 及TL0 以 產(chǎn)生不同頻率的方法如下: 例如,頻率為523Hz,其周期天/523 S=1912uS,因此只要令計(jì)數(shù)器計(jì)時(shí)956uS/1us=956, 在每計(jì)數(shù)956 次時(shí)就將I/O 反接,就可得到中音DO(532Hz)。 計(jì)數(shù)脈沖值與頻率的關(guān)系公式如下: N=Fi/2/Fr (N:計(jì)數(shù)值,Fi:內(nèi)部計(jì)時(shí)一次為1uS,故其頻率為1MHz,Fr:要產(chǎn)生的頻率) 三、其計(jì)數(shù)值的求法如下: T=65536-N=65536-Fi/2/Fr 計(jì)算舉例: 設(shè)K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz) 的計(jì)數(shù)值。 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*///生日快樂歌鬧鐘音譜 uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,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}; //uchar code SONG_TONE[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0}; //uchar code SONG_LONG[]={};void DelayMS(uint x) {uchar t;while(x--)for(t=0;t<120;t++); }void MusicPlay() {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() {Beep=0;while(1){MusicPlay();DelayMS(500);} }

其他簡(jiǎn)單的音樂大家也可以嘗試用這種簡(jiǎn)單粗暴的方法。
但是話說回來,其實(shí)買個(gè)音樂播放器,用SD卡存儲(chǔ)音樂播放更好。

總結(jié)

以上是生活随笔為你收集整理的单片机利用蜂鸣器如何输出音乐的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。