C51课程设计电子琴.docx
- 文档编号:28136492
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:17
- 大小:891.84KB
C51课程设计电子琴.docx
《C51课程设计电子琴.docx》由会员分享,可在线阅读,更多相关《C51课程设计电子琴.docx(17页珍藏版)》请在冰豆网上搜索。
C51课程设计电子琴
C51程序设计课程报告
——电子琴
学院:
电气信息工程学院
班级:
自动化(3)
学号:
1114210114
姓名:
雷星星
摘要:
随着电子产业的发展和人民生活水平的提高,电子琴在人们生活中将扮演着越来越重要的角色,它改善人们的生活,给人们带来快乐和陶冶人的情操。
电子琴,它是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,电子琴采用控制功能强大的微处理技术和电子技术,使它融入现代人的生活中,成为不可或缺的一部分。
本设计在充分了解音乐音阶基础上,以AT89S51单片机作为核心控制器件而设计的,以这款单片机作为主控核心,通过程序控制与键盘,运放电路,扬声器等电路组成电子琴的基本单元,本文设计的电子琴,采用十六键技术,模拟了市场上电子琴的基本功能。
可以用弹奏出简单的乐曲;弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。
本设计给出了电子琴的详细设计方案,电路组成及程序流程并对电子琴可行性模拟仿真,Proteus试验仿真表明本文设计的电子琴运行稳定,电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
在本文设计的基础上,功能可以延伸和拓展,由于是程序控制,电子琴升级方便,具有很强的市场推广价值。
关键词:
AT89S51,电子琴,Proteus仿真,音阶
目录
一设计背景2
二设计目的和要求2
1.设计目的2
2.设计要求3
三设计原理3
1.定时/计数器原理3
2.中断控制3
3.七段数码管4
4.矩阵式键盘的识别和显示6
四设计组成7
1.设计的模块组成7
2.设计的软件实现流程7
五设计的电路原理图8
六本实验的C语言程序9
七仿真和调试14
1.仿真结果14
2.调试过程15
八实验成果和心得15
1.实验成果15
2.心得体会15
参考文献:
17
一设计背景
随着人们生活水平的提高和电子产业的高速发展,越来越多的电子产品融入到人们的生活当中,电子琴也不例外,它作为一种陶冶人们情操,给人们生活增天乐趣的一种乐器,在生活中扮演比较重要的角色,逐步成为人们生活当中的一部分。
电子琴本身是一种敲击乐器,通过敲击不同按键,由于音阶不同而发出不同声响,给人们的带来快乐,音阶的控制和声音大小是通过微控制器和电子电路实现的。
简易电子琴结构组成:
电子乐器的结构较为复杂,音源是由晶体管产生电振动,并通过音色回路而产生各种音色;同时由周波数调制产生颤音效果,由振幅调制产生各种乐器的音效。
乐器特色:
属于电子乐器,发音音量可以自由调节。
音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。
它还可模仿多种音色,甚至可以奏出常规乐器所无法发出的声音(如人声,风雨声等)。
另外,电子琴在独奏时,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐。
另外,电子琴还安装有混响、回声、延长音、震音和颤音等多项功能装置,表达各种情绪时运用自如。
简易电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。
还常作为独奏乐器出现,具有鲜明时代特色。
但电子琴的局限性也十分明显:
旋律与和声缺乏音量变化,过于协和、单一;在模仿各类管、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。
本设计在充分了解音乐音阶基础上,AT89C51单片机作为核心控制器件而设计的,以这款单片机作为主控核心,通过程序控制与键盘,运放电路,扬声器等电路组成电子琴的基本单元,本文设计的电子琴,采用十六键技术,模拟了市场上电子琴的基本功能。
可以用弹奏出简单的乐曲;弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。
二设计目的和要求
1.设计目的
(1)熟悉单片机的内部结构。
(2)掌握C51编程方法。
(3)掌握定时器与发声的关系。
(4)掌握交流蜂鸣器的发声原理和程序控制方法。
(5)掌握串行控制键盘键的识别方法。
2.设计要求
(1)使用AT89C51作为核心控制器件。
(2)编写C语言程序。
(3)利用定时器来控制频率。
(4)要求达到电子琴的基本功能,可以用弹奏出简单的乐曲。
(5)用键盘作出电子琴的按键,每键代表一个音符。
(6)各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。
三设计原理
1.定时/计数器原理
MCS-51单片机内部有2个16位的可编程定时/计数器,定时/计数器0由计数器TH0和TL0组成,定时/计数器1由计数器TH1和TL1组成,THX和TLX(X=0,1)分别为两个8位计数器,连接起来可组成16位计数器。
定时/计数器的工作方式由方式控制字TMOD选择,定时/计数器的启停由控制寄存器TCON控制,这两个寄存器均属于特殊功能寄存器。
定时/计数器的工作原理图如下:
其核心是一个加1计数器,加1计数器的脉冲有两个来源:
一个是外部脉冲源,另一个是系统的时钟振荡器。
当脉冲源为时钟振荡器(等间隔脉冲序列)时,由于计数器脉冲周期相同,所以脉冲数乘以脉冲周期就是定时时间,此时为定时功能。
当脉冲源为外部脉冲时,就是外部事件的计数器,此时为计数功能。
2中断控制
(1)TCON用于中断请求
TF1
TF0
IE1
IT1
IE0
IT0
IT0:
外部中断请求触发方式。
当IT0=0时,低电平触发;当IT0=1时,下降沿触发。
IT1外部中断请求触发方式。
作用同IT0。
IE0:
外部中断请求标志位。
当发中断请求时,置1,否则置0。
IE1:
外部中断请求标志位。
作用同IE0。
TF0:
片内定时/计数器0的溢出请求标志位,定时/计数器0溢出时,置1,否则置0.
TF1:
片内定时/计数器1的溢出中断请求标志位,作用同TF0.
(2)中断允许寄存器IE
EA
ES
ET1
EX1
ET0
EX0
EA:
开中断标志位。
当EA=1时,CPU开中断;EA=0时,CPU关中断。
ES:
串行口的中断允许位。
当ES=1时,串行口允许中断;ES=0时,则不允许中断。
ET0(ET1):
定时/计数器0
(1)的中断允许位。
当ET0=1,定时/计数器0
(1)溢出,允许中断,否则不允许。
EX0(EX1):
̄͞INTO的中断允许位,当EX0=1时,允许中断,否则,不允许。
3.七段数码管
(1)七段数码管简介
数码管使用条件:
七段数码管
a、段及小数点上加限流电阻
b、使用电压:
段:
根据发光颜色决定; 小数点:
根据发光颜色决定
c、使用电流:
静态:
总电流80mA(每段10mA);动态:
平均电流4-5mA 峰值电流100mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。
(共阳管与共阴管的判断方法:
在公共端加高电平,段码端加低电平,看是否点亮二极管,若亮则为共阳管,不亮则为共阴管)
数码管使用条件:
(2)数码管的分类
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
外观图共阳极共阴极
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出想要的数字,因此根据数码管的驱动方式不同,可以分为静态式和动态式两类。
(3)数码管的驱动方式
静态显示驱动
静态显示驱动也称直流驱动。
静态显示驱动是指每个数码管的每一个段码都由一个单片机的I/0端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态显示驱动的优点是编程简单、显示亮度高,缺点是占用I/0端口多,如驱动5个数码管静态显示时需要40(5×8)根I/0端口,要知道一个89551单片机可用的I/0端口才32个,所以实际应用时必须增加译码驱动器进行驱动,从而增加了硬件电路的复杂性。
动态显示驱动
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态显示驱动是将所有数码管的8个显示笔画“a、b、c、d、e、f、g、dp”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/0线控制。
当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,使各个数码管轮流受控显示,这就是动态显示驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,但能够节省大量的I/0端口,而且功耗更低。
4.矩阵式键盘的识别和显示
(1)矩阵式键盘的结构与工作原理
矩阵式键盘的结构
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。
(2)的按键识别方法
行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:
依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
四设计组成
1.设计的模块组成。
2.设计的软件实现流程
五设计的电路原理图
六本实验的C语言程序
#include
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
unsignedchartemp;
unsignedcharkey;
unsignedchari,j;
unsignedcharSTH0;
unsignedcharSTL0;
unsignedintcodetab[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178};
voidmain(void)
{
TMOD=0x01;
ET0=1;
EA=1;
while
(1)
{
P3=0xff;
P3_4=0;
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case0x0e:
key=0;
break;
case0x0d:
key=1;
break;
case0x0b:
key=2;
break;
case0x07:
key=3;
break;
}
temp=P3;
//P1_0=~P1_0;
P2=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp&0x0f;
while(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
}
TR0=0;
}
}
P3=0xff;
P3_5=0;
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!
=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case0x0e:
key=4;
break;
case0x0d:
key=5;
break;
case0x0b:
key=6;
break;
case0x07:
key=7;
break;
}
temp=P3;
//P1_0=~P1_0;
P2=table[key];
STH0=tab[key]/256;
STL0=tab[key]%256;
TR0=1;
temp=temp&0x0f;
while(temp!
=0x0f)
{
七仿真和调试
1.仿真结果
2.调试过程
为了检验本文设计的电子琴的软、硬件能否达到设计要求,本文对电路进行了仿真操作,仿真在Proteus软件中进行,首先在Proteus软件中虚拟制作出电路图,然后导入事先编制好的软件程序,就可以进行动态仿真了,与在真实电路板上进行调试的过程基本一样。
这样,如果在仿真过程中发现软、硬件不能正常工作,那么就能及时查找原因并做出相应修改,直到仿真的结果与实际相符为止。
(1)出现的问题
仿真时发现按下相应按键时,相应功能没能实现。
(2)解决办法
经分析得知是标志量没有设置好,进而改正了程序,使之实现了相应的功能。
通过各方面努力,本次单片机课程设计任务完成,系统大部分功能已实现。
可以随意演奏一首喜欢的曲子,并可以显示在数码管上,可以通过功能切换进行自动播放歌曲,基本达到预定的效果。
通过这次的设计提高了我运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我查阅各种文献资料、设计手册、设计规范以及软件编程排版的水平。
対单片机课程设计的整个流程和设计要求都有了深刻的认识,对以后的学习和设计都有很大的帮助。
八实验成果和心得
1.实验成果
课程设计结果基本能够能实现:
(1)能产生纯音;
(2)用键盘代替电子琴的键盘,控制演奏音乐,并根据键值控制发声;
(3)演奏一支乐曲。
2.心得体会
本次基于C51单片机的电子琴设计主要涉及硬件和软件两方面的内容,通过这次课程,我的硬件和软件开发能力都获得了提高。
首先硬件方面,更加熟悉了51单片机的结构以及它的实用,基本了解了电子产品的开发流程和所要做的工作。
基本掌握了C51并设计了一个单片机最小系统。
通过C语言编程的过程,使我对C语言的编程能力和C51单片机的功能有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等,并且我学会了遇到问题要分析问题及解决问题的能力,加深了对所学理论知识的理解和运用。
我的动手能力得到了很大的提高,尤其是团队合作和沟通交流能力得到明显锻炼。
这次课程的设计不仅仅培养了我的实际操作能力,也培养了我灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
每次实际的经历都会给自己带来很多技能的提升,虽然现在的自己还仅仅是一名学生,可也就是学生的不断学习和创新,一个又一个创新和进步带来了生活的丰富,把握实践,成就将来,感谢老师的辛勤给我带来的收获,以后更加努力。
参考文献:
[1]彭伟.单片机C语言程序设计实训100例.电子工业出版社.2009年
[2]李建忠.单片机原理及应用.西安:
西安电子科技大学,2002年
[3]马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 课程设计 电子琴