未使用到用定時器、PWM,也能實現播放歌曲.....
STM32蜂鳴器模擬播放歌曲--《世間美好與你環環相扣》《生日歌》
- /**********************************************************************
- *函數名:BEEP_Init
- *功 能:蜂鳴器初始化
- *參 數:無
- *返 回:無
- *備 注:
- 引腳 點蜂鳴器電平 模式 速度
- PC3 高電平 通用推挽輸出 50M
- **********************************************************************/
- void BEEP_Init(void)
- {
-
- #if 1
- RCC->APB2ENR |= 1<<4;//開啟PC口時鐘
- GPIOC->CRL &=~(0XF<<4*3);//清PC3
- GPIOC->CRL |=(0X3<<4*3);//通用推挽輸出 50M
- GPIOC->ODR &=~(3<<1);//關蜂鳴器
- #else
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能C端口時鐘
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //通用推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
- GPIO_Init(GPIOC, &GPIO_InitStructure);//PC3
- GPIO_ResetBits(GPIOC,GPIO_Pin_3);//關蜂鳴器
- #endif
- }
- //控制發聲
- void Sound(u16 frq)
- {
- u32 time;
- if(frq != 1000)//休止符
- {
- time = 500000/((u32)frq);
- BEEP = 1;
- delay_us(time);
- BEEP = 0;
- delay_us(time);
- }else
- delay_us(1000);
- }
- //生日歌
- void play_Music_1(void)
- {
- //音譜 低1 2 3 4 5 6 7 中1 2 3 4 5 6 7 高1 2 3 4 5 6 7 不發音
- uc16 tone[] = {262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,1319,1397,1568,1760,1967,1000};//音頻數據表
- //編號 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
-
- //音譜
- u8 music[]={4,4,5,4,
- 7,6,21,
- 4,4,5,4,
- 8,7,21,
- 4,4,11,9,
- 7,6,5,21,
- 3,3,9,7,
- 8,7,21,
- };
- //節拍
- u8 time[] = {2,2,4,4, //時間--2代表半拍(100ms) 4代表一拍(200ms) 8代表兩拍(400ms)
- 4,4,4,
- 2,2,4,4,
- 4,4,4,
- 2,2,4,4,
- 4,4,4,4,
- 2,2,4,4,
- 4,4,4,
- };
- u32 delayShow;
- u16 i,j;
- delayShow = 10;//控制播放快慢
- for(i=0;i<sizeof(music)/sizeof(music[0]);i++)//放歌
- {
- for(j=0;j<((u16)time[i])*tone[music[i]]/delayShow;j++)
- {
- Sound((u32)tone[music[i]]);
- }
- }
- }
- //世間美好與你環環相扣
- void play_Music_2(void)
- {
- // 低1 2 3 4 5 6 7 中1 2 3 4 5 6 7 高1 2 3 4 5 6 7 不發音
- uc16 tone[] = {262,294,330,349,392,440,494,523,587,659,698,784,880,988,1047,1175,1319,1397,1568,1760,1967,1000};//音頻數據表
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- //音調
- u8 music[]={11,11,11,10,9,9,8,8,7,8,
- 9,9,11,11,9,8,8,9,9,
- 7,7,7,7,7,9,9,9,8,8,8,7,8,
- 9,9,9,11,8,21,
- 11,11,11,11,10,9,8,7,8,
- 9,9,11,11,9,8,8,7,7,
- 7,7,7,7,7,9,9,9,8,8,8,7,8,
- 9,11,11,21,21,9,
- 8,21,21,4,5,4,
- 9,9,12,9,10,9,9,7,8,9,8,8,7,7,
- 7,7,9,7,8,7,7,5,6,7,6,6,
- 9,9,9,4,5,4,
- 9,9,9,9,11,9,9,7,8,9,8,8,7,7,
- 7,7,9,9,9,7,5,6,6,7,6,6,
- 5,7,8,8,7,7,8,8,9,8,
- 7,7,7,21,21
- };
- //節拍
- u8 time[] = {2,2,2,1,1,2,2,2,1,1, //時間--2代表半拍(100ms) 4代表一拍(200ms) 8代表兩拍(400ms)
- 1,2,1,2,1,1,2,2,4,
- 1,1,1,1,2,1,1,2,2,1,1,1,1,
- 3,1,2,2,4,4,
- 1,2,1,2,1,1,6,1,1,
- 1,2,1,2,1,1,2,2,4,
- 1,1,1,1,2,1,1,2,2,1,1,1,1,
- 2,2,4,4,2,2,
- 4,4,2,2,2,2,
- 1,1,1,1,1,1,1,1,1,2,1,2,1,1,
- 1,1,1,1,1,1,1,1,2,1,1,4,
- 3,1,6,2,2,2,
- 1,1,1,1,1,1,1,1,2,1,1,2,1,1,
- 1,1,1,1,1,1,1,1,2,1,1,4,
- 2,1,1,2,2,2,1,1,2,2,
- 2,2,4,4,4,
- };
- u32 delayShow;
- u16 i,j;
- delayShow = 7;//播放速度
- for(i=0;i<sizeof(music)/sizeof(music[0]);i++)//放歌
- {
- for(j=0;j<((u16)time[i])*tone[music[i]]/delayShow;j++)
- {
- Sound((u32)tone[music[i]]);
- }
- }
- }
復制代碼
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|