可编程乐曲演奏器程序设计.doc

约9页DOC格式手机打开展开

可编程乐曲演奏器程序设计,基于at89c51音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。通过控制声音频率和发声时间长短即可完成一般的音乐演奏。在实验中,通...
编号:10-267916大小:491.00K
分类: 专有技术/秘方

内容介绍

此文档由会员 会飞的猪 发布

基于AT89C51 音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。
通过控制声音频率和发声时间长短即可完成一般的音乐演奏。在实验中,通过控制输出方波的频率可得到不同的声音频率。人耳可分辨的声音频率在17Hz—10Hz之间。实际上,利用单片机内部定时器,计数初值不同,即可得到不同的输出方波频率。由于MCS-51单片机的计算能力较弱,对应不同音频的计数值可事先计算好,通过查表取得。
不同声音的发声时间长短依乐曲而定,该值通常为0.1~1S。
通过控制定显示器的定时时间产生不同频率的方波,驱动喇叭发出不同音阶的声音,现利用延时不控制发音时间的长短,即可控制节拍,把乐谱中的音符和相应的节拍变换成定常和延时常数,作为数据表格存在存贮器中。自程序查表得到定时常数和延迟常数,分别用以控制定时器产生方波的频率和发出该频率方波的持续时间。当延时时间到,再查下一个音符的定时常数和延时常数。依次进行下去。
音符的节拍我们可以用定时器T0来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应关系下表。
但时,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不同节拍。我们可以用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表2中也给出了各种节拍所对应的时间常数。例如对1/4拍音符,定时时间为0.16秒,相应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,相应时间长数为192(即C0H)。我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。
此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。
为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。