豆皮 - STM32开发板基础教程(五) - 豆皮会唱歌 (原创)


豆皮 - STM32开发板基础教程(五) - 我的豆皮会唱歌 (原创)


版权所有 STMFANS 原创,转载请保留出处

http://www.stmfans.com/bbs/viewthread.php?tid=1102&page=1&extra=page%3D1




呵呵 不是播放MP3啦(顺便说一下 豆皮播放MP3 bozai已经做出来了哦 呵呵 )
是利用豆皮STM32开发板上的蜂鸣器播放不同音符 不同的pwm频率加到蜂鸣器上能产生不一样的音符
呵呵 原理到是简单 但是 蜂鸣器真的不好调 音符也不好确定 我花了好长的时间 才确定的频率   把实验室的人都吵疯了 一个个都对我有意见啊 因为我在不停的用蜂鸣器发出“鬼叫的声音”  娃哈哈哈 基本上可以用了
还将就听着  呵呵 附上一个音符表 大家也可以自己去尝试别的频率 呵呵

本教程的主角是:STM32   PWM   蜂鸣器  




各音的频率  大家可以参考着修改频率 这样就可以发出悦耳的声音了 呵呵

Image00000.jpg
2008-10-27 20:11




初始化pwm输出 豆皮借的是TIM4的channnel4  呵呵
/*******************************************************************************
* Function Name  : Change_for_Note
* Description    : 修改pwm频率
* Input          : u16类型的频率值
* Output         : None
* Return         : None
*******************************************************************************/
void Change_for_Note(u16 NoteSet)
{
  
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  
  /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = NoteSet;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  
  /* PWM1 Mode configuration: Channel4 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = NoteSet/2;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;
  TIM_OC4Init(TIM4, &TIM_OCInitStructure);
}  





/* 取得音高和节拍 奏一个音符 */
void Sing_A_Note(int music,int mytime)
{

   int i;
   Change_for_Note(music);
   for(i=0;i<mytime;i++)
     Delay_Ms(50);
   //nosound();
}




  呵呵 这个频率是我算了半天 算出来的 应该还算准的 呵呵 用在蜂鸣器上 娃哈哈哈

/* 定义节拍 */
#define _HALF 5
#define HALF 10
#define THREE_HALF 15
#define ONE 20
#define ONE_HALF 30
#define TWO 40
#define TWO_HALF 50

/* 定义音高 */
#define low_1 55042     
#define low_2 49037     
#define low_3 43687     
#define low_4 41235     
#define low_5 36735     
#define low_6 32728     
#define low_7 29157
#define mid_1 27520     
#define mid_2 24519     
#define mid_3 21843     
#define mid_4 20617     
#define mid_5 18368     
#define mid_6 16364     
#define mid_7 14579
#define high_1 13761   
#define high_2 12259   
#define high_3 10922   
#define high_4 10309   
#define high_5 9184   
#define high_6 8182   
#define high_7 7246



呵呵 歌曲音符和节拍数组 这个数组是我读大二的时候 写的一个PC机程序上面的 当时写的程序是调用主板BIOS的sound()函数 用电脑主板上的小喇叭播放歌曲 呵呵 附件里我也贴上来了 大家可以下载了在电脑上听 MIDI的声音哦 呵呵


// 播放一个歌曲
void Sing_A_Song(void)
{
  /*  数组里数据为音高和节拍 累啊 */
u16 my_music[]={
low_5,HALF,mid_2,HALF,mid_1,HALF,mid_1,HALF,mid_3,ONE_HALF,/**/
low_5,HALF,mid_1,HALF,low_7,HALF,mid_1,HALF,mid_3,ONE_HALF,
mid_3,ONE,/**/mid_1,_HALF,low_7,_HALF,low_6,HALF,mid_1,HALF,
mid_1,HALF,low_6,_HALF,mid_4,_HALF,mid_4,HALF,mid_3,HALF,mid_3,ONE_HALF,
mid_1,_HALF,mid_5,HALF,mid_4,HALF,mid_3,_HALF,mid_2,_HALF,
mid_2,ONE_HALF,/**/mid_6,_HALF,mid_3,HALF,low_6,HALF,low_6,HALF,
low_5,HALF,low_6,HALF,mid_3,ONE,mid_1,_HALF,low_7,_HALF,
mid_1,HALF,low_7,HALF,mid_1,HALF,mid_5,ONE,mid_1,HALF,mid_1,HALF,
mid_1,_HALF,mid_1,_HALF,mid_5,HALF,mid_6,_HALF,mid_5,_HALF,
mid_5,HALF,mid_1,HALF,mid_5,HALF,mid_4,ONE,mid_3,_HALF,
mid_1,_HALF,mid_1,_HALF,low_5,_HALF,low_5,HALF,low_5,ONE,/**/
mid_1,HALF,mid_5,HALF,mid_6,HALF,mid_6,HALF,mid_1,HALF,
mid_3,ONE,low_5,HALF,low_6,HALF,mid_1,HALF,mid_2,_HALF,
mid_1,_HALF,mid_1,_HALF,mid_3,_HALF,mid_3,TWO,/**/mid_3,ONE_HALF,
mid_1,_HALF,high_1,HALF,mid_7,_HALF,mid_7,_HALF,mid_7,HALF,
mid_6,HALF,mid_6,_HALF,mid_7,_HALF,mid_6,HALF,mid_3,_HALF,
mid_2,_HALF,mid_1,HALF,mid_2,HALF,mid_2,HALF,mid_1,_HALF,
mid_5,_HALF,mid_5,HALF,mid_2,ONE,/**/mid_3,_HALF,mid_2,_HALF,
mid_3,HALF,mid_6,HALF,mid_6,_HALF,high_1,_HALF,mid_6,HALF,
mid_6,ONE_HALF,/**/mid_5,HALF,mid_6,HALF,mid_5,HALF,mid_5,HALF,
mid_5,_HALF,mid_3,_HALF,mid_2,_HALF,mid_1,THREE_HALF,mid_1,HALF,
low_6,_HALF,mid_1,_HALF,mid_2,HALF,mid_3,_HALF,low_6,_HALF,
low_6,HALF,low_6,_HALF,mid_1,_HALF,mid_2,ONE_HALF,low_5,_HALF,
low_5,_HALF,mid_5,_HALF,mid_6,_HALF,mid_5,HALF,mid_5,HALF,
mid_6,HALF,mid_2,HALF,mid_2,ONE_HALF,/*repare*/mid_3,_HALF,mid_5,_HALF,
mid_5,HALF,mid_3,_HALF,mid_3,_HALF,mid_3,HALF,mid_2,HALF,
mid_1,_HALF,mid_2,_HALF,mid_1,HALF,mid_3,_HALF,mid_6,_HALF,
mid_6,HALF,mid_3,HALF,mid_5,ONE_HALF,mid_3,HALF,mid_6,HALF,
mid_7,_HALF,mid_6,_HALF,mid_6,THREE_HALF,mid_3,_HALF,mid_6,HALF,
mid_7,HALF,mid_6,HALF,mid_6,HALF,mid_3,HALF,mid_2,HALF,mid_1,HALF,
low_6,HALF,mid_2,HALF,mid_2,ONE,mid_2,_HALF,mid_3,_HALF,low_6,HALF,
mid_1,_HALF,low_6,_HALF,mid_1,HALF,mid_1,_HALF,low_6,_HALF,
mid_2,HALF,mid_3,ONE,mid_1,_HALF,low_7,_HALF,mid_1,HALF,mid_5,HALF,
mid_5,HALF,mid_6,_HALF,mid_2,_HALF,mid_2,HALF,mid_3,HALF,mid_3,HALF,
mid_1,_HALF,low_7,_HALF,low_6,HALF,mid_2,HALF,mid_2,HALF,mid_2,_HALF,
mid_1,_HALF,mid_2,_HALF,mid_3,HALF,mid_2,_HALF,mid_2,HALF,
mid_1,HALF,mid_1,HALF,mid_2,ONE_HALF,mid_2,TWO,/**/mid_3,_HALF,mid_5,_HALF,
mid_5,HALF,mid_3,_HALF,mid_3,_HALF,mid_3,HALF,mid_2,HALF,
mid_1,_HALF,mid_2,_HALF,mid_1,HALF,mid_3,_HALF,mid_6,_HALF,
mid_6,HALF,mid_3,HALF,mid_5,ONE_HALF,mid_3,HALF,mid_6,HALF,
mid_7,_HALF,mid_6,_HALF,mid_6,THREE_HALF,mid_3,_HALF,mid_6,HALF,
mid_7,HALF,mid_6,HALF,mid_6,HALF,mid_3,HALF,mid_2,HALF,mid_1,HALF,
low_6,HALF,mid_2,HALF,mid_2,ONE,mid_2,_HALF,mid_3,_HALF,low_6,HALF,
mid_1,_HALF,low_6,_HALF,mid_1,HALF,mid_1,_HALF,low_6,_HALF,
mid_2,HALF,mid_3,ONE,mid_1,_HALF,low_7,_HALF,mid_5,HALF,
mid_5,HALF,mid_5,HALF,mid_6,_HALF,mid_2,_HALF,mid_2,HALF,
mid_1,HALF,low_6,_HALF,mid_3,_HALF,mid_2,ONE_HALF,mid_2,_HALF,
mid_1,_HALF,mid_2,_HALF,mid_3,_HALF,mid_2,HALF,mid_2,HALF,
mid_1,_HALF,mid_2,_HALF,mid_1,HALF,mid_1,ONE_HALF,mid_1,ONE,1
};

    u16 i=0;
   
    while( my_music != 1 )  
    {
       Sing_A_Note(my_music,my_music[i+1]);
       i=i+2;
    }
}




感觉在电脑上听的效果要好很多 不知道是不是蜂鸣器的质量问题还是我的频率没有选好 呵呵 先这样咯 有时间再来折腾




完整工程在附件里

敬请继续关注 豆皮的的教程会逐步推出


电脑主板唱《烛光》.rar (19.07 KB)

阅读权限: 20

利用电脑主板上的小喇叭唱歌

WORM_PWM.rar (289.99 KB)

阅读权限: 20

利用豆皮开发板上的蜂鸣器唱歌

1

评分人数

  • lvhaian

我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

好文章,顶。

TOP

很不错,写的也很详细,相当好

喔,想起当年,第一次发表文章的时候,写的就是发声程序

TOP

这个有意思,试一试

TOP

支持一下,很详细

TOP

支持一下,写的很详细

TOP

正愁怎么唱哥的

好东东顶
http://shop35738797.taobao.com/

TOP

太好了,收下

太好了,收下太好了,收下 太好了,收下
http://shop35738797.taobao.com/

TOP

支持一下,很详细

TOP

TOP

小虫子辛苦了

TOP

虫子,把你工程下载进去了。

太难听了,蜂鸣器这东西实在不适合放音乐。

哈哈。

不过这个东西放放《生日歌》应该不错。

小时候的音乐卡片应该就是这个原理阿。

TOP

原帖由 lvhaian 于 2008-11-20 17:17 发表
虫子,把你工程下载进去了。

太难听了,蜂鸣器这东西实在不适合放音乐。

哈哈。

不过这个东西放放《生日歌》应该不错。

小时候的音乐卡片应该就是这个原理阿。 ...



额 我调试的时候更痛苦呢 这个已经是调的比较靠谱的发音了
晕菜 电脑主板唱《烛光》  还将就能听  呵呵
我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

TOP

这个有意思,试一试

TOP

呵呵,有意思

TOP

回帖支持一下!

TOP

下载不了附件了

TOP

辛苦了,我一定好好学习,哈哈

TOP

这是一个很有创意的话题,可以发掘发掘。

TOP

听听唱的如何!

TOP

看看 哈哈!

TOP

感谢您的努力

TOP

没IAR520的?

TOP

原帖由 __atmega32__ 于 2008-12-29 22:21 发表
没IAR520的?



呵呵 这个例程还没移植过去 不好意思了
__atmega32__ 高手 应该一下子就能解决的啦 呵呵

过几天还是抽时间把它移过去吧 呵呵
我有一個夢想 擁有一大片土地 做個小地主 每天帶著一群狗奴才去調戲良家婦女....

TOP

520的呢?

TOP

很有意思!呵呵!学习了!

TOP

豆皮板上的应该是有源蜂鸣器,难道有源的也能唱歌

TOP

好资料谢谢

TOP

想挣点积分,多支持点

TOP

TOP

Review opelc.org on alexa.com