1、CAD课程设计模板课程设计说明书题 目 简易电子琴的设计 姓 名 曹 美 丽 学 号 0910404035 专业年级 2009级通信工程4班 指导教师 张 涛 2011年12 月12日 摘 要本论文要设计的为基于单片机的简易电子琴,基本要求为能够发出1、2、3、4、5、6、7等七个音符即可。众所周知,由于一首音乐是由许多不同的音阶组合而成的,而每个音阶则对应着不同的频率,因此我们可以利用不同的频率来进行音阶的组合,即可产生美妙的音乐了。对于单片机来说,产生不同的频率非常方便,只要算出某一音频的周期,然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后,就将输出脉冲的
2、I/O反相,然后重复计时,此半周期再对I/O反相,即可在I/O脚上得到此频率的脉冲。因此我们可以利用单片机的定时器,使其工作在计数器模式MODE1下,改变计数值TH0及TL0来产生不同频率的信号。从而产生不同的音符1。关键词:音阶,频率,电子琴,单片机 AbstractThis thesis designed for simple keyboard, the basic requirement is to send 1, 2, 3, 4, 5, 6, 7 seven notes. Well-known, the music is made up by many different scales
3、, and each scale corresponds to different frequency, so we can use different frequency to make combination of scales, and then produce wonderful music. As for single-chip microcomputer, it is very convenient to produce different frequency, we just calculate an audio cycle, then this cycle divided by
4、 2, namely half cycle time, using timer to time the half cycle time. Whenever timing, it will output pulse I/O reverse phase, and repeat the timing, the half cycle again to the I/O reversed-phase, then can get this frequency pulse from the I/O feet. So we can use microcontroller timer to make it wor
5、k in the counter mode and generate different frequency signal. Thus produce different notes. Keywords: scales, frequency, thesis, single-chip microcomputer 1 绪 论1.1 论文特点及研究意义本论文设计的为电子琴,电子琴又称作电子键盘,属于电子乐器 (区别于电声乐器),发音音量可以自由调节。音域较宽,和声丰富,甚至可以演奏出一个管弦乐队的效果,表现力极其丰富。它还可模仿多种音色,甚至可以奏出常规乐器所无法发出的声音(如合唱声,风雨声,宇宙声
6、等)。另外,电子琴在独奏时,还可随意配上类似打击乐音响的节拍伴奏,适合于演奏节奏性较强的现代音乐。另外,电子琴还安装有效果器,如混响、回声、延音,震音轮和调制轮等多项功能装置,表达各种情绪时运用自如。本论文设计的电子琴虽是简易电子琴,功能和真正电子琴有不小差距,但本论文设计的电子琴是很多高档电子琴的基础,对进一步研究电子琴有很大的促进作用。本设计易懂、简练,所用器件常见,上网查询资料方便,电路模块具有通用性,非常适合广大电子爱好者制作。1.2 系统简介本系统主要由硬件电路和软件流程组成。硬件电路主要包括芯片AT89C51、和CM38、喇叭和按键等以及由它们组成的电路图,软件流程主要包括主程序流
7、程图和相关程序。本论文还对本设计用到的芯片AT89C51和CM38等做了一些介绍。 2 元器件介绍2.1 元器件的种类本设计要用到的元器件有芯片AT89C51、CM38、喇叭和按键、电阻、电容等。2.2 AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和
8、闪烁存储器组合在单个芯片中, AT89C51是一种高效微控制器。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图2.1所示图2.1 AT89C51外形管脚图主要特性:与MCS-51 兼容 4K字节可编程FLASH存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24MHzAT89C51管脚说明:VCC:供电电压。GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口
9、作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或
10、16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.
11、3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳
12、过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也
13、用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。2.3 四运放集成电路LM386LM386是四运放集成电路,采用8脚双列直插塑料封装,外形如图2.2所示。图2.2 LM386外形管脚图它的内部包含运算放大器,运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“V+”、“V-”为正、负电源端,“Vs”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端Vs的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vs的信号与该输入端的相位相同。由于LM386
14、运放电路具有电源电压范围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路中。正是因为如此,本论文才选用它。 3 硬件电路3.1 硬件电路图基于AT89C51芯片的简单电子琴的电路图4, 如图3.1。图3.1 硬件电路图3.2 电路各部分简要分析单片机P1口为输入接口,接有一组按键,共8个。这8个按键S1S8分别按顺序与单片机的P2口P1.0P1.7相接。单片机P3.6口与芯片LM386第3各管脚通过电阻R1相连。3.3 元件参数本论文根据实际要求所选定的元件参数如下:电阻R1为10k欧,输入电阻R2为470欧,C1、C3分别为10uf和104。LM386的第五个管脚接一个
15、电解电容C7(47uf)和电阻R3(10欧)、电容C4(473)并联驱动喇叭发声。单片机P3.6接入一个按键和一个分压电阻,组成放歌按键,来控制整个电路运行扩展功能(播放一段音乐)。C6、C5接一个晶振,作为控制反向震荡放大器的输入和输出,并且确定内部时钟的工作频率。单片机RESET端口接入一个复位电路,此部分由电解电容C2(此电容为去耦电容,防止其他信号引起的错位复位)和控制电阻R4共同组成,主要功能是当按下按键时给予芯片RESET端口一个高电平复位信号。3.4 单片机音符与单片机频率的关系本次设计中,单片机晶振为12MHz,那么定时器的技术周期为1 MHz,加入选择工作方式1,那T值便为T
16、=216x(x为THX、TLX的初值)。那么根据不同的频率计算出应赋给定时器的计算值,表3.1列出不同音符与单片机计数T0相关的计数值。表3.1 音符与单片机频率对应表 4软件流程4.1 设计思路与流程图本电子琴的设计我们采用的是设计7个音符,与键盘的7个按键一一对应,并且计算出每个音符对应的频率值。音符通过定时器T0产生,然后通过键盘不断的扫描,根据按键功能,将不同按键对应的频率信号发送到集成运放中放大,最后送给喇叭发出对应的音符以发出相应的声音。图4.1为流程示意图6 图4.1 流程示意图在主程序流程图中,T0初始化以后,首先要通过扫描键盘,判断是否有按键按下。若没有按键按下,则要继续扫描
17、,不断重复循环过程,直到发现按键按下,程序才能根据按键的功能,将相对应的音符T值装入到T0以后,T0开始启动。程序随后继续扫描按键,若按键保持按下状态,则T0继续保持工作状态,直到按键松开,T0停止工作,返回初始状态,等待下一次的扫描按键结果。图4.2为T0中断子程序图。 图4.2 T0中断子程序图当程序中断时,程序保存现场,并重装TH0、TL0的初值,然后将P1、0按位取反,重新送入P1、0,最后中断返回。4.2 程序设计#include sbit sp=P10; char th,tl,key;unsigned int code tab= /音频编码表63628,63836,64020,64
18、103,64260,64400,64524,64580,64694,64777,64820,64898,64968,65030,65058,65110,65164,65178,65217,65252,65283,; unsigned char code srg= /生日快乐音谱5,5,6,5,8,7,0,5,5,6,5,9,8,0,5,5,12,10,8,7,6,0,4,4,3,1,2,1,0;unsigned char code lzlf= /两只老虎音谱1,2,3,1,0,1,2,3,1,0,3,4,5,0,3,4,5,0,5,6,5,4,3,1,0,5,6,5,4,3,1,0,2,5,1
19、,0,2,5,1;dealy(unsigned int z) /延时while(z-);void main(void) /主函数 unsigned char i,go;TMOD=0x01; ET0=1; EA=1; /定时器初使化for(i=0;i28;i+) /播放生日快乐 key=srgi-1; if(srgi!=0) TR0=1; dealy(65530); else dealy(10000); TR0=0; dealy(30); dealy(65530);dealy(65530); /停顿 for(i=0;i39;i+) /播放两只老虎 key=lzlfi-1; if(lzlfi!=0
20、) TR0=1; dealy(65530); else dealy(10000); TR0=0; dealy(30); while(1) /键盘检测和产生音频 P3=0xfe; switch(P3) /检测第一排 case 0xee: dealy(20);if(P3=0xee)key=go+0;TR0=1;while(P3=0xee);TR0=0;break; case 0xde: dealy(20);if(P3=0xde)key=go+1;TR0=1;while(P3=0xde);TR0=0;break; case 0xbe: dealy(20);if(P3=0xbe)key=go+2;TR
21、0=1;while(P3=0xbe);TR0=0;break; case 0x7e: dealy(20);if(P3=0x7e)key=go+3;TR0=1;while(P3=0x7e);TR0=0;break; P3=0xfd; switch(P3) /检测第二排 case 0xed: dealy(20);if(P3=0xed)key=go+4;TR0=1;while(P3=0xed);TR0=0;break; case 0xdd: dealy(20);if(P3=0xdd)key=go+5;TR0=1;while(P3=0xdd);TR0=0;break; case 0xbd: dealy
22、(20);if(P3=0xbd)key=go+6;TR0=1;while(P3=0xbd);TR0=0;break; case 0x7d: dealy(20);if(P3=0x7d)go=7;while(P3=0x7d);break; P3=0xfb; switch(P3) /检测第三排 case 0xeb: dealy(20);if(P3=0xeb)key=go+7;TR0=1;while(P3=0xeb);TR0=0;break; case 0xdb: dealy(20);if(P3=0xdb)key=go+8;TR0=1;while(P3=0xdb);TR0=0;break; case
23、0xbb: dealy(20);if(P3=0xbb)key=go+9;TR0=1;while(P3=0xbb);TR0=0;break; case 0x7b: dealy(20);if(P3=0x7b)key=go+10;TR0=1;while(P3=0x7b);TR0=0;break; P3=0xf7; switch(P3) /检测第四排 case 0xe7: dealy(20);if(P3=0xe7)key=go+11;TR0=1;while(P3=0xe7);TR0=0;break; case 0xd7: dealy(20);if(P3=0xd7)key=go+12;TR0=1;whi
24、le(P3=0xd7);TR0=0;break; case 0xb7: dealy(20);if(P3=0xb7)key=go+13;TR0=1;while(P3=0xb7);TR0=0;break; case 0x77: dealy(20);if(P3=0x77)go=0;while(P3=0x77);break; void t0(void) interrupt 1 /定时器中断函数TH0=tabkey/256;TL0=tabkey%256;sp=sp; 5 制作与调试方法本电子琴的制作比较简单,大的方面主要分为两步,第一步是绘制PCB板并制成电路,第二步是写程序,驱动程序发声。调试也很简单
25、,共有八个按键,按下不同按键便会产生相对应的声音。具体步骤如下:1.由设计要求选择合适元器件设计并绘制出电路图;实验原理图如图(3.1)所示,在protel99里根据原理图放置元器件并相应的连好线,此部分比较简单。首先新建一个设计并保存到自己的目录下,然后再新建一个.sch和.pcb的文件。 然后再打开.sch文件,根据原理图,摆放好元器件并连好线。2.绘制元器件的元件符号库、封装库;对于protel99里没有的元件,自己根据相应的要求绘制出来,首先新建一个sch.library文件并在其中绘制好原理图,例如CM38。然后再添加到.sch文件的原件库中。对于protel99里没有的封装,自己也
26、要根据相应的要求绘制出来,首先新建一个pcb.library的文件并在其中按要求绘制好相应的封装。然后一样的添加到.pcb文件的原件库中。当所有的线都原理图连接好了后,对原理图使用“电气规则检查”,如果电路图没有绘制错误,就可以对各元件添加封装了。封装添加好后,点击设计创建网络表,再在Pcb文件中添加网络表,生成pcb图。3.PCB设计时的走线、布局技巧;生成pcb图后就是走线了,首先要摆放好器件,尽量使pcb图摆放紧凑,美观以及跳线尽量少,摆放过程中可以结合原理图及元器件的原理来放置,这样走线是就没那么复杂。最后我们在底层布线,电源线和接地线一定要粗,其他线路也是越粗越好,但一般连线的宽度是
27、0.8mm,线太细在腐蚀的时候就会断线。同时在跳线处要放置焊盘。PCB电路如下: 4使用热转印方式制作印制电路板; PCB走线、布局好后,把pcb电路图打印出来,并用热转印方式把pcb图转印到板子上。使用FeCl3或类似溶液腐蚀电路板;电路图转印好后,把板子放到FeCl3溶液中对其进行腐蚀。使用高速对印制电路板打;板子腐蚀好后,用电钻对焊盘打孔,电钻使用0.8mm或1.0mm的针孔,针孔应大些,不然焊元件的时候针脚会插不进去。元器件的焊接;板子只好后就是焊接元器件了,把元器件插在板子上相应的地方,注意有些元器件的正负极不要插反,芯片不要插反,不然上电后会把板子给烧掉。在焊接的时候要注意技巧,不
28、要有虚焊、漏焊的地方。使用酒精松香溶液保护电路板防止氧化; 6 总 结通过本次论文设计,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。功能上达标,硬件设施基本合乎要求,软件设计可以配合硬件实现其功能,达到设计预期。此次PCB板的制作给了我难忘的回忆,虽然以前也自己制作过一些板子,但本次却是我第一次从头到尾完成最认真的一次。在制作过程中出现了很多问题同时也掌握了一些技巧。以下是我在此次制作过中得到的一些技巧和方法:1在绘制原理图是,元器件一定要选对,有些原理图看似和要求的原理图很像,但稍微一个管脚不同制出来的板子就会出错。同时在连线的时候有很多同学由于不熟练,使得其中有很多
29、的交叉线,出现一些节点,但他们就只是单单的把节点删掉,在元器件检查的时候出现了很多的错,甚至都找不出原因,不得不重新再绘制。2在绘制PCB图时首先要摆放好器件,尽量使pcb图摆放紧凑,美观以及跳线尽量少,摆放过程中可以结合原理图及元器件的原理来放置,这样走线是就没那么复杂。对于本设计,在PCB走线时可以相应的对按键和89C51的连线顺序做一些该变,这样PCB连线看着没那么复杂同时连线时可以少掉很多不必要的跳线,看起来更清晰、明了。由于89C51的那些管脚都是输入管脚,功能是一样的,所以对其改变对实验结果不会有什么影响。在布线时,一定要选择好板层,此次我们制作的是单层板,应选择底层布线。很多同学
30、对于密密麻麻的线不知从何下手,可以把原理图分成几个小部分,然后先把每个小部分连接好,再放到一起来连接,这样不仅更容易连接、用时也更少。同时电源线和接地线一定要粗,其他线路也是越粗越好,但一般连线的宽度是0.8mm,线太细在腐蚀的时候就会断线,热转印时也会很难转印到板子上,难度更大。在跳线处要放置焊盘。每个元器件的焊盘应该也要重新改过,一般x为2.5mm,y为2.0mm,不然在打孔的时候会将焊盘全部打坏,不利于焊接。3在热转印时,一定要仔细,最好一次就全部转印上,否则印上去的线会不清晰甚至断线、移位。当然如果不熟练可以使用热转印机自动转印。这样用FeCl3腐蚀后的板子会更加漂亮、清晰,同时也不容易出错。4在打孔的时候,要是电钻的针对准孔,打齐,特别是对芯片的焊盘打孔时尤其要注意,如果孔没打齐在插芯片时会插不进甚至会把管脚弄断。同时,最重要的时注意安全,在打孔时很容易把针弄断伤到自己,所以一定要注意安全不要把眼睛对着针。5在焊接元器件时,首先,要把元器件插好,对别是二极管,正负极一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1