音频有两种输出方式:Speech Mode和Tone Mode。它们的区别在于输出的控制机理不同,前者是用与声音数据采样率相同的速率将声音数据通过数/模转换通道还原成音频电压或电流输出,可用于还原语音、音乐等各种声音;后者则通过控制声波振动的频率来决定发出的声音音调的高低,通常用于发出音乐。
本例利用SPMC65定时器的PWM输出功能实现Tone Mode音乐播放,通过输出不同的频率给扬声器,可以发出Do、Re、Mi、Fa、So、La、Ti 7个音符。
1 功能规格
采用SPMC65P2404A芯片.外接普通的小喇叭(8Ω,0.5W)播放音乐《茉莉花》,用一个按键来控制音乐的播放和停止。
2 硬件设计
音乐播放的硬件原理图如下,PA7连接一个按键,用于控制音乐播放和停止;PWM波形从PB3发出,由三极管驱动扬声器发出音乐,如图10.23所示。
3 软件设计
本例采用Timerl的12 bit PwM方式输出,占空比50%,实现音频调频。音符和声音频率对照如表l0.3所列。
根据各音符对应的频率,可以计算出PwMl计数器的重装值,当需要发出某个音符时,只需把相应的计数器重装值赋给PWM1计数器即可。以高音La为例,重装值的计算方法是:
高音La的频率是1 480 Hz,Timerl的计数频率为Fcpu/128,因此Timerl的计数次数应为Fcpu/128/1 480。当Fcpu为8 MHz时,计数次数为42(2Ah)。所以PWM1计数器的重装值为1000h一2Ah=FD6h。
音符的节拍是通过控制PWM波形的持续实现的。音符节拍和持续时间对照表如表10.4所列。
乐曲是由特定节拍的音符组合而成,为便于播放乐曲,对乐谱格式做出如下定义:
在程序中,将十六分音符的持续时间300 ms作为一个时基,计为1,那么600 ms可以表示为2,依此类推。音调分为高音、中音、低音,将其计为2、l、0。曲谱中每个音符用两个字节来描述,第一个字节是音调,范围从1~7;第二个字节的低4位表示该音符的持续时间,高4位表示该音符属于高音、中音还是低音。曲谱的最后用0表示结束符。下面是乐曲“茉莉花”的曲谱表。
音乐播放程序的主循环时间为4 ms。利用Timer base定时,采用查询方式检测4 ms的到来。主程序流程如图10.24所示。
音乐播放子程序流程如图10.25所示。
音乐播放子流程的部分代码如下:
发表评论 评论 (1 个评论)