⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musicz.htm

📁 本单片机教程是平凡老师花了大量时间
💻 HTM
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft FrontPage 5.0">
<TITLE>单片机音乐程序的设计与实验</TITLE>
</HEAD>
<BODY background="../back.jpg">
<B><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="CENTER" style="line-height: 150%; margin-top: 0; margin-bottom: 0">单片机音乐程序的设计与实验</P>
</font></B><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="CENTER" style="line-height: 150%; margin-top: 0; margin-bottom: 0">周振安</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"> 利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发音实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
<OL>

<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2><LI>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0">单片机的基本发音实验</LI></p>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>
<p style="line-height: 150%; margin-top: 0; margin-bottom: 0"></P></OL>

<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>

<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。</P>
</FONT>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>例如,要产生</font><FONT SIZE=2>200HZ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的音频信号,按图</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>接入喇叭(若属临时实验,也可将喇叭直接接在</FONT><FONT SIZE=2>P1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>口线上),实验程序为:</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>&#9;其中子程序</font><FONT SIZE=2>DEL</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>为延时子程序,当</FONT><FONT SIZE=2>R3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>为</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>时,延时时间约为</FONT><FONT SIZE=2>20us</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,</FONT><FONT SIZE=2>R3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中存放延时常数,对</FONT><FONT SIZE=2>200HZ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>音频,其周期为</FONT><FONT SIZE=2>1/200</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>秒,即</FONT><FONT SIZE=2>5ms</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>。这样,当</FONT><FONT SIZE=2>P1.4</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的高电平或低电平的持续时间为</FONT><FONT SIZE=2>2.5ms</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,即</FONT><FONT SIZE=2>R3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的时间常数取</FONT><FONT SIZE=2>2500/20=125(7DH)</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>时,就能发出</FONT><FONT SIZE=2>200HZ</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的音调。将上述程序键入学习机,并不断修改</FONT><FONT SIZE=2>R3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的常数可以感到音调的变化。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>&#9;乐曲中,每一音符对应着确定的频率,表</font><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>给出</FONT><FONT SIZE=2>C</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>调时各音符频率及其相应的时间常数。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>读者可以根据表</font><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>所提供的常数,将其</FONT><FONT SIZE=2>16</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>进制代码送入</FONT><FONT SIZE=2>R3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,反复练习体会。根据表</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>可以奏出音符。仅这还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>音符的节拍我们可以用定时器</font><FONT SIZE=2>T0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>来控制,送入不同的初值,就可以产生不同的定时时间。便如某歌曲的节奏为每分钟</FONT><FONT SIZE=2>94</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>拍,即一拍为</FONT><FONT SIZE=2>0.64</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>秒。其它节拍与时间的对应关系见表</FONT><FONT SIZE=2>2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>但时,由于</font><FONT SIZE=2>T0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的最大定时时间只能为</FONT><FONT SIZE=2>131</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>毫秒,因此不可能直接用改变</FONT><FONT SIZE=2>T0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>的时间初值来实现不同节拍。我们可以用</FONT><FONT SIZE=2>T0</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>来产生</FONT><FONT SIZE=2>10</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表</FONT><FONT SIZE=2>2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>中也给出了各种节拍所对应的时间常数。例如对</FONT><FONT SIZE=2>1/4</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>拍音符,定时时间为</FONT><FONT SIZE=2>0.16</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>秒,相应的时间常数为</FONT><FONT SIZE=2>16</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>(即</FONT><FONT SIZE=2>10H</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>);对</FONT><FONT SIZE=2>3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>拍音符,定时时间为</FONT><FONT SIZE=2>1.92</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>秒,相应时间长数为</FONT><FONT SIZE=2>192</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>(即</FONT><FONT SIZE=2>C0H</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>)。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>此外,结束符和体止符可以分别用代码</font><FONT SIZE=2>00H</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>和</FONT><FONT SIZE=2>FFH</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>来表示,若查表结果为</FONT><FONT SIZE=2>00H</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,则表示曲子终了;若查表结果为</FONT><FONT SIZE=2>FFH</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>,则产生相应的停顿效果。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。</P>
</FONT>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>程序框图如图</font><FONT SIZE=2>2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>所示。</font></P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>下面给出程序序请单,可直接在</font><FONT SIZE=2>TD-III</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>型学习机上演奏,对其它不同型号的学习机,只需相应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,</FONT><FONT SIZE=2>C</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>调,节奏为</FONT><FONT SIZE=2>94</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>拍</FONT><FONT SIZE=2>/</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>分。读者也可以自行找出一首歌,按表</FONT><FONT SIZE=2>1</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>和表</FONT><FONT SIZE=2>2</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。</font></P>
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0">程序清单(略,请参看源程序的说明)。</P>
<P ALIGN="JUSTIFY" style="line-height: 150%; margin-top: 0; margin-bottom: 0"><IMG SRC="Image1.gif" WIDTH=532 HEIGHT=607></P>
</FONT>
<P ALIGN="RIGHT" style="line-height: 150%; margin-top: 0; margin-bottom: 0">
<FONT FACE="宋体" LANG="ZH-CN" SIZE=2>《无线电》</font><FONT SIZE=2>1992</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>年第</FONT><FONT SIZE=2>3</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=2>期。</font></P></BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -