1、1 基于 AT89S52 的乐曲编辑发生器的设计 日期: 2007-6-11 来源:国外电子元器件 作者:欧伟明 周韬 字体: 大 中 小 1 引言 基于 RTX51 的乐曲编辑发生器以 AT89S52 单片机为控制核心,操作者可以通过 44 矩阵键盘输入约定格式的任意乐曲,按 “播放 ”键后,系统便开始播放所编辑的乐曲,并且音调和节拍都可以由单片机精确控制。为了降低成本,在最小硬件设计的基础上,系统的功能尽可能用软件来实现,系统软件是在面向 MCS-51 系列单片机的嵌入式实时多任务操作系统 RTX51Tiny 平台上,用 C51 高级语言和 MCS-51 汇编语言混合编程而开发的。 2 系
2、统硬件设计 为了今后能够在线升级用户应用程序,采用带 ISP 接口的单片机 AT89S52 为核心构成乐曲编辑发生器。 AT89S52 具有快速 8051 内核、 8 KB FlashE2PROM、 256 B IDATA RAM,完全符合运行 RTX51Tiny 的硬件要求。笔者已研制了 AT89S51 52 的目标程序 PC 机下载软件,无需编程器即可完成单片机应用系统的开发。 为了设计编辑任意乐曲的人机界面,采用 44 矩阵键盘作为系统的输入设备,采用点阵式液晶显示模块 TC1602A 作为系统的输出设备。为了存储和读出任意乐曲,采用带 I2C 串行接口的 E2PROM 存储器 AT24
3、C02。为了放大单片机 AT89S52 产生的乐曲声音,采用了功率放大器 LM386。系统硬件电路原理图如图 1 所示。 2 3 乐曲编辑和播放的软件实现 3.1 单片机产生音频矩形脉冲的方法 利用单片机的内部定时器 T1 并使其工作在定时器工作方式 1(16 bit 定时 ),改变 T1 的计数初值,就可以在单片机的 I O 引脚端产生不同频率的音频矩形脉冲。 例如,音频矩形脉冲信号的频率为 523 Hz,则其周期 T=1 523=1912s,因此,只要让计数器定时 1912s2=956s,当定时 956s 到的时候,将 AT89S52 的乐曲输出引脚 P3.7 反相,就可得到中音 DO(5
4、23 Hz)。 3 单片机定时器计数初值 T 与单片机内部机器周期信号频率 Fi 和音频矩形脉冲信号频率 Fr 的关系如下。 为了叙述方便,不妨把定时器计数初值 T 称为简谱码。 3.2 乐曲的音调表示方法 单片机播放乐曲的过程,主要是用单片机来识别所编辑的乐曲并播放出来。单片机需要识别乐曲中的音调和音长 (音长亦称为节拍 ),本设计用字母 A Z 来代表乐曲的各个音调。数字 0 作为音调的结束标志,如表 1 所示。 4 3.3 乐曲编辑的软件实现方法 在系统软件设计时,已 将按键处理作为一个任务即 “按键处理任务 ”,它的主要功能是编辑乐曲。 “按键处理任务 ”的执行需要 “键盘扫描任务 ”
5、向它发送信号来触发执行。 “按键处理任务 ”的 C51 源程序如下。 5 6 3.4 乐曲播放的软件实现方法 在设计 “播放任务 ”程序时,利用 AT89S52 内部的定时器 T1 定时溢出中断来产生音调的频率,并利用 RTX51 操作系统的 os_wait2(K_TMO,ticks)函数来产生音长。 “播放任务 ”的 C7 51 源程序 如下: 8 9 10 3.5 系统软件流程 根据对系统功能的分析,把系统软件分解为 5 个任务,具体如下: 任务 0:系统初始化任务,包括 TC1602A 的初始化、定时器 T1 的初始化、中断初始化。在启动任务 1任务 4 后,自动删除任务 0,使得任务
6、0 只在系统上电复位时执行一次。 任务 1:键盘扫描任务。每隔 50 ms 执行 1 次,扫描所得的键值存于全局变量 keycode,然后向 “按键处理任务 ”发信号。 任务 2:按键处理任务。等待信号,根据键值 keycode 完成相应处理,实现的功能包括乐曲的编辑、乐曲的保存和读取等。 任务 3:播放任务。等待信号,按照音调和音长播放乐曲。 任务 4:显示刷新任务。 根据光标指针变量的值在液晶屏上显示乐曲数据 (音调和音长 )。 系统软件流程图如图 2 所示。 4 结束语 本文给出了以单片机 AT89S52 为核心构成的任意乐曲编辑发生器,具有硬件电路简单、操作界面友好、使用方便的特点。该系统已投入运行,播放出来的乐曲效果良好,音调和节拍都由单片机控制得相当准确。