通過修改輸出的pwm波的頻率來達到不同的音頻
單片機源程序如下:
- #include "stm32f10x.h"
- #include "led.h"
- #include "delay.h"
- #include "sys.h"
- #include "timer.h"
- #define proport 10000 //Tclk/(psc+1)=72000000/(7199+1)
- #define L1 ((proport/131)-1)//低調 do 的周期根據Tout= ((arr+1)*(psc+1))/Tclk推出arr值就是本句define定義的值,Tout為音調頻率131Hz的倒數,Tclk=72MHz
- #define L2 ((proport/147)-1)//低調 re 的周期
- #define L3 ((proport/165)-1)//低調 mi 的周期
- #define L4 ((proport/176)-1)//低調 fa 的周期
- #define L5 ((proport/196)-1)//低調 sol的周期
- #define L6 ((proport/220)-1)//低調 la 的周期
- #define L7 ((proport/247)-1)//低調 si 的周期
- #define M1 ((proport/262)-1)//中調 do 的周期
- #define M2 ((proport/296)-1)//中調 re 的周期
- #define M3 ((proport/330)-1)//中調 mi 的周期
- #define M4 ((proport/349)-1)//中調 fa 的周期
- #define M5 ((proport/392)-1)//中調 sol的周期
- #define M6 ((proport/440)-1)//中調 la 的周期
- #define M7 ((proport/494)-1)//中調 si 的周期
- #define H1 ((proport/523)-1)//高調 do 的周期
- #define H2 ((proport/587)-1)//高調 re 的周期
- #define H3 ((proport/659)-1)//高調 mi 的周期
- #define H4 ((proport/699)-1)//高調 fa 的周期
- #define H5 ((proport/784)-1)//高調 sol的周期
- #define H6 ((proport/880)-1)//高調 la 的周期
- #define H7 ((proport/988)-1)//高調 si 的周期
- int music[]=
- {
- M5,50,M5,25,M5,25,
- M6,100,M5,100,H1,100,
- M7,100,M7,100,M5,50,M5,25,M5,25,
- M6,100,M5,100,H2,100,
- H1,100,H1,100,M5,50,M5,25,M5,25,
- H5,100,H3,100,H1,100,
- M7,100,M6,100,H4,50,H4,25,H4,25,
- H3,100,H1,100,H2,100,H1,100,H1,100
- };//生日快樂歌C調簡譜C語言表示方法(M5,50)為(音調,音長)100表示為一個音長(節拍),50位半個音長(節拍),25位四分之一音長(節拍)
- int length = sizeof(music)/sizeof(music[0]);//計算數組長度
- int main()
- {
- int i=0;
-
- delay_init();//延時初始化
- //led_init();
- while(100)
- {
- for(i=0; i<(length/2); i++)//取數組數據
- {
- Timer4_Init(music[2*i]);//PWM波周期
- delay_ms(5*music[2*i+1]);//音長的時間都乘以5即一拍為500微秒,此值"5"可調整,只是播放的整個快慢而已,有點類似于視頻快進和后退
- }
- }
- }
復制代碼
所有資料51hei提供下載:
蜂鳴器譜曲生日快樂.rar
(2.57 MB, 下載次數: 414)
2018-11-30 15:20 上傳
點擊文件名下載附件
|