基于51单片机的电子琴设计毕业设计(编辑修改稿)内容摘要:

可能出现闪烁现象 图 7 数码管显示 电路 图 8 音频功放 电路 基于 51 单片机的电子琴设计 8 接元件少和谐波失真小等优点,广泛应用于录音机和收音机之中。 电位器 Rp 是用来调节声音的大小。 时钟 复位电路 时钟电路 时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。 常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。 AT89C51 内部有一个用于构成振荡器的高增益反相放大器,输入端为芯片引脚XTAL1,输出端为引脚 XTAL2。 这两个引脚跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,图 9 是 AT89S51 内部时钟方式的电路 , C1 和 C2 的典型值通常选择为30pF, 石英晶体常选 6MHz 或 12MHz 的。 本设计采用内部时钟方式做时钟电 路。 复位电路 单片机的初始化操作,给复位脚 RST 加上大于 2 个机器周期(即 24 个时钟振荡周期)的高电平就使 AT89C51 复位。 这些操作都是 由复位电路来实现。 在单片机的实用系统中,一般 有两种复位操作形式: 上电复位和手动复位。 上电复位在单片机系统每次通电时执行。 上电时,电容 C 充电加给 RST 引脚一个短的高电平信号,此信号随着 VCC 对电容 C 的充电过程而逐渐回落,即 RST 引脚上的高电平持续时间取决于电容 C 充电时间。 为保证系统可靠复位, RST 引脚上的高电平必须维持足够长的时间。 手动复位在系统出 现操作错误或程序运行出错时使用。 在单片机系统运行过程中,按下复位键,高电平输入 RST 引脚,单片机被强制执行复位操作,系统可以退出错误运行状态,恢复正常工作。 由于本设计的需要,同时采用这两种复位方式,图 10 复位 电路 图 9 时钟 电路 基于 51 单片机的电子琴设计 9 如图 10 所示复位电路。 电源电路 当今社会大到超级计算机、小到袖珍计算器,所有的电子设备都必须在电源电路的支持下才能正常工作。 直流稳压电源在 电源技术 中占有十分重要的地位。 直流电源电路由降压变压器、全波整流、滤波、稳压电路构成,其组成结构如图 11 所示。 根据设计需要做 +5V 和 +12V 直流稳压电源电路,其电路图如图 12 和 13 所示。 交流电压 iu 通过变压器 T1 降压得到 1iu ,然后由 V7~V10 四个整流二极管组成的电桥进行整流得到直流电压,再经由电解电容和非极性电容构成的滤波网络和三端稳压器 LM7812 和LM7805 的稳压作用后,分别输出 +12V和 +5V的直流电压。 理论计算如下: 对 A 点有:  ………( 51) 1U 的压降为 1 (1~ 2)uV ……… (52) 11 AoV u u……… (53) 由式 (51)、 (52)、 (53)可得:1 1 1 iiiouuu u u  ……… (54) 若要求将 220V交流电压转换成直流电压 1 12ouV ,由式 (54)可知: 变压器 T1 的变比为1 1 11 . 5 1 . 5 2 2 0 ( 2 3 ~ 2 6 ) : 1 ( 1 ~ 2 ) 1 2iiiouuu u u   。 图 11 直流电源电路组成结构图 变压器 整流电路 滤波电路 稳压电路 ~ 220V 50Hz 图 12 12V 转 5V 电源电路图 基于 51 单片机的电子琴设计 10 整体电路 基于单片机 AT89C51 的电子琴电路由琴键控制电路、数码管显示电路、音频功放电路、时钟 复位电路和电源电路五部分所构成。 琴键控制电路采用了 8 输入与门芯片 CD4068B,收集 8 个独立按键的开关状态信号,并触发单片机的外部中断来处理;而数码管显示电路负责显示按下的琴键所对应的键值;同时,音频功放电路也会播放琴键对应的音调;电源电路为整个电路提供能源。 整体电路图见附录 1。 六、电子琴系统软件设计 系统功能 的实现一般包括硬件部分和软件部分,一旦硬件确定下来,软件要实现的功能也随之确定。 而为使编程思路清晰,应先绘制程序流程图。 系统硬件接口定义 系统硬件接口定义如表 5 所示。 表 5 系统硬件接口定义 引脚号 引脚名 接口说明 备注 39~32 ~ 数码管与单片机通信口 1~8 ~ 独立按键接口 12 INT0 外部中断源输入端 10 控制蜂鸣器 主函数 主函数流程图如图 14 所示。 利用模块化的思想,主函数只执行初始化函数、音频处理函数 和数码管显示函数。 另外,键码的识别与刷新是通过中断函数来完成。 iu i1uo1uBA图 13 220V 转 12V 电源电路图 图 14 主函数流程图 开始 数码管显示 初始化 音频处理 基于 51 单片机的电子琴设计 11 void main( ) { Init( )。 while(1) { Sound_Player()。 //音频处理函数 LED_Display()。 //数码管显示键值 } } 初始化函数 初始化的流程框图如图 15 所示。 该函数对所需的 I/O 口、外部中断 0、定时器 0 以及数码管进行初始化配置。 void Init(void) { P0 = 0xff。 //先将 P0口置为 1,即关闭数码管 Speaker = 0。 IT0 = 1。 //外部中断 0 边沿触发 EX0 = 1。 //外部中断 0 允许 TMOD = 0x01。 //定时器方式 1 ET0 = 1。 //定时器 0 中断允许 TR0 = 0。 //关定时器 0 EA = 1。 //开总中断 } 数码管显示函数 数码显示的流程框图如图 16 所示。 此函数根据键值扫描函数读取的键码,结合数码管显示出来。 若判断是音调键将会显示数字 1~7其中之一;若判断是功能键将会显示字母 A、 b、C 其中之一。 void LED_Display(void) { if(Keycode0 amp。 amp。 Keycode8) P0 = ~table[Keycode]。 //Do~Si七个音调键分别显示 1~7 else if(Keycode == 8) P0 = ~table[Time + 9]。 //特殊功能键分别显示 A、 b、 C TR0 = 0。 //关定时器 0 初始化开始 结束 图 15 初始化流程图 关闭数码管 外部中断边沿触发 允许外部中断 开总中断 关闭定时器 允许定时器中断 定时器工作方式 Y N N 执行代码 1 Y 功能键键码。 数码显示开始 结束 音调键键码。 图 16 数码显示流程图 执行代码 2 基于 51 单片机的电子琴设计 12 } 中断函数 中断函数用到了外部中断和定时器中断。 键盘中断的流程框图如图 17 所示,当按键按下时,外部信号触发外部中断,执行键值扫描函数,读取对应的键值。 定时中断的流程框图如图 18 所示,定时器溢出中断后,进行重装载初值, 同时执行相应的音频控制操作。 键值扫描函数 由于本设计采用的是接触开关式按键,故不可避免存在机械抖动。 按键被按下是,其触点电压变化过程如图 19 所示。 这种抖动会使系统处于不稳定状态,故需要进行消抖处理。 抖动时间的长短和按键的机械特性有关,一般为 5~10ms。 通常手动按下键然后立即释放,这个操作中稳定闭合的时间超过 20ms,因此单片机在检测按键是否按下时都需要加上去抖动操作,有专门的去抖动电路或则芯片,但同用软件延时的方法也能轻易解决抖动问题,没必要添加多余的硬件。 本设计是用软件消抖方 法编写一个消抖程序。 当按键按下去后,首先对其进行连续两次取样,如果两次都为低电平,则输出低电平;如果其中有一次高电平,则输出高电平。 键盘的每一行通过一个上拉电阻接高电平,当按键按下时,对应的 I/O 口线被拉低。 如表 6 所示 按键编码关系表。 键值扫描函数的流程图如图 20 所示。 表 6 按键编码关系表 按键名称 键码 (十六进制 ) 按键名称 键码 (十六进制 ) K1 0xfe K5 0xef K2 0xfd K6 0xdf K3 0xfb K7 0xbf K4 0xf7 K8 0x7f 重装初值 定时中断开始 结束 图 18 定时中断 流程图 取反 键盘中断开始 键值扫描 图 17 键盘中断 流程图 结束 图 19 按键被按下时电压的变 化 基于 51 单片机的电子琴设计 13 void Key_Scan(void) { uint key。 key = P1。 //读取 P1口状态 switch(key) //键值 { case 0xfe: //Do { Delayms(10)。 //消抖 if(key == 0xfe) { Keycode = 1。 while(P1 != 0xFF)。 //等待按键释放 }break。 } … } } 音频处理函数 乐曲由一些不同的音阶构成,而每 个音阶对应着不同的频率,即利用单片机的定时器来产生所需要方波频率信号的组合,可构成所想要的乐曲。 本系统设计单片机配有 12MHZ晶振,利用 AT89C51 的内部定时器使其工作定时器模式的工作方式 1 下,其对应的定时器初值计算公式为: 16 61 2 / (1 2 )102 TX   式中 T 为定时时间,是所需频率的倒数。 如表 7 所示为所需频率对应的定时器初值表(简称 频率 初值表 )。 如图 21 所示音频处理函数的流程图。 表 7 频率 初值表 音调 简谱 (键值 ) 频率( Hz) 定时器初值 (16 进制 ) 备注 Do 1 523 0FBE9H 此处的 定时器初值 是在工作方式 1和 12MHZ 晶振时算得的 Re 2 587 0FC5FH Mi 3 659 0FCC1H Fa 4 698 0FCEFH So 5 754 0FD45H La 6 880 0FD92H 按键扫描开始 有按键按下。 有按键按下。 按键释放。 执行相应代码 延时 10ms 结束 N Y Y Y N N 图 20 键值扫描流程图 基于 51 单片机的电子琴设计 14 void Sound_Player(void) { if(Flag == 0) //Do~Si七。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。