1、 目录 目录 1 一、设计任务(要求) 2 二、总体方案 . 2 三、原理框图 . 3 四、系统模块详细设计与调试 . 4 (一)键盘扫描模块 . 4 (二)数码管显示模块 . 4 (三)音调编码读取模块 4 (四)定时器中断模块 . 4 五、设计总结 . 5 六、参考文献 . 6 七、附件材料 . 6 一、设计任务(要求) 利用 51 系列单片机、按键、扬声器等器件,设计一个电子琴。 具体功能要求如下: 设计键盘电路,使其具有数字键 1、2、3、4、5、6、7、8、9 作为电子琴按 键,演示键 DEMO,其中 17 号键按下后即发出相应的音调。8 号键按下后依 次发出“1、2、3、4、5、6
2、、7” 音调,9 号键按下后依次发出“7、6、5、4、3、 2、1” 音调,按下 DEMO 键,自动演示一首歌曲,用单片机某一接口发出音频 脉冲,驱动扬声器发音。 利用定时器定时,可以发出不同频率的脉冲,不同频率的脉冲经扬声器驱动电 路放大滤波后,就会发出不同的音调.定时器按设置的定时参数产生中断,一次中 断发出脉冲低电平,下一次反转发出脉冲高电平.由于定时参数不同,就发出了不 同频率的脉冲.按键一次,发 50 个脉冲.发完后继续检测键盘,如果键还按下,继 续发音,发脉冲个数的多少可以决定节拍的长短。 二、总体方案 按照设计任务(要求) ,电子琴的主要涉及以下几个模块: 1、定时器控制不同频率
3、发音; 2、矩阵键盘的扫描; 3、除此以外,我还在本次设计中加入了数码管显示,分别显示当前弹奏的 音符。于是又多了数码管显示模块; 实现方案实现方案: 通过不断地键盘进行扫描。 当有按键按下时, 执行该按键对应的程序, 包括: 发出相应的音符或音乐、数码管显示当前音符。当按键松开,将音符停止发出, 如果是音乐,将进行演奏。 其中,不同的音符,采用定时器中断,从而发出不同的音符。即改变不同的 定时器初始值。 对于音乐的音符,采用自编的特殊编码,以便程序的调用。本程序的设计采 用了三位数编码,即:利用三位数表示一个音符。第一位由 1-7 组成,表示音符 1-7;第二位由 1-4 组成,表示音阶的低
4、、中、高和超高;第三位由 1-9 组成,表 示该音阶的拍数,计算方式是 1/2 拍数字。 例如:6,2,2表示一拍中音 6;4,3,1表示半拍高音 4。 关于对音符编码的调用,设一个音的编码为 ,a b c 则,调用的频率参数为 7ba ,该参数用于修改定时器初始值;调用的时间参数为c,该参数用于修 改定时器执行时间。 三、原理框图 开始 各模块初始化 键盘扫描 否 按键 1-8 判别按键 按键 9-13 按键 14-16 显示对应音符 显示音乐编号 播放音乐 (5 个) 是否键盘按下 读取当前第一个音符 否 结束标志 调用定时器中断,发出不同频率音调 弹奏单音节 (8 个) 无动作 是 读取
5、下一个音符 读取下一音符 是 四、系统模块详细设计与调试 (一)键盘扫描模块 1、矩阵键盘工作原理 矩阵键盘的按键设在行、列线的交点上。行线通过上拉电阻接到+5V 电 源上。无键盘按下时,行线出于高电平状态;当有按键按下时,行线电平状 态将由此按键相连接的列线的电平决定。 2、设计思路 通过扫描法识别键盘。即,先将某一列线置为低电平,其余各列线置为 高电平,检查各行线电平的变化,如果某行线电平的为低电平,就可以确立 此行此列交叉点处的按键被按下。 (二)数码管显示模块 1、硬件电路 数码管的显示, 是通过74LS374锁存器来实现的。 段选和位选分别是P3.5 和 P3.4。数据的输出为 P0
6、 口。(详见附录一:硬件原理图) 2、设计思路 通过分别控制段选、 位选锁存器的导通 (低电平) 、 锁存信号 (高电平) 。 从而分时给数码管写入数据并锁存。 (三)音调编码读取模块 1、编码规则 本程序的设计采用了三位数编码,即:利用三位数表示一个音符。第一 位由 1-7 组成,表示音符 1-7;第二位由 1-4 组成,表示音阶的低、中、高和 超高;第三位由 1-9 组成,表示该音阶的拍数,计算方式是 1/2 拍数字。 例如:6,2,2表示一拍中音 6;4,3,1表示半拍高音 4。 2、读取方式 首先读取前两位数,以确定音调。然后读取最后一位,以确定拍数(时 间)。然后依次递增 3 位。 音调确定后,通过查表获取定时器初始值,并调用定时器中断。拍数, 即定时器中断执行的循环次数,以此来控制声音的时间。 (四)定时器中断模块 1、定时器的调用 本程序的设计采用定时器中断的方法来使蜂鸣器发出不同的频率声音, 从而实现电子琴的音调。定时器的初始值不同,产生的频率也就不同。 定时器的调用是循环不断的,它的循环包括两类:一类是一个音节频率 的循环,从而控制