51单片机电子琴实现原理与代码解析

需积分: 12 4 下载量 157 浏览量 更新于2024-09-21 收藏 36KB DOC 举报
"这是一个关于使用单片机51MCU制作电子琴的课程设计,涉及到音乐播放的编程实现。代码文件名为SoundPlay.h,由作者Jiang Jian Jun在2005年创建。" 该课程设计的核心是实现一个单片机控制的电子琴,通过编程在51系列单片机上播放音乐。程序主要分为以下几个关键知识点: 1. 曲谱存储格式:曲谱以`unsigned char code`类型存储,包含音高和音长信息。每个音符由三个数字组成,分别代表音符(1-7),音区(1-低音,2-中音,3-高音)和是否升半音(0-不升,1-升)。音长也由三部分组成,包括时值、演奏效果和符点位。 2. 音高与音长计算:音高由个位、十位和百位决定,音长则根据个位数值计算,对应2的n次方的音符长度。十位和百位分别表示演奏效果和符点。 3. 调用播放子程序:子程序`Play`接受四个参数,即乐曲名(音符序列指针)、调号(升/降半音数量)、升降八度(1-降,2-不变,3-升)和演奏速度。乐曲名以0,0作为结束标志。 4. 频率表与音符转换:程序定义了原始频率表`FreTab`,用于根据音高计算实际频率。调号和升降八度的处理使得可以演奏不同调性的音乐。 5. 定时器配置:使用定时器0和定时器1进行音符和音长的控制。定时器0用于音符发生中断,定时器1设置为10ms的初值,以控制音符间隔。 6. 中断服务函数:`BeepTimer0`中断服务函数用于切换音频输出,实现音符的高低电平交替,从而产生声音。 7. 初始化函数:`InitialSound`函数负责设置输出管脚、定时器初值以及中断使能,为音乐播放做好准备。 8. 音乐播放函数:`Play`函数遍历输入的音符序列,根据音高、音长和演奏效果计算定时器初值,然后启动定时器进行播放。连音、顿音和符点等效果在此处处理。 通过这个课程设计,学习者将了解如何利用单片机编程实现音乐播放,并掌握定时器、中断、存储结构和音符处理等基础知识。此外,还将涉及到音乐理论,如音高、音长、调性和演奏效果的数字化表示。