基于Proteus的单片机演奏系统的设计
时间:10-10
来源:互联网
点击:
因为一首曲子不止一个音符,我们不可能对每一个音符的音阶都去"手工"的提供时间常数,为了实现的简化,我们编制一个将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成的表格,在程序里用查表指令依次查出每一个音符的频率和对应节拍时间,产生音符并控制节奏,就可以实现演奏效果。
此外,结束符和体止符可以分别用代码00H 和FFH 来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。
为了产生手弹的节奏感,在某些音符(例两个相同音符)音插入一个时间单位的频率略有不同的音符。
程序框图如下图4. 本程序演奏的是民歌"八月桂花遍地开",C 调,节奏为94 拍/min。
用Keil 对程序进行编译,见图5,具体方法可文献[5],编译无误后生成。hex 文件,然后双击Proteus环境下的原理图中的AT89C51,找到这个。 hex 文件,然后点按钮Play,这时单片机控制的蜂鸣器就可以开始播放音乐了。
图4 程序流程图
图5 在Keil 环境下对程序进行编译
3 结论
以上介绍的方法已通过测试,运行良好。 对初学单片机者有一定的启示作用。 读者也可以自行找出一首歌,将乐曲翻译成码表输入单片机,而程序不变。 本实验方法简便,即使不懂音乐的人,也可方便地将一首陌生的曲子翻译成代码。
- 基于PROTEUS技术的ARM7显示系统设计与仿真实现(11-22)
- 单片机虚拟试验箱设计与研究(03-08)
- 基于PROTEUS软件的数字电压表印刷电路板设计(05-01)
- 基于51单片机的数字电压表仿真设计(05-29)
- Proteus在单片机教学和科技制作中的应用与实践(03-02)
- Proteus软件仿真与Keil的单片机系统设计(09-08)