1、毕业设计基于AT89S52单片机的电子琴设计毕业设计-基于AT89S52单片机的电子琴设计摘 要本设计对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。电子琴音色优美,音域较宽,和声丰富,表现力极其丰富。它可模仿多种音色,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐。它还能够作为独奏乐器出现,具有鲜明的时代特色,深受广大音乐爱好者的喜爱,又是我国广大中小学生学习音乐的重要工具,而且电子琴容易制作,价格
2、便宜,有很好的市场前景。随着科技的不断发展,电子产品也在不断的进步。现在的电子产品越来越接近智能化,性能也精益求精。现阶段,单片机发展日益成熟,且发展迅猛,以单片机为核心部件的电子琴将会比以555定时器为核心部件电子琴的性能更加稳定,而且依靠单片机强大的编程功能更易实现电子琴各音节所对应频率的产生。所以此次设计具有很现实的意义。本次设计的目的主要是复习并运用我们所学的单片机知识,同时通过本次设计能够对电子电路以及作图软件等方面的知识有进一步的认识并掌握;熟悉AT89S52 单片机的内部结构和功能,合理利用其功能实现简单设计,能够完成相关软件编程设计工作;掌握一般的简单电子电路的设计方法。本次设
3、计的主要内容是利用单片机编程设计出具有发出标准高中低的Dou,Ruai,Mi,Fa、Sou,La,Si,Dou(高音)21个音的功能并能通过9个按键控制的电子琴。它包括数码显示电路、时钟电路、复位电路、发声电路以及键盘接口电路。1 概 述1.1 电子琴功能模式介绍本次设计提出了用AT89S52单片机为核心控制元件,设计一个简易的电子琴。本方案以AT89S52单片机作为主控核心,与键盘、扬声器、显示等模块组成核心主控制模块在主控模块上设有7个按键和扬声器。在弹奏模式方面,可根据使用者的操作随意弹奏想要表达的音乐。而在播放音乐方面,一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,再加上
4、一定的延时作为节拍,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号。查找想要播放歌曲的歌谱,翻译出对应的频率及延时节拍,存储到单片机存储单元里,再通过所编程序即可控制歌曲播放。1.2 系统设计的任务与要求实现电子琴发声控制系统;要求电路实现如下功能:利用蜂鸣器作为发声部件,1个数码管作为显示部件,设置8个按键,实现高音、中音、低音的1、2、3、4、5、6、7的发音。并在存储一首歌曲的内容,可以实现自动播放。用PROTEUS实现的电子琴仿真设计。说明:单片机的工作时钟频率为12MH
5、z。2 系统总体方案及硬件设计本系统采用单片机AT89S52为电子琴的控制核心,系统主要包括播放模块、按键弹奏模块。下面对各模块的设计逐一进行论证比较。2. 1 系统总体方案本次设计提出了用AT89S52单片机为核心控制元件,设计一个简易的电子琴。本方案以AT89S52单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块在主控模块上设有7个按键和扬声器。根据使用者的操作随意弹奏想要表达的音乐。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T
6、0来产生这样方波频率信号。2.1.1 定时/计数器的设计和状态字定义若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89S52的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系式是:Nfi2fr,式
7、中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下:T65536N65536fi2fr例如:设K65536,fi1MHz,求中音DO(261Hz)。T65536N65536fi2fr6553610000002fr65536500000/fr,中音DO的T65536500000/52364580。单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:表2-1音符频率表音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1DO26263628# 4 FA#74064860#1DO#27763731中 5 SO7
8、8464898低2RE29463835# 5 SO#83164934#2 RE#31163928中 6 LA88064968低 3 M33064021# 693264994低 4 FA34964103中 7 SI98865030# 4 FA#37064185高 1 DO104665058低 5 SO39264260# 1 DO#110965085# 5 SO#41564331高 2 RE117565110低 6 LA44064400# 2 RE#124565134# 646664463高 3 M131865157低 7 SI49464524高 4 FA139765178中 1 DO523645
9、80# 4 FA#148065198# 1 DO#55464633高 5 SO156865217中 2 RE58764684# 5 SO#166165235# 2 RE#62264732高 6 LA176065252中 3 M65964777# 6186565268中 4 FA69864820高 7 SI196765283采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:低音019之间,中音在2039之间,高音在4059之间用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。为了输出合适的方波,首先应该知道音符与频率的关系。
10、2.1.2 音调数据表单片机发出不同频率的方波,人听起来,就是不同的音调。上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。定义音调数据表的程序如下: DW 63628,63835,64021,64103,64260,64400,64524,64580低音区: 1 2 3 4 5 6 7 DW 64580,64671,64777,64820,64898,64968,65030 ,65058中音区:1 2 3 4 5 6 7 DW 65058,65110,65157,65178,65217,65252,65283, 65312高音区
11、:1 2 3 4 5 6 7把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。音乐的音拍,一个节拍为单位(C调)表2-2 曲调值表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms2.2 总体硬件组成框图实验中每按下一个琴键,单片机能够检测到键盘的按键,并根据按键的位置,通过程序来控制,使蜂鸣器发出不同频率(音调)的声音,声音延迟一段时间,等到按键放开之后,声音停止。然后再继续扫描,看是否有键按下。如
12、此循环,即可实现基本的琴键功能。图2-1 总体硬件组成框图2.2.1 主要芯片简介与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。AT89S52具有如下特点:40个引脚(引脚图如图1-1所示),4k Bytes Flash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套
13、中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDTC)电路,片内时钟振荡器。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1口:P1口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此
14、时可以作为输入口使用。 P2 口:P2 口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个 TTL 逻辑电平。P3口亦作为AT89S52特殊功能(第二功能)使用,在flash编程和校验时,P3口也接收一些控制信号。图2-2 AT89S522.2.2 子系统模块一LED显示模块如图2-2所示,利用AT89S52单片机的P2端口
15、的P2.0P2.6连接到一个七段数码管的ah的笔段上,数码管的公共端接电源。矩阵扫描显示当前按键模块如下:图2-3 LED数码管2.2.3 子系统模块二播放模块是蜂鸣器构成。它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以被广泛应用。图2-4 蜂鸣器播放器2.2.4 子系统模块三电子琴设有7个按键,分别代表7个音符,包括中音段的全部音符。通过软硬件设计,按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现各种琴键的声音。图2-5 按键排列2.2.5 AT89S52复位模块开关按下,实
16、现单片机的复位。此复位电路连接到AT89S52的RST管脚上。图2-6 复位部件2.2.6 AT89S52晶振模块本次采用12MHZ晶振,机器周期为1us,连接两个电容,连接到AT89S52的XTAL1,XTAL2上面,连接电路图2-7。图2-7 晶振模块3 软件设计3.1 系统软件设计软件是该电子琴控制系统的重要组成部分,在系统的软件设计中我们也才用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。本设计用的C语言编程。C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应
17、用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。本设计用的keil软件,Keil C51 Vision2集成开发环境是Keil Software,Inc/Keil Elektronik GmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。3.1.1 内置歌曲输出一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就
18、可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。利用AT89S52的内部定时器T0使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。将编写好的歌曲程序写入单片机存储区,其中高四位表示音阶,低四位代表其所延时的节拍。通过开关控制其播放。本设计所选歌曲截自邓丽君的月亮代表我的心其歌曲程序如下:uchar code Music=0X16,0X12,0X14,0X22,0X32,0X26,0X12,0X
19、94,0X22,0X32,0X2C,0X32,0X52,0X36,0X22,0X14,0X54,0XAC,0X92,0XA2,0X96,0X0A2,0X96,0X82,0X3C,0X54,0X36,0X22,0X14,0X54,0XAC,0X92,0XA2,0X16,0X12,0X14,0X22,0X32,0X2C,0X02,0X82,0X16,0X32,0X56,0X12,0XA6,0X32,0X56,0X52,0X66,0X72,0XB6,0X62,0X62,0X52,0X58,0X32,0X22,0X16,0X12,0X14,0X32,0X22,0X16,0X12,0X14,0X22,0
20、X32,0X26,0X92,0XA4,0X12,0X22,0X1C, 0XFF;3.1.2音阶键识别七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。 LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。本系统按键显示模块软件流程图如下:图3-1 音阶显示流程3.2 系统总流程图图3-2 总流程图4 Proteus软件仿真4.1 程序仿真在系统设计中采用模块设计法,所以方便对各电路模块功能进行逐级测试:中心控制模块的调试,音乐播放模块的调试,按键控制
21、模块的调试等,最后将各模块组合后进行整体测试。首先对各模块的功能进行调试,主要调试各模块能否实现指定的功能。然后通过Keil软件对编好的程序进行调试,检查语法错误。Keil下编译,产生目标HEX文件,Proteus下Programme Files选择产生的HEX文件,点击运行开始模拟。其中keil的运行截图如下:图4-1 程序运行4.2 proteus仿真首先,尝试仿真模拟,低音曲调。通过长按和断开微动开关,改变频率,实现高中低音的切换。低音的频率最低,故最先实现。如图4-2,用显示数字“0”代表低音。据观察,实现方便。图4-2 低音显示再次长按住微动开关,即可提高频率,使之达到设定的中音频率
22、,用数字“1”代表中音。尝试比较,同一音符的不同音调即可辨别中低音的区别。其音调略高于低音,需细细辨别。如图4-3,中音显示。图4-3 中音显示开始调试高音,再次长按微动开关,使之频率达到预设的高音阶。与低音、中音相比较,便可分辨出。本次仿真用数字“2”代替高音。仿真结果显示2。图4-4 高音显示接上电源,即开始播放。虽然有点小模糊,但是依稀可以辨别歌曲。另一个微动开关可实现乐曲的停止,即单片机的复位。再次按住,实现重新播放。见图4-5。图4-5 歌曲播放电子琴的关键功能是能弹奏乐符,上述仿真已经完成了高中低音和内置歌曲播放。现在,开始真正的音符仿真调试。音符有7个,分别是1,2,3,4,5,
23、6,7,形声以DO、RA、M、FA、SO、LA、SI试音。分别尝试按七个微动开关,切换于不同的频率,发出不同的音阶。再分别用高、中、低音发声,分别听取不同的音调。声音清脆悦耳,但有点延时,有待调整。另外,一个微动开关的动合实现内置歌曲和弹奏的切换。在播放内置歌曲时,按下某微动开关,歌曲停止,便可开始音阶弹奏。本次报告截取音阶7的Proteus仿真图。见图4-6。图4-6 音阶7的仿真5课程设计体会通过这次单片机课程设计,我们加深了对单片机理论的理解,将理论很好的应用到实际当中去。尤其是这次做了一个实物,锻炼了动手能力,很好的克服了眼高手低的毛病。这次单片机课程设计,让我有不小的收获。在学习态度
24、上,这次课程设计是对我们的学习态度的一次检验。对于这次单片机综合课程设计,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次设计所遇到的多半问题都是由于我们不够严谨。在做人处事上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的;同学们相互帮助,可以进步很快,团队协作真的很重要,帮助他人可以有更多成就感,获得更大的快乐。在实习之前,我们要对所用单片机的内部结构有一个比较系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的软件流程图;在设计程序时,不能妄想一次性就将整个程序设计好,反复修改
25、,不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就明白你的思路,这样也为资料的保存与交流提供了方便,从实践中学到的知识会让我们受益终身。发现、提出、分析、解决问题和实践能力提高都会受益于我在今后的学习、工作和生活中。在设计过程中和完成后,我认真总结,有以下体会:1.此次课程设计是在上学期单片机原理与技术的基础上进行的,整个实验设计过程相对比较熟悉,是把以前学习的零碎的内容系统的整合学习。2.本实验要充分了解电子琴的程序,清楚每个模块功能,认真按照步骤编译、链接、运行以生成可执行文件,并将此文件植入AT89S52中进行仿真。3.在经过两周
26、的设计过程中,通过大量的查阅资料,认真的研究教材,并向指导老师请教很多问题,自己对单片机有了更为深刻的理解。我们认真演示原理,画出程序流程图,通过源程序,做出电路图,在仿真中发现很多问题,通过仔细研究,不但解决了问题,还学到了在平时的学习中学不到的东西。4.在设计过程中,进一步的掌握Proteus、Word、Keil等软件的应用,也了解了单片机开发的基本环节。5.在焊接实物过程中应合理布局各元件,不仅要实现功能而且还要美观。参考文献1 余发山,王福忠.单片机原理及应用技术.中国矿业大学出版社,2008.62 杨凌霄.微型计算机原理与应用.中国矿业大学出版社,2008.83 贾立新,王涌.电子系
27、统设计与实践M.清华大学出版社,2008.2 4 陶春鸣,陈享成,瓮嘉民.单片机使用技术M.人民邮电出版社,2008.4 5 李光飞.单片机课程设计实例指导M.航空航天大学出版社,2004.9 6 余永权. ATMEL89系列单片机M.北京航空航天大学出版社,2002.4 7 胡宴如,耿苏燕.模拟电子技术M.高等教育出版社,2007.12 8 赵润林,张迎辉.单片机原理与应用教程M.北京大学出版社,2007.1 9 马淑华,王凤文,张美金.单片机原理与接口技术M.北京邮电大学出版社,2005.10 10 李建忠.单片机原理及应用M.西安电子科技大学出版社,2002.5 附1 源程序代码#inc
28、lude#define uchar unsigned charvoid Run(void);void KeyScan(void);void PlayKey(void);void delay_1ms(uchar i);void PlayMusic(void);void DisPlay(void);/显示sbit Beep=P37;/蜂鸣器接口uchar Th0,Tl0;uchar flag=0;/模式,0表示音乐,FF表示按键uchar key=0;/按键代号,0代表没有按键uchar a;/显示uchar gaodi=0;uchar code MusicCode=0XFc,0X44,0XFc,
29、0Xac,0XFd,0X09,0XFd,0X34, 0XFD,0X82,0XFD,0Xc8,0XFD,0X06,0XFb,0X04, 0Xfb,0X90,0Xfc,0X0c,0Xfe,0X22,0Xf9,0X5b,0Xfa,0x15;/歌曲所用频率uchar code Music=0X36,0X22,0X14,0X54,0XAC,0X92,0XA2,0X96,0X0A2,0X96,0X82,0X3C,0X54,0X36,0X22,0X14,0X54,0XAC,0X92,0XA2,0X16,0X12,0X14,0X22,0X32,0X2C,0X02,0X82,0X16,0X32,0X56,0X1
30、2,0XA6,0X32,0X56,0X52,0X66,0X72,0XB6,0X62,0X62,0X52,0X58,0X32,0X22,0X16,0X12,0X14,0X32,0X22,0X16,0X12,0X14,0X22,0X32,0X26,0X92,0XA4,0X12,0X22,0X1C, 0XFF; /歌谱uchar code KeyCode=0XFF,0XFF,0xF8,0x8B,0xF9,0x5B,0xFA,0x14,0xFA,0x66,0xFB,0x03,0xFB,0x8F,0xFC,0x0B,0xFC,0x43,0xFC,0xAB,0xFD,0x08,0xFD,0x330xFD,0x81,0xFD,0xC7,0xFE,0x05,0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02;/高中低频率/*主程序*/void main(void) P0=0XFF; P2=0; TMOD=0X01;/定时器0,模式1,16进制计数 IT0=1;/边沿触发方式 TR0=0;/停止定时器0的工作 EX0=1;/ 允许外部中断0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1