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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

单片机 89c52rc C语言设计 蜂鸣器变频 实现音乐播放

發布時間:2023/12/29 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机 89c52rc C语言设计 蜂鸣器变频 实现音乐播放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單片機 89c52rc C語言設計 蜂鳴器變頻

最近在制作一個單片機音樂播放器,遂查詢網上的實例,但發現都不是特別全面。所以在自研了一段時間后的出實例,發表此文用以記錄,以防忘記。諸位也可拿去參見。若有不足,請諒解。

1.首先了解聲音是一種波,聲波。波有周期和頻率,其關系為:
f(頻率)=1/t(周期)

2.其次在多數電子設備設備中也存在著(機器)周期和(時鐘)頻率,89c52rc 的默認頻率為11.0592MHz ,一個默認的計算周期為12T。

3.所以得出結論:
T(聲)=f(時鐘)/12t

依靠每一次計算的時差,累加得到音頻周期,啟動一次蜂鳴器。
制作出如下流程圖。

#include "reg52.h" #define Fosc 110592L //時鐘頻率typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;sbit P23=P2^3;//連接蜂鳴器陽極的針腳void buzzer(u8 f,u8 time_ms);void main(void) {buzzer(1,10); }void buzzer(u8 f,u8 time_ms) {u16 time = (Fosc / 2400)*time_ms;u16 C = 110592/(72*f),x=0;for(;time>=0;time--){if(x>=C){P23=0;x=0;}else{x++;P23=1;}} }

參照以下
音符頻率對照表

翻譯樂譜

BPM為184拍,每60/184=0.326秒一拍。

得出以下程序

buzzer(784,163);buzzer(698,163);buzzer(440,326);buzzer(494,326);buzzer(659,163);buzzer(578,163);buzzer(349,326);buzzer(392,326);buzzer(578,163);buzzer(523,163);buzzer(330,326);buzzer(392,326);buzzer(523,978);

倉庫地址

總結

以上是生活随笔為你收集整理的单片机 89c52rc C语言设计 蜂鸣器变频 实现音乐播放的全部內容,希望文章能夠幫你解決所遇到的問題。

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