搬一篇文章过来,2009年本人写在网易博客上的,现在网页博客已经关了,先挪过来,避免以后不在了。
关于程序的补充说明:
1、两个定时器的作用,及中断优先级的问题。
(1)定时器0——是一直输出方波,直到音乐结束;优先级最高;
(2)定时器1——控制输出方波的时间。当输出一个音符的时间到达规定长度时,改变定时器0的计数值,也就是改变方波频率,输出下一个音符;
2、系统的时钟频率
注意下系统的时钟频率;
/***********************************************************
文件名: MusicPlay.c
描 述:
单片机演奏音乐;
程序结构描述:
main()函数在初始化后即进入while(1);功能主要在两个中断中完成;
定时器0中断主要输出一定频率的方波,初始值在于FreqTab中获取;
定时器1中断完成音长的控制,在完成特定音符的音长后读取下一个
音符,并且更新定时器0的初始设置值;
补充音乐知识:
音乐主要由音频和音长;
换个角度,
要输出一首音乐即用一个IO口输出特定时间长度和频率的方波
|<------- 音长1(节拍) --------->| <---- 音长2(节拍)------>| ...
__ __ __ __ __ ___ ___ ___
|__| |__| |__| |__| |__| |___|