1、设计摘要本设计关键研究基于AT89C52单片机简易电子琴设计。它是以单片机作为主控关键,设置键盘、蜂鸣器等外围器件;另外还用到部分简单器件如:两位数码管,和NPN型三极管及电阻等。利用按键实现音符和音调输入;两位数码管进行被操作按键显示;用NPN型三极管8550实现低音频功率放大;最终用蜂鸣器进行播放“送别”。本设计硬件部分关键由最小系统,按键系统模块、数码管显示模块和蜂鸣器模块组成。其软件部分关键有主程序模块、定时中止程序、定时计数程序、显示程序。(1)最小系统:它是单片机应用系统设计基础。它包含单片机选择、时钟系统设计、复位电路设计、简单I/O口扩展、掉电保护等。(2)按键系统模块:本设计
2、采取10个按键,其中7个按键用来显示7个音调,其它3个按键能够进行高低中音切换,并自动播放已存歌曲。(3)数码管显示模块:SM420562段选端接在单片机P0口,两个位选端分别接在P20和P21。(4)蜂鸣器模块:此电子琴发音电路是经过三极管驱动蜂鸣器发音,经过上拉电阻提升驱动能力。此次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件程序,最终进行软硬件调试运行。而且从原理图,关键芯片,各模块原理和各个模块程序调试来叙述。利用单片机产生不一样频率来取得我们要求音阶,实现高、中、低共21个音符发音和显示和音乐播放时控制显示,而且能自动播放程序中编排音乐。系统运行稳定,其优点是硬
3、件电路简单,软件功效完善,控制系统可靠,性价比高等,含有一定使用和参考价值。目录1.概述41.1设计背景41.2设计意义41.3 设计任务42.系统总体方案及硬件设计52.1总体设计52.2单片机选型62.3单片机最小工作系统62.3.1 时钟电路62.3.2复位电路72.4 原理框图72.5显示部分设计82.5.1数码显示方法82.5.2八位数码管结构82.6 按键部分设计92.6.1操作键设计92.6.2键盘设计92.6.3去抖动102.7发音部分设计113.系统软件设计123.1系统分析123.1.1系统软件组成123.1.2 系统总体功效步骤图133.2 参数计算143.2.1发音原理
4、143.2.2 计算举例143.2.3 计算结果143.3程序设计163.3.1 判定音阶(高中低音)子程序163.3.2 播放子程序(包含自动播放存放音乐和按键发音)174. PROTEUS软件仿真194.1硬件调试194.2 软件调试194.3 仿真结果(任举一例)204.4 结果分析205. 课程设计体会21参考文件22附1 源程序代码23附2 系统原理图321.概述1.1设计背景伴随电子科学技术飞速发展,电子技术正在逐步改善着大家学习、生活、工作,所以开发本系统期望能够给大家带来更多生活乐趣。基于目前市场上玩具需求量增大,其中电子琴就是一个很好应用方面。单片机技术使我们能够利用软硬件来
5、实现电子琴功效,从而能够实现电子琴微型化,能够用作玩具琴、音乐转盘和音乐童车等等。而且能够进行一定功效扩展。鉴于传统电子琴能够用键盘上“1”到“A”键演奏从低So到高DO等11个音,从而也能够经过单片机实现对十个按键扩展,实现七个音符键高、中、低21个音调显示播放和任意音乐自动播放。该设计将十个音键制作成独立键盘,其中七个为音符键,三个为控制键,并用数码管进行显示,使电子琴功效愈加完美。不仅能够实现对按键显示,而且能够实现对音乐自动存放和播放,使该设计功效愈加完善。1.2设计意义该设计含有以下优点:能够方便得悉播放音符和音调;比传统电子琴功效更完善;制作简单,成本低;1.3 设计任务 实现电子
6、琴发声控制系统;要求电路实现以下功效:利用蜂鸣器作为发声部件,两个数码管作为显示部件,设置10个按键,实现高音、中音、低音1、2、3、4、5、6、7发音。并在存放一首歌曲内容,能够实现自动播放。 用PROTEUS实现电子琴仿真设计说明:单片机工作时钟频率为11.0592MHz。2.系统总体方案及硬件设计2.1总体设计实现此次设计方案有多个,下面比较说明一下最好方案选择。方案一:采取单个逻辑器件组合音乐是有由不一样音阶组成,而不一样音阶又是由不一样频率发出,那么利用不一样频率,就能够发出不一样音乐了。我们知道计数器8253能够产生任意频率方波频率信号,所以,我们只要把一首歌曲音阶对应频率和计数器
7、频率对应起来就可经过计数器产生音乐了。依据本试验要求,采取8279将键扫得到键值经过查表得到对应8253频率值,将从8253得到相对应按键弹奏信号经过LM386进行放大,再用喇叭输出,就实现了简易电子琴基础功效,也就完成了试验要求。方案二:用VHDL语言编程来实现系统整体基础原理图以下:图1、系统整体基础原理图利用我们试验室优异数字电路试验设备,我们能够采取VHDL语言编程来实现。我们能够经过VDHL语言,对试验原理图各个部分进行设计,经过编译,能够在计算机上下载此试验原理图,利用电路学习机上芯片。我们很快就能够设计出一个简单电子琴。并实现其功效。方案三:采取AT89S52单片机作为主控芯片,
8、设置键盘、蜂鸣器等外围器件,另外还用到部分简单器件如:两位数码管,和NPN型三极管及电阻等。利用按键实现音符和音调输入;两位数码管进行被操作按键显示;用NPN型三极管8550实现低音频功率放大;最终用蜂鸣器发音。三种方案比较:方案一采取单个逻辑器件组合实现。这么即使比较直观,逻辑器件分工鲜明,思绪也比清楚,一目了然,不过因为元器件种类、个数繁多,而过于复杂硬件电路也轻易引发系统精度不高、体积过大等不利原因。比如七个不一样音符是由七个不一样频率来控制发出,所用仪器之多显而易见。方案二采取VHDL语言编程来实现电子琴各项功效。系统关键由电子琴发声模块、选择控制模块和储存器模块组成。和方案一相比较,
9、方案二就显得比较笼统,即使我们能够看到用超高速硬件描述语言VHDL优势,但本质上它只是把整个系统分为了若干个模块,而不牵涉到具体硬件电路。方案三和前两种方案相比,主控芯片采取AT89S52单片机,它是大规模集成电路技术发展产物,含有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛特点。同时含有强大控制功效和灵活编程实现特征,因为本设计关键用于大家娱乐方面,所以在设计上尽可能使其安全和简单易操作。而第三种方案含有经济可行性、技术可行性、实物应用性。总而言之,此次课程设计采取第三种方案。2.2单片机选型硬件电路要以单片机作为主控芯片,实现按键输入音符和音调,两位数码管显示和低音频功率放大和蜂鸣
10、器发音。针对本设计功效和用途,采取AT89S51单片机愈加好,实现功效完全,性价比较高,更适合本设计。2.3单片机最小工作系统单片机加上合适外围器件和应用程序,组成应用系统称为最小系统。2.3.1 时钟电路 单片机内部含有一个高增益反相放大器,用于组成振荡器。通常在引脚XTALl和XTAL2跨接石英晶体和两个赔偿电容组成自激振荡器,结构图2 中X1、C1、C2。能够依据情况选择6MHz、12MHz或24MHz等频率石英晶体,赔偿电容通常选择30pF左右瓷片电容。图2、时钟电路2.3.2复位电路 单片机小系统常采取上电自动复位和手动按键复位两种方法实现系统复位操作。上电复位要求接通电源后,自动实
11、现复位操作。手动复位要求在电源接通条件下,在单片机运行期间,用按钮开关操作使单片机复位。其结构以下图。上电自动复位经过电容C3充电来实现。手动按键复位是经过按键将电阻R1和VCC接通来实现。图3、复位电路2.4 原理框图本系统有主控芯片89S52、发音单元、显示模块、按键模块组成。图4、原理框图2.5显示部分设计2.5.1数码显示方法数码显示有静态显示方法和动态显示方法两种。工作在静态显示方法时,数码管位线和电源一直相连,数码管中二极管均处于通电状态,即在静态工作方法下,显示电路中数码管位选线是同时选通,而数码管段选线是独立输入。工作在动态显示方法时,数码管位线在扫描控制电路控制下按设定次序导
12、通,即电路中数码管是逐一接通电源,数码管段选线以并联方法和译码电路联接,即在动态工作方法下,数码管不是同时导通显示而是根据设定次序分时导通显示。2.5.2八位数码管结构此次课程设计显示电路采取两位数码管进行显示,因为此设计采取是共阴极,使用时不加限流电阻。为了显示字符,要为 LED 显示器段码,除了组成8字形字符 7段,另加上1个小数点位,累计8段, 所以提供给 LED 显示器显示段码为1个字节。 图5、数码管电路2.6 按键部分设计2.6.1操作键设计常见按键有三种:机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。机械触点式按键是利用机械弹性使键复位,手感显著,连线清楚,工艺简单,适
13、合单件制造。不过触点处易侵入灰尘而造成接触不良,体积相对较大。导电橡胶按键是利用橡胶弹性来复位,经过压制方法把面板上全部按键制成一块,体积小,装配方便,适合批量生产。不过时间长了,橡胶老化而使弹力下降,同时易侵入灰尘。柔性按键是多年来快速发展一个新型按键,能够分为凸球型和平面型两种。柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。而且外形和面板布局、色彩、键距可根据整机要求来设计。不过因为客观条件和经济能力有限,本系统采取机械触点式按键。2.6.2键盘设计键盘在单片机应用系统中是一个关键部件,它能实现向计算机输入数据,传送命令等功效,是人工干估计算机关键手段。键盘能够分为2类:独立连接
14、式键盘和矩阵式键盘。(1)矩阵式键盘单片机系统中,若按键较多时,通常采取矩阵式(也称行列式)键盘。矩阵式键盘由行线和列线组成,按键在行、列线交叉点上。显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。矩阵式键盘中,行、列线分别连接到按键开关两端,行线经过上拉电阻接到+5V上当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由和此行线相连列线电平决定。这是识别按键是否按下关键。(2)独立连接式键盘独立式按键是直接用I/O口线组成单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键工作不会影响其它I/O口线状态。独立式按键电路配置灵活,
15、软件结构简单,但每个按键必需占用一根I/O口线,然而,在按键较多时,I/O口线浪费较大,不宜采取。独立式按键软件常采取查询式结构。先逐位查询每根I/O口线输入状态,如某一根I/O口线输入为低电平,则可确定该I/O口线所对应按键已按下,然后,再转向该键功效处理程序。因为本程序较为简单,为了使用方便及节省资源,选择独立式键盘。下图为独立式键盘电路图: 图6、独立式键盘电路图2.6.3去抖动键盘编程中关键考虑去抖动问题。当测试表明有键被按下以后,紧接着就进行去抖动处理。因为键是机械开关结构,因为机械触点弹性及电压突跳等原因,在触点闭合或断开瞬间会出现电压抖动。为确保键识别正确,在电压信号抖动情况下不
16、能进行行状态输入。为此需进行去抖动处理。去抖动有硬件和软件两种方法。硬件方法就是加去抖动电路,从根本上避免抖动产生。软件消抖,在第一次检测到有键按下时,实施一段延时程序以后,再检测此按键,假如第二次检测结果仍为按下状态,CPU便确定此按键己按下,消除了抖动。2.7发音部分设计以下图所表示,发音电路是由蜂鸣器、三极管、上拉电阻组成。由三极管来驱动扬声器发音,同时加上拉电阻增强驱动电流,提升驱动能力。图7、独立式键盘电路图3.系统软件设计3.1系统分析3.1.1系统软件组成 (1)键盘扫描程序:检测是否有按键按下,有按键按下则统计按下键键值,并跳转至功效转移程序;无按键按下,则返回键盘扫描程序继续
17、检测。 (2)功效转移程序:对检测到按键值进行判定,是琴键则跳转至琴键处理程序,是功效键则跳转至对应功效程序,我们设计功效程序有两种,即音色调整功效和自动播放乐曲功效。 (3)琴键处理程序:依据检测到按键值,查询音调表,给计时器赋值,使发出对应频率声音。 (4)自动播放歌曲程序:检测到按键按下是自动播放歌曲功效键后实施该程序,电子琴会自动播放事先已经存放歌曲,歌曲播放完成以后自动返回至键盘扫描程序,继续等候是否有按键按下。3.1.2 系统总体功效步骤图图8、系统总体功效步骤图3.2 参数计算3.2.1发音原理若要产生音频脉冲,只要算出某一音频周期(1/频率),再将此周期除以2,即为半周期时间。
18、利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后反复计时再反相。就可在P1.0引脚上得到此频率脉冲。利用AT89C51内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不一样频率方法产生不一样音阶。3.2.2 计算举例比如,频率为523Hz,其周期T1/5231912s,所以只要令计数器计时956s/1s956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值和频率关系式是:Nfi2fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生频率。其计数初值T求法以下:T65536N6553
19、6fi2fr比如:设K65536,fi1MHz,求中音DO(261Hz)。T65536N65536fi2fr6553610000002fr65536500000/fr,中音DOT65536500000/52364580。3.2.3 计算结果(1)单片机12MHZ晶振,中音符和计数T0相关计数值如表所表示:音符频率(HZ)计数值(T值)音符频率(HZ)计数值(T值)低1DO26263628#4FA#74064860#1DO#27763737中5SO78464898低2RE29463835#5SO#83194934#2RE#31163928中6LA88064968低3MI33064021#6LA#
20、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中3MI659647
21、32#6LA#186565268中4FA69864820高7SI196765283采取查表程序进行查表时,能够为这个音符建立一个表格,有利于单片机经过查表方法来取得对应数据:低音019之间,中音在2039之间,高音在4059之间。用单片机播放音乐,或弹奏电子琴,实际上是根据特定频率,输出一连串方波。为了输出适宜方波,首先应该知道音符和频率关系。(2)音调数据表曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms调3/494ms调2/4250ms调2/4125ms上表中频率数值,有些过多,去掉不常见黑键频率,只是把白键对应数据存放在单片机中,即可满足绝大部分应用需
22、求。定义音调数据表程序以下: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高音区:1 2 3 4 5 6 7把这个数据表,放在程序中,需要播音时候,就从表中取出一个数据送到定时器,当定时器溢出中止时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率声音。3.3程
23、序设计3.3.1 判定音阶(高中低音)子程序 在软件设计中采取yinjie代表音阶,以下图所表示音阶Yinjie值高2中1低0初始化状态为中音(yinjie=1),电路中设计高、低两个音阶键。上电后,若无按键按下,则为中音模式。若音阶键被按下,则以下步骤图所表示,初始化后进行按键扫描,在高音键按下,若初始yinjie不为2,则另yinjie=2,进入高音工作模式,若初始yinjie为2,则对yinjie进行初始化,即另yinjie=1,重新进入进入中音工作模式,这么即实现了高音键切换高、中音方法转换。同理,用低音键实现中、低音切换。图9、判定音阶(高中低音)子程序3.3.2 播放子程序(包含自
24、动播放存放音乐和按键发音)本设计共两种播放模式,包含自动播放存放音乐和按键发音。上电后,首先开中止并设定定时器0为工作方法1,当自动播放键按下时,进入中止,依据乐谱在定义音频数组中查找对应音律,然后给定时器赋初值,即开始播放音乐。当DO、RE、MI、FA、SO、LA、SI七种音符键按下时,依据音阶值(如3.3.1中高中低对应)和音符值在定义音频数组中查找对应音律,然后给定时器赋初值,即按键发音。图10、播放子程序4. Proteus软件仿真4.1硬件调试硬件调试关键是针对单片机部分进行调试。在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作第一步,也是很关键一个步骤。在这部分
25、调试中关键使用工具是万用表,用来完成检测电路中是否存在断路或短路情况任务。注意焊点之间,确保焊点没有短接在一起,同时注意焊点美观,确保没有开路和短路现象出现。在确保硬件电路正常且无异常情况(断路或短路)情况下方可上电调试,上电调试目标是检验电路是否接错,同时还要检验原理是否正确,在此次设计中,上电调试关键是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。1、数码管LED电路调试:接通电源,随机按下按钮能够看到数码管显示数字。2、键盘单片机控制部分调试:上电后,随机按动键盘能够发觉各个按键对应音正确。4.2 软件调试调试关键方法和技巧:通常一个调试程序应该含有最少四种性能:跟踪、断点
26、、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功效过程,要使主程序和整个程序全部能平稳运行,各个模块子程序正确和平稳运行必不可少,所以在软件调试最初阶段就是把各个子程序模块进行分别调试。4.3 仿真结果(任举一例)图10、低音音符DO仿真图4.4 结果分析依据仿真结果可知,此次课程设计能够正确并根本完成设计要求。左侧数码管能够显示a、b、c三种结果,分别代表低音、中音和高音。右侧数码管能够显示1、2、3、4、5、6、7七个数字,分别代表DO、RE、MI、FA、SO、LA、SI七种音符。下面以4.3为例具体进行分析:当系统上电后,若按下低音键(图P3.6),,则选定工作方法为低音模
27、式,图中a即代表低音。P0口连接数码管段选端,右侧数码管显示1即代表DO。两位数码管即代表低音DO。5. 课程设计体会总体来说,此次单片机课程设计使我们收获良多,即使课程设计过程中碰到了很多困难和问题,但我们最终还是完成了设计任务及要求。具体来说能够分为以下几点:第一,不够细心,不够严谨(如因为粗心大意而焊错线);第二,因对书本理论掌握度不够造成编程出现错误;第三,硬件方面,刚开始有程序模块不能实现预期效果,对于有硬件,在实物制作过程中焊了比较多排线,同时对于整体各元器件布局全部有很高要求。不过在向同学请教,各方面全部有了不一样程度改善;第四,在做人方面,我认识到,不管做什么事情,只要你足够坚
28、强,有足够毅力和决心,有足够挑战困难勇气,就没有什么办不到。这次课程设计中,经过我们努力,在仿真软件和实物上全部实现了高、中、低21个音符发声和音乐自动播放,使我们有了一定成就感,也使我们深入熟悉和掌握了单片机内部结构和工作原理,了解了单片机应用系统设计基础方法和步骤, 掌握了单片机仿真软件Proteus使用方法和键盘、显示器在单片机控制系统中应用,同时也掌握了撰写课程设计汇报方法。总而言之,经过这次课程设计,我们全部清楚明白了自己能力有多深,想提升还得归于多锻炼,多动手,多向她人学习。参考文件【1】余发山、王福忠. 单片机原理及应用技术. 中国矿业大学出版社.6月第1 版【2】杨凌霄. 微型
29、计算机原理和应用,中国矿业大学出版社.8月第一版【3】康华光. 电子技术基础(数字部分),高等教育出版社.第五版【4】徐志军,伊廷辉等. EDA技术和PLD设计 人民邮电出版社, 2月第1版【5】李朝青. 单片机原理及接口技术M. 北京:北京航天航空大学出版色,.【6】胡汉才. 单片机原理及其接口技术M. 北京:清华大学出版社,.附1 源程序代码#include #define keyport P1#define uchar unsigned char#define uint unsigned intuchar high,low; /定时器预装值高8位和低8位sbit speak=P30;sb
30、it gao=P35;sbit di=P36;sbit zdbf=P37;uchar yinjie=1;uchar time;uchar n=0;uchar bo=0;uchar code fre2= 0x8c,0xf8,0x5b,0xf9,0x15,0xfa,0x67,0xfa,0x90,0xfb,0xae,0xfb,0x0c,0xfc, /低音 0x44,0xfc,0xac,0xfc,0x09,0xfd,0x34,0xfd,0x82,0xfd,0xc2,0xfd,0x06,0xfe, /中音0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1,0xfe,
31、0xe4,0xfe,0x03,0xff, /高音 ;void delay(uint );void ITimer0(void);/定时器初始化void key(void);void dtxs(int,int);void song()TH0=high;TL0=low;TR0=1;delay(time*240); void yinyue()uchar code hls= 5,2,2, 3,2,1, 5,2,1, 1,3,4, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 1,2,1, 2,2,1 ,3,2,2 ,2,2,1, 1,2,1 ,2,2,6, 5,2,2, 3,2,1, 5,2,
32、1, 1,3,3, 7,2,1, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,6, 6,2,2, 1,3,2, 1,3,4, 7,2,2, 6,2,1, 7,2,1, 1,3,4 ,6,2,1,7,2,1, 1,3,1 ,6,2,1, 6,2,1 ,5,2,1 ,3,2,1, 1,2,1, 2,2,6, 5,2,2, 3,2,1, 1,2,1, 1,3,3, 7,2,1, 6,2,2, 1,3,2, 5,2,4, 5,2,2, 2,2,1, 3,2,1, 4,2,3, 7,1,1, 1,2,6 ;uchar m;n=0
33、; while(n174) m=hlsn+7*(hlsn+1-1)-1;high=frem1;low=frem0;time=hlsn+2;n=n+3;song(); void main (void)uchar num;ITimer0();speak=0;while(1)key();switch(keyport)case 0xfe:num=1;break;case 0xfd:num=2;break;case 0xfb:num= 3;break; case 0xf7:num= 4;break; case 0xef:num= 5;break; case 0xdf:num= 6;break; case
34、 0xbf:num= 7;break; case 0x7f:num= 8;break; default:num= 0;break;if(num=0)TR0=0;speak=0;elsehigh=fre7*yinjie+num-11;low=fre7*yinjie+num-10;TR0=1;dtxs(yinjie,num);void ITimer0(void)TMOD |= 0x01; /使用模式1,16位定时器,使用|符号能够在使用多个定时器时不受影响 EA=1; /总中止打开ET0=1; /定时器中止打开TR0=1; /定时器开关打开void Timer0_isr(void) interru
35、pt 1TH0=high;TL0=low;speak=!speak;if(zdbf=0) delay(100);if(zdbf=0) bo+; if(bo/2=1)delay(100);if(n0;a-) for(b=110;b0;b-);void dtxs(k,l)/k是按键号,l是工作方法 char seg14=0x6f,0x0a,0xe3,0xcb,0x8e,0xcd, 0xed,0x0b,0xef,0xcf,0xaf,0xec,0x65,0xea; P2=0x01;/选择第一个数码管 P0=segl;/显示按键号 delay(4); P2=0x02;/选择第二个数码管 P0=segk+10;/显示工作方法 delay(4); 附2 系统原理图