欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于单片机AT89C51电子琴课程设计.doc

    • 资源ID:12930068       资源大小:702KB        全文页数:22页
    • 资源格式: DOC        下载积分:9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机AT89C51电子琴课程设计.doc

    . .基于AT89C51单片机的多音阶电子琴的设计摘要单片机是电子、计算机及机电专业的一门重要的必修课程。要求我们掌握单片机的基本组成和工作原理、会变程序的一般编写方法、常用接口电路的软硬件设计方法,具备基本的单片机系统应用与开发能力。随着科技的快速发展,单片机的应用日益普遍。单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本单片机系统设计应用单片机控制技术,用AT89C51单片机为核心控制元件根据本学期所学的单片机知识结合设计了一套单片机控制的电子琴系统。电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在现代音乐扮演着重要的角色。本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐。系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。关键词:单片机、电子琴、AT89C51、独立键盘、目 录第 1 章 引 言. 1.1. 1 设计背景. 11.2 设计任务. 11.3 设计目的. 11.4 设计思路. 1第 2 章 方案论证. 12.1 方案论证. 1第 3 章 硬件系统设计. 23.1时钟电路. 23.2复位电路. 33.3 原理框图. 33. 4 显示部分设计. 33.5 按键部分设计. 43.6 发音部分设计. 5第 4 章 软件系统设计. 54.1 系统分析. 54.2 参数计算. 74.3 程序设计. 8第 5 章 实验结果. 105.1硬件调试. 105.2 软件调试. 105.3 仿真结果. 105.4 结果分析. 11第 6 章 总 结. 11附录一:系统整体电路图. 12附录二:元器件清单. 12附录三:源程序代码. 13参 考 文 献. 19. .word. .第一章 引言1.1 设计背景随着电子科学技术的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们带来更多的生活乐趣。基于当前市场上的玩具需求量增大,其中电子琴就是一个很好的应用方面。单片机技术使我们可以利用软硬件来实现电子琴的功能,从而可以实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“1”到“A”键演奏从低So到高DO等11个音,从而也可以通过单片机实现对十个按键的扩展,实现七个音符键的高、中、低21个音调的显示播放和任意音乐的自动播放。本次设计将十个音键制作成独立键盘,其中七个为音符键,三个为控制键,并用数码管进行显示,使电子琴的功能更加完美。不但可以实现对按键的显示,而且可以实现对音乐的自动存储和播放,使该设计功能更加完善。1.2 设计任务1、根据要求,设计以单片机为核心的多音阶电子琴系统,可随意弹奏想要表达的音乐;2、针对要求控制的对象完成程序的编制;3、硬件软件联调,完成题目所要求的功能;4、有高中低三个音阶,并有显示电路。1.3 设计目的1、通过课程设计,使我们能够深入理解单片机系统的工作原理,接口电路的设计及调试方法,培养综合运用所学理论知识分析和解决实际问题的能力;2、使用AT89C51芯片的串口功能,利用独立式键盘和AT89C51单片机以及扬声器实现乐曲的演奏;3、用keil软件进行编程与调试,利用Proteus 7 Professional软件进行绘制硬件电路图且进行仿真。1.4 设计思路用独立式键盘的7个按键分别对应相应的音符,当按下某一个按键时,产生一个相应音符,操作者按一定的节奏、规律进行输入时,信号经过单片机处理,然后经音频放大后经扬声器输出音频信号,产生乐曲。本次设计有一个创新,就是预先存放一段音乐程序在芯片内,整个设计既可以作电子琴用又可以作音乐盒用,且带显示功能。第二章 方案论证2.1 方案论证2.1.1总体设计采用AT89S52单片机作为主控芯片,设置键盘、蜂鸣器等外围器件,另外还用到一些简单器件如:四位数码管,和NPN型三极管及电阻等。利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用NPN型三极管8550实现低音频功率放大;最后用蜂鸣器发音。主控芯片采用AT89S52单片机,它是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。避免了由于元器件种类、个数繁多,而过于复杂的硬件电路也容易引起系统的精度不高、体积过大等不利因素。同时具有强大的控制功能和灵活的编程实现特性,由于本设计主要用于人们娱乐方面,因此在设计上尽量使其安全以及简单易操作。具有经济可行性、技术可行性、实物应用性。2.1.2单片机选型 硬件电路要以单片机作为主控芯片,实现按键输入音符和音调,四位数码管的显示以及低音频功率放大和蜂鸣器发音。针对本设计的功能和用途,采用AT89C51单片机更好,实现功能完全,性价比较高,更适合本设计。第三章 硬件系统设计3.1 时钟电路单片机内部具有一个高增益反相放大器,用于构成振荡器。通常在引脚XTALl和XTAL2跨接石英晶体和两个补偿电容构成自激振荡器,结构图2 中X1、C1、C2。可以根据情况选择6MHz、12MHz或24MHz等频率的石英晶体,补偿电容通常选择30pF左右的瓷片电容。图3-1、时钟电路3.2 复位电路单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。上电复位要求接通电源后,自动实现复位操作。手动复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。其结构如下图。上电自动复位通过电容C3充电来实现。手动按键复位是通过按键将电阻R1与VCC接通来实现。图3-2、复位电路3.3 原理框图本系统有主控芯片89S52、发音单元、显示模块、按键模块组成。图3-3、原理框图3.4 显示部分设计3.4.1数码显示方式数码显示有静态显示方式与动态显示方式两种。工作在静态显示方式时,数码管的位线与电源一直相连,数码管中的二极管均处于通电状态,即在静态工作方式下,显示电路中数码管的位选线是同时选通,而数码管的段选线是独立输入。工作在动态显示方式时,数码管的位线在扫描控制电路的控制下按设定顺序导通,即电路中的数码管是逐个接通电源,数码管的段选线以并联方式与译码电路联接,即在动态工作方式下,数码管不是同时导通显示而是按照设定顺序分时导通显示。3.4.2八位数码管的结构本次课程设计的显示电路采用两位数码管进行显示,由于此设计采用的是共阴极的,使用时不加限流电阻。为了显示字符,要为 LED 显示器段码,除了组成8字形的字符的 7段,另加上1个小数点位,共计8段, 因此提供给 LED 显示器的显示段码为1个字节。 图3-4、数码管电路3.5按键部分设计3.5.1键盘设计键盘在单片机应用系统中是一个关键的部件,它能实现向计算机输入数据,传送命令等功能,是人工干预计算机的主要手段。键盘可以分为2类:独立连接式键盘和矩阵式键盘。本设计采用独立式键盘。独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,然而,在按键较多时,I/O口线浪费较大,不宜采用。独立式按键软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。由于本程序较为简单,为了使用方便及节省资源,选择独立式键盘。下图为独立式键盘电路图:图3-5、独立式键盘电路图3.6 发音部分设计图3-6、扬声器电路图第四章 软件系统设计4.1 系统分析4.1.1系统软件的组成(1)键盘扫描程序:检测是否有按键按下,有按键按下则记录按下键的键值,并跳转至功能转移程序;无按键按下,则返回键盘扫描程序继续检测。(2)功能转移程序:对检测到的按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲的功能。(3)琴键处理程序:根据检测到的按键值,查询音调表,给计时器赋值,使发出相应频率的声音。(4)自动播放歌曲程序:检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有按键按下。4.1.2 系统总体功能流程图图4-1、系统总体功能流程图4.2 参数计算4.2.1发音原理若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。4.2.2 计算举例例如,频率为523Hz,其周期T1/5231912s,因此只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系式是:Nfi÷2÷fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。其计数初值T的求法如下:T65536N65536fi÷2÷fr例如:设K65536,fi1MHz,求中音DO(261Hz)。T65536N65536fi÷2÷fr655361000000÷2÷fr65536500000/fr,中音DO的T65536500000/52364580。4.2.3 计算结果(1)单片机12MHZ晶振,中音符与计数T0相关的计数值如下表所示:音符频率(Hz)计数值(T值)音符频率(Hz)计数值(T值)低1DO26263628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#2RE#31163928中6LA88064968低3MI33064021#6LA#93264994低4FA34964103中7SI96865030#4FA#37064185低1DO104665058低SO39264260#1DO#110965085#5SO#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3MI131865157低7SI49464524高4FA139765178中1DO52364580#4FA#149065198#1DO#55464633高5SO156865217中2RE58764633#5SO#166165235#2RE#62264884高6LA176065252中3MI65964732#6LA#186565268中4FA69864820高7SI196765283采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:低音019之间,中音在2039之间,高音在4059之间。4.3程序设计4.3.1 判断音阶(高中低音)子程序 在软件设计中采用yinjie代表音阶,如下表所示:音阶Yinjie值高2中1低0初始化状态为中音(yinjie=1),电路中设计高、低两个音阶键。上电后,若无按键按下,则为中音模式。若音阶键被按下,则如下流程图所示,初始化后进行按键扫描,在高音键按下,若初始yinjie不为2,则另yinjie=2,进入高音工作模式,若初始yinjie为2,则对yinjie进行初始化,即另yinjie=1,重新进入进入中音工作模式,这样即实现了高音键切换高、中音方式的转换。同理,用低音键实现中、低音的切换。图4-2、判断音阶(高中低音)子程序4.3.2 播放子程序(包括自动播放存储音乐和按键发音)本设计共两种播放模式,包括自动播放存储音乐和按键发音。上电后,首先开中断并设定定时器0为工作方式1,当自动播放键按下时,进入中断,根据乐谱在定义的音频数组中查找相应音律,然后给定时器赋初值,即开始播放音乐。当DO、RE、MI、FA、SO、LA、SI七种音符键按下时,根据音阶值(如3.3.1中高中低对应)和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。图4-3、播放子程序第五章 实验结果5.1硬件调试硬件调试主要是针对单片机部分进行的调试。在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。在确保硬件电路正常且无异常情况(断路或短路)的情况下方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。1、数码管LED电路调试:接通电源,随机按下按钮可以看到数码管显示数字。2、键盘单片机控制部分调试:上电后,随机按动键盘可以发现各个按键对应的音正确。5.2 软件调试调试主要方法和技巧:通常一个调试程序应该具备至少四种性能:跟踪、断点、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。5.3 仿真结果图5-1、低音音符LA仿真图5.4 结果分析根据仿真结果可知,本次课程设计能够准确并彻底的完成设计要求。右侧数码管可以显示a、b、c三种结果,分别代表低音、中音和高音。右侧数码管可以显示1、2、3、4、5、6、7七个数字,分别代表DO、RE、MI、FA、SO、LA、SI七种音符。当系统上电后,若按下低音键,则选定工作方式为低音模式。P0口连接数码管段选端,右侧数码管显示的6即代表LA。四位数码管即代表低音LA。第六章 总结本次课程设计的课题是基于AT89C51单片机的多音阶电子琴的设计,这是一个实用性质非常强的题目。它与我们日常生活联系紧密。这个课题的选取对所有参加这个课题研究的同学们来说都是一个非常好的锻炼。这次实验总共经历了两周的时间,从功能需求分析到功能分析,从程序的设计到程序的调试、下载、最后终于完成了这次具有实际使用价值的实验。 在设计中我运用自己平时学到的一些知识,以及自己在课后所查找资料的进行设计,刚开始遇到很多困难,包括对使用C语言环境语言的不熟悉。后来一起和同学研究,最终找到了解决问题的答案。经过我们的努力,在仿真软件和实物上都实现了高、中、低21个音符的发声和音乐的自动播放,使我们有了一定的成就感,也使我们进一步熟悉和掌握了单片机的内部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤, 掌握了单片机仿真软件Proteus的使用方法和键盘、显示器在的单片机控制系统中的应用,同时也掌握了撰写课程设计报告的方法。我感觉自己在设计方面提高很大,特别是在设计程序时,逻辑思维能力有所加强,同时对以前所学的知识有了更深刻的认识,并进一步的得到了巩固和提高,充分的做到了理论联系实际,也使我认识到理论与实际的差别,通过该课程设计,不但对单片机有了较为全面的认识,而且相关的知识也有了足够的掌握,我感觉最重要的还是设计思维的形成。更发现自己在平时学习中的缺陷。对以后的学习也有很大的帮助。 这次课程设计,我所收获的不仅是学习知识方面,更多的是生活方面。我了解到,在我们生活中,应该学会与别人共同分享,分享知识,分享问题,这样更有助于我们的交流,有利于我们共同进步,有利于我们对学习养成良好的兴趣。 最后,我要感谢,带我们课程设计的老师,感谢您对我们的耐心,感谢您们对我们的鼓励,让我们有信心继续下去,成功走到最后。附录一:系统整体电路图附录二:元器件清单序号元器件名称数量(个)1AT89C521230P瓷片电容2312MHz晶振1410UF/16V电解电容15按钮1160.5W / 8扬声器17数码管1810K电阻19排阻(9引脚)1附录三:源程序代码#include<reg52.h> #define uchar unsigned char void 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; /TH0,TL0 uchar flag=0XFF; /模式,0表示音乐,ff表示按键uchar key=0; /按键代号 uchar a; uchar gaodi=0; /音乐音符 uchar code MusicCode=0XFC,0X44,0XFC,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=0X02,0X82, 0X16,0X32,0X54,0X02,0X52, 0XA6,0X32,0X54,0X02,0X52,0X64,0X74,0XB6,0X64,0X52,0X5C,0X32,0X22, 0X16,0X12,0X14,0X32,0X22, 0X16,0X12,0X14,0X22,0X32, 0X26,0X12,0X94,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,0X32, 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,0x33,0xFD,0x81,0xFD,0xC7,0xFE,0x05,/中音 0xFE,0x21,0xFE,0x55,0xFE,0x84,0xFE,0X99,0XFE,0xC0,0xFE,0xE3,0xFF,0x02,/高音 ; void main(void) P1=0XFF; /初始化 P0=0XFF; P2=0;TMOD=0X01; IT0=1;TR0=0; EX0=1; ET0=1; EA=1; while(1) KeyScan(); /按键扫描 Run(); /运行 DisPlay(); /显示 void Run(void) /运行 if(flag=0) PlayMusic(); else PlayKey(); void KeyScan(void) /按键扫描 if(P1=0XFE) /第一按键按下 delay_1ms(12); /延时12MS if(P1=0XFE) /确定按下 key=1; a=key; else if(P1=0XFD) delay_1ms(12); if(P1=0XFD) key=2; a=key; else if(P1=0XFB) delay_1ms(12); if(P1=0XFB) key=3; a=key; else if(P1=0XF7) delay_1ms(12); if(P1=0XF7) key=4; a=key; else if(P1=0XEF) delay_1ms(12); if(P1=0XEF) key=5; a=key; else if(P1=0XDF) delay_1ms(12); if(P1=0XDF) key=6; a=key; else if(P1=0XBF) delay_1ms(12); if(P1=0XBF) key=7; a=key; else if(P0=0XFE) /低音模式键按下 delay_1ms(12); if(P0=0XFE) gaodi=0; a=gaodi; else if(P0=0XFD) /中音模式键按下 delay_1ms(12); if(P0=0XFD) gaodi=1; a=gaodi; else if(P0=0XFB) /高音模式键按下 delay_1ms(12); if(P0=0XFB) gaodi=2; a=gaodi; else return; void PlayKey(void) /响应按键 if(key=0) return; else Th0=KeyCodegaodi*14+key*2; Tl0=KeyCodegaodi*14+key*2+1; TR0=1; delay_1ms(187); TR0=0; key=0; time0() interrupt 1 /定时器0中断 TH0=Th0; TL0=Tl0; Beep=Beep; void interrupt0() interrupt 0 /外部中断0 flag=flag; if(flag=0) a=8; P2=0; void delay_1ms(uchar i) /延时 uchar j,k; for(j=0;j<i;j+) for(k=0;k<148;k+) ; void PlayMusic(void) /播放音乐 uchar yinfu,jiepai; uchar i,j; for(i=0;Musici!=0XFF;i+) yinfu=(Musici>>4); jiepai=(Musici&0X0F); if(yinfu=0) continue; Th0=MusicCode(yinfu-1)*2; Tl0=MusicCode(yinfu-1)*2+1;

    注意事项

    本文(基于单片机AT89C51电子琴课程设计.doc)为本站会员(知****量)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开