STM8 开发故事--之蜂鸣器 BEEP设计简单的音乐(三)
虽然我也不识音律。但是不妨碍我欣赏音乐。
要让单片机和蜂鸣器发出音乐必须知道音调和节拍的概念。
音调就是声音的频率,节拍就是这个频率保持的时间。通过对音调和节拍的不同组合就会发出音乐,至于是否悦耳动听则另当别论。
频率可以通过TIM1_TimeBaseInit(2,TIM1_CounterMode_Up,240,0); 函数来设置。
节拍可以写一个delay程序来实现。如果在main里面用delay来实现时间控制,会占用大量CPU资源。一般的做法是创建一个时间中断。我一般会创建一个60hz的时间中断。在时间中断里面处理如按键读取及防抖,音乐播放等功能,其他可以后台处理的程序。我以前在51上用时间中断实现了多任务同时工作的效果。别人用3颗51才能完成的功能我1颗就实现了。
在stm8项目里我用timer2启动时间中断服务程序。先设置tmi2
//tim2 发起中断 中断服务程序在 INTERRUPT_HANDLER(TIM2_UPD_OVF_TRG_BRK_USART2_TX_IRQHandler, 19)
void TIM2_Config(void)
{
TIM2_DeInit();
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
TIM2_TimeBaseInit(TIM2_Prescaler_16, TIM2_CounterMode_Up, 1014);
TIM2_SetCounter(500);
TIM2_ITConfig(TIM2_IT_Update, ENABLE);
TIM2_ARRPreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);