基于51单片机的电子琴设计课程设计.docx
- 文档编号:9136195
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:22
- 大小:361.67KB
基于51单片机的电子琴设计课程设计.docx
《基于51单片机的电子琴设计课程设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子琴设计课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于51单片机的电子琴设计课程设计
前言
音乐教育是学校美育的主要途径和最重要内容,它在陶冶情操、提高素养、开发智力,特别是在培养学生创新精神和实践能力方面发挥着独特的作用。
近年来,我国音乐教育在理论与实践上都取得了有目共睹的成绩,探索并形成了具有中国特色的、较为完整的音乐教育教学体系。
但我国音乐教育的改革力度离素质教育发展的要求还存在一定距离。
如今,电子琴作为电子时代的新产物以其独特的功能和巨大的兼容性被人们广泛的接受和推崇。
而在课堂教学方面,它拥有其它乐器无法比拟的两个瞬间:
瞬间多元素思维的特殊的弹奏方法;瞬间多声部(包括多音色)展示的乐队音响效果的特点。
结合电子琴自身强大的功能及独特的优点来进行音乐教育的实施,这样就应该大力推广电子琴进入音乐教室,让电子琴教学在音乐教育中发挥巨大的作用。
现代乐器中,电子琴是高新科技在音乐领域的一个代表,体现了人类电子技术和艺术的完美结合。
电子琴自动伴奏的稳定性、准确性,以及鲜明的强弱规律、随人设置的速度要求,都更便于人们由易到难、深入浅出的准确掌握歌曲节奏和乐曲风格,对其节奏的稳定性和准确性训练能起到非常大的作用。
电子琴所包含的巨量的音乐信息和强大的音乐表现力可以帮助音乐教学更好地贯彻和落实素质教育,更有效地提高人们的音乐素质和能力。
目前,市场上的电子琴可谓琳琅满目,功能也是越来越完备。
以单片机作为主控核心,设计并制作的电子琴系统运行稳定,其优点是硬件电路简单、软件功能完善、控制系统可靠、性价比较高等,具有一定的实用与参考价值。
这就为电子琴的普及提供了方便。
二、电子琴设计要求本设计主要是用AT89C51单片机为核心控制元件,设计一台电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有7个按键和1个复位按键。
本系统主要是完成2大功能:
音乐自动播放、电子琴弹奏。
关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在自定义的表中。
第1章基于51单片机的电子琴设计
1.1电子琴的设计要求
本设计主要是用AT89C51单片机为核心控制元件,设计一台电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有7个按键和1个复位按键。
本系统主要是完成的功能:
电子琴弹奏。
关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在自定义的表中。
本设计的电子琴有以下要求:
1.用键盘作出电子琴的按键,共7个,每键代表1个音符。
各音符按照符合电子琴的按键顺序排列;
2.利用五彩小灯显示有按键按下及相对应的位置。
3.达到电子琴的基本功能,可以用弹奏出简单的乐曲;
1.2电子琴设计所用设备及软件
本设计除了需要计算机,还会用到两款软件:
仿真软件Proteus、编程软件KeiluVision4。
1.仿真软件Proteus的简介
Proteus软件具有其它EDA工具软件的功能,诸如:
原理布图、PCB自动或人工布线、SPICE
电路仿真。
除此之外还有一些革命性的特点:
互动的电路仿真、仿真处理器及其外围电路。
所实现的功能:
数字电路仿真
2.KeiluVision4的简介
uVision4在uVision3IDE的基础上,增加了更多大众化的功能:
多显示器和灵活的窗口管理系统;系统浏览器窗口的显示设备外设寄存器信息;调试还原视图创建并保存多个调试窗口布局;多项目工作区简化与众多的项目。
所实现的功能:
编写程序
1.3总体设计方案
本系统采用AT89C51为主控芯片,因其精度较高,操作比较灵活,输入电路和输出电路由芯片来进行处理,电路的系统的稳定性高,功耗小。
其中,输入电路有7个独立按键,通过按键随意按下所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
由于需要显示的信息不多,显示电路未采用液晶屏显示,而是使用LED管显示电路负责显示按下的琴键所对应的键值,这样既节省了成本了,又降低了编程难度。
如图1-1所示基于单片机AT89C51的电子琴电路,它主要由琴键控制电路、LED显示电路、音频功放电路、时钟-复时钟复位电路和电源电路五部分所构成。
图1-1电路的原理框图
第2章系统硬件设计
基于单片机AT89C51的电子琴电路由琴键控制电路、数码管显示电路、音频功放电路、时钟-复位电路和电源电路五部分所构成。
琴键控制电路采用了8输入与门芯片CD4068B,收集7个独立按键的开关状态信号,并触发单片机的外部中断来处理;而数码管显示电路负责显示按下的琴键所对应的键值;同时,音频功放电路也会播放琴键对应的音调;电源电路为整个电路提供能源。
2.1琴键控制电路
琴键控制电路作为人机联系的输入部分,也是间接控制数码显示和音频功放的重要组成部分。
键盘按照连接方式可以分为独立式和矩阵式键盘两类。
此次设计采用的是独立键盘。
独立式键盘的特点是一键一线,各键相互独立,每个键各接一条I/O口线,通过检测I/O输入线的电平状态,可判断出被按下的按键。
显而易见,这样电路简单,各条检测线独立,识别按下按键的软件编写简单。
适用于键盘按键数目较少的场合,不适用于键盘按键数目较多的场合,因为将占用较多的I/O口线。
独立式键盘电路如图3所示,8个独立按键分别对应一个I/O口线,当某一按键按下时,对应的检测线就变成了低电平,与其它按键相连的检测线仍为高电平,只需读入I/O输入线的状态,判别哪一条I/O输入线为低电平,很容易识别哪个键被按下。
图2-1独立按键电路图
2.2音频功放电路
如图2-2所示音频功放电路,它主要由三极管放大器和扬声器组成。
其中,扬声器具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和谐波失真小等优点,广泛应用于录音机和收音机之中。
电位器Rv1是用来调节声音的大小。
图2-2音频电路
2.3时钟-复位电路
时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。
AT89C51内部有一个用于构成振荡器的高增益反相放大器,输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器,图2-3是AT89S51内部时钟方式的电路,C1和C2的典型值通常选择为30pF,石英晶体常选6MHz或12MHz的。
本设计采用内部时钟方式做时钟电路。
图2-3复位电路图
2.4LED显示电路
本文设计中采用的是LED,LED(LightEmittingDiode)发光二极管缩写,它是半导体二极管的一种,可以把电能转化成光能。
发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。
LED具有体积小,电压低,使用寿命长,价格低,亮度高,低热量等优点。
但是显示内容单一。
本文中采用它显示按键的键位。
如图2-4所示。
图2-4LED显示电路图
2.5整体电路
基于单片机AT89C51的电子琴电路由琴键控制电路、LED显示电路、音频功放电路、时钟-复位电路和电源电路五部分所构成。
琴键控制电路采用了7输入,收集7个独立按键的开关状态信号,并触发单片机的外部中断来处理;而LED显示电路负责显示按下的琴键所对应的键值;同时,音频功放电路也会播放琴键对应的音调;电源电路为整个电路提供能源。
如图2-5所示。
图2-5整体电路
第3章电子琴系统软件设计
系统功能的实现一般包括硬件部分和软件部分,一旦硬件确定下来,软件要实现的功能也随之确定。
而为使编程思路清晰,应先绘制程序流程图。
图3-1电子琴系统流程图
3.1系统硬件接口定义
系统硬件接口定义如表1所示
表1系统硬件接口定义
引脚号
引脚名
接口说明
备注
1-7
P0-P7
独立按键接口
33-39
P1-P7
数码管与单片机通信口
17
P37
控制蜂鸣器
3.2主函数
主函数流程图如图所示。
利用模块化的思想,主函数只执行初始化函数,对所需的I/O口、外部中断1、定时器0进行初始化配置。
音频处理函数和LED显示函数。
另外,键码的识别与刷新是通过中断函数来完成。
图3-2函数流程图
3.2.1主函数程序
voidmain(void)
{
TMOD=0x01;//tmod方式1
ET0=1;
EA=1;
LED=0xff;
KEY=0xff;
while
(1)
{
if(KEY!
=0xff)
{
delay();
key_scan();
STH0=tab[MUSIC]/256;//设初始值
STL0=tab[MUSIC]%256;
TR0=1;
}
else
{
SPEAKER=1;
TR0=0;
}
}
}
3.3按键扫描及LED显示函数
由于本设计采用的是接触开关式按键,故不可避免存在机械抖动。
按键被按下是,其触点电压变化过程如图19所示。
这种抖动会使系统处于不稳定状态,故需要进行消抖处理。
抖动时间的长短和按键的机械特性有关,一般为5~10ms。
通常手动按下键然后立即释放,这个操作中稳定闭合的时间超过20ms,因此单片机在检测按键是否按下时都需要加上去抖动操作,有专门的去抖动电路或则芯片,但同用软件延时的方法也能轻易解决抖动问题,没必要添加多余的硬件。
本设计是用软件消抖方法编写一个消抖程序。
当按键按下去后,首先对其进行连续两次取样,如果两次都为低电平,则输出低电平;如果其中有一次高电平,则输出高电平。
本文所设计的显示为LED显示,当键盘得到低电平时,输出P1口的LED常亮。
以表示所指向的键盘动作。
3.3.1键盘去抖及LED显示子程序
voidkey_scan(void)
{
if(KEY!
=0xff)
{
switch(~KEY)//显示的列位置
{
case0x01:
{
MUSIC=0;
P0=0xfe;
break;
}
case0x02:
{
MUSIC=1;
P0=0xfd;
break;
}
case0x04:
{
MUSIC=2;
P0=0xfb;
break;
}
case0x08:
{
MUSIC=3;
P0=0xf7;
break;
}
case0x10:
{
MUSIC=4;
P0=0xef;
break;
}
case0x20:
{
MUSIC=5;
P0=0xdf;
break;
}
case0x40:
{
MUSIC=6;
P0=0xbf;
break;
}
}
}
}
3.4中断函数
中断函数用到了定时器中断。
定时中断的流程框图如图3-4所示,定时器溢出中断后,进行重装载初值,同时执行相应的音频控制操作。
图3-5中断函数
3.4.1中断程序
voidt0(void)interrupt1
{
TH0=STH0;
TL0=STL0;
SPEAKER=~SPEAKER;
}
第4章电子琴和调试
由于没有硬件设备,所以无法进行硬件调试,但这并不妨碍软件调试。
利用仿真软件Proteus和编程软件Keil uVision4进行调试程序。
4.1调试工具
Proteus软件是英国Labcenter Electronics公司研发的EDA工具软件。
它是一个集模拟电路、数字电路、模/数混合电路以及多种微控制器系统为一体的系统设计和仿真平台。
是目前同类软件中最先进、最完整的电子类仿真平台之一。
它真正实现了在计算机上完成从原理图、电路分析与仿真、单片机代码调试与仿真、系统测试与功能验证到PCB板生成的完整的电子产品研发过程。
最新的Keil uVision4 IDE,旨在提高开发人员的生产力,实现更快,更有效的程序开发。
Keil uVision4引入了灵活的窗口管理系统,能够拖放到视图内的任何地方,包括支持多显示器窗口。
Keil uVision4在Keil uVision3 IDE的基础上,增加了更多大众化的功能:
多显示器和灵活的窗口管理系统;系统浏览器窗口的显示设备外设寄存器信息;调试还原视图创建并保存多个调试窗口布局;多项目工作区简化与众多的项目。
4.2调试结果
利用Proteus对电路进行仿真分析,电子琴电路的仿真电路图如图22所示。
进一步达到了实验效果。
但也一定瑕疵,按键按下后,延迟一会才有声音。
调试结果与设计的基本一致,如表2所示。
表2调式结果
按键键值
发音调试
LED显示
备注
S1
Do
1灯亮
S2
Re
2灯亮
S3
Mi
3灯亮
S4
Fa
4灯亮
S5
Sao
5灯亮
S6
La
6灯亮
S7
Xi
7灯亮
图4-1电子琴电路仿真
4.3电子琴设计中的问题及解决方法
电子琴的设计并非一帆风顺,在这期间遇到了很多问题,下面谈几个关键的问题。
首先是最重要的是程序直接编译不下去,到处是bug,直接蒙逼。
慢慢调呗,一个一个XX,一个一个查字典。
我的天,老师都帮我在找。
最后终于编译出hxe文件了,擦,外放不响,那就自己整呗,本来自己什么都不会,XX了好多素材,一个一个试试呗。
嗯嗯,最终知道是定义的频率计算有误。
弄了好久才响。
嗯嗯,涂省事用的LED的小灯,太low了,都这么低的要求了,刚开始还乱闪。
又一点一点改程序,没法,自己水平有限,上课又没有好好听课,嗳。
就先这样吧。
第5章电子琴设计总结
在电子音乐领域,电子音调作为现代电子科技与音乐结合的产物,它在现代音乐中扮演着重要的角色。
目前,由于电子音乐的普及,电子琴就是一种新型的电子乐器。
本设计基于单片机AT89C51的电子琴电路由琴键控制电路、数码管显示电路、音频功放电路、时钟-复位电路和电源电路五部分所构成。
琴键控制电路采用了8输入与门芯片CD4068B,收集8个独立按键的开关状态信号,并触发单片机的外部中断来处理;而LED显示电路负责显示按下的琴键所对应的键值;同时,音频功放电路也会播放琴键对应的音调;电源电路为整个电路提供能源。
电子琴的设计并非一帆风顺,在这期间遇到了很多问题,上一章已经说过了,在这也不赘述了。
通过这次课程设计,感觉收获颇多。
首先硬件方面,基本了解了电子产品的开发流程和所要做的工作,基本掌握了Protel99SE原理图的方法以及怎么利用Proteus进行数字电路仿真。
除此之外,对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,诸如LED数码管、键盘等等。
在软件方面,通过对外部中断、定时器/计数器、I/O的使用,使得C语言编程能力也有了较大的进步。
以上
参考文献
[1]魏鸿磊.临机原理及应用(c语言编程)[M].同济大学出版,2015.
[2]袁东.51单片机应用开发实战手册[M].北京:
电子工业出版社,2011.
[3]沈红卫.基于单片机的智能系统设计与实现[M].北京:
电子工业出版社,2005.
[4]苏丽萍.电子技术基础[M].西安:
西安电子科技大学出版社,2002.
[5]曾屹,彭楚武.单片机原理与应用(第2版)[M].长沙:
中南大学出版社,2009.
[6]林立.单片机原理及应用——基于Proteus和Keil C[M].北京:
电子工业出版社,2009.
[7]彭伟.单片机C语言程序设计实训100例[M].北京:
电子工业出版社,2009.
[8]顾滨,赵伟军,诸杭.Protel99SE实用教程(第3版)[M].北京:
人民邮电出版社,2013.
[9]王为青,程国刚.单片机Keil Cx51应用开发技术.[M].北京:
人民邮电出版社,2007.
[10]单丹,马淑云.基于AT89C51单片机电子琴的设计[J].中国高新技术企业,2002.
[11]石鑫.基于89C51单片机简易电子琴的设计[J].农业装备技术,2010.
[12]肖丽,王骥.基于STC89C51单片机的电子琴设计[J].电子元器件应用,2010.
[13]周润景.Proteus入门实用教程[M].北京:
机械工业出版社,2007.
附录
电子琴源程序
#include
#defineKEYP1
#defineLEDP0
sbitSPEAKER=P3^7;
unsignedcharMUSIC;
unsignedcharSTH0;
unsignedcharSTL0;
unsignedintcodetab[]={
64021,64103,64260,64400,
64524,64580,64684};
voiddelay(void)
{
unsignedinti,j;
for(i=0;i<20;i++)
for(j=0;j<250;j++);
}
voidkey_scan(void)
{
if(KEY!
=0xff)
{
switch(~KEY)//显示的列位置
{
case0x01:
{
MUSIC=0;
P0=0xfe;
break;
}
case0x02:
{
MUSIC=1;
P0=0xfd;
break;
}
case0x04:
{
MUSIC=2;
P0=0xfb;
break;
}
case0x08:
{
MUSIC=3;
P0=0xf7;
break;
}
case0x10:
{
MUSIC=4;
P0=0xef;
break;
}
case0x20:
{
MUSIC=5;
P0=0xdf;
break;
}
case0x40:
{
MUSIC=6;
P0=0xbf;
break;
}
}
}
}
voidmain(void)
{
TMOD=0x01;//tmod方式1
ET0=1;
EA=1;
LED=0xff;
KEY=0xff;
while
(1)
{
if(KEY!
=0xff)
{
delay();
key_scan();
STH0=tab[MUSIC]/256;//设初始值
STL0=tab[MUSIC]%256;
TR0=1;
}
else
{
SPEAKER=1;
TR0=0;
}
}
}
voidt0(void)interrupt1
{
TH0=STH0;
TL0=STL0;
SPEAKER=~SPEAKER;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子琴 设计 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)