基于单片机的电子琴设计毕业设计.docx
目 录第一部分 设计任务与调研1第二部分 设计说明2第三部分 设计成果4第四部分 结束语15第五部分 致谢28第六部分 参考文献29第一部分 设计任务与调研 1毕业设计的主要任务1.1设计的主要任务本设计一个基于单片机的简易电子琴。我们对于电子琴如何实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇。设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。1.2设计的思路、方法设计思路:用AT89S51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。通过中断来产生不同频率的周期方波信号,送扬声器发出声音。设计方法: 通过市场调研和网络搜索,分析借鉴市场上已有的产品,列出几种可行方案进行对比分析,最后选择一种确实可行的方案,即确定出系统框图、控制方式、电路形式等,同时学习并掌握PCB板图的设计要求和方法、数码管的使用要求,为单片机的整体设计提供保证。1.3调研的目的和总结主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。 电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从低So到高DO等16个音,从而可以用来弹奏喜欢的乐曲。单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有7个按键和扬声器。本系统是简易电子琴的设计,按下键盘中的按键会使数码管显示当前按键,扬声器播放器对应的音符。通过设计本系统可了解单片机的基本功能。第二部分 设计说明1.方案论证1.1.方案的选定方案一:用可控硅制作电子琴。将220V交流电经变压器降压,再经过整流、滤波,获得+13.5V直流电压。将单向可控硅SCR和电阻、电容组成驰张振荡器电路。但该设计方案制作成本高且复杂。方案二: 采用AT89C51单片机进行控制,由于AT89C51不具备ISP功能,因此ATMEL公司已经停产在市面上已经不常见,况且其ROM只有4K在系统将来升级方面没有潜力。方案三:采用AT89S52单片机进行控制,由于其性价比高,完全满足了本作品智能化的要求,它的内部程序存储空间达到8K,使软件设计有足够的内部使用空间并且方便日后系统升级,使用方便,抗干扰性能提高。鉴于上述对比与分析,本设计采用方案三 1.2按键选择方案 方案一 利用I/O口直接连接的独立式键盘,每键都有相应的I/O口对应,编程容易控制,实现方便;但拒于IO口有限,能接的按键不能太多,而本系统需用户根据需要调整的参数较多,用独立按键会使操作变得复杂。 方案二 利用PA口接成4*4键盘。优点:利用8个IO口得到16个按键,可使操作介界变得简单,操作也方便;缺点:软件处理比独立按键复杂。 通过比较,方案二为最佳方案。2.方案的理论分析2.1系统组成及总体框图 硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图。 该设计要实现一种由单片机控制的电子琴,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号。该设计具有11个音节的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。用单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大电路。 使用国家半导体公司的低压音频功率放大器LM386来实现音频功放电路。发生模块,键盘模块,及LED显示模块连接如下:1.把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;2.把“单片机系统”区域中的P3.0P3.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1C4R1R4端口上;3.把“单片机系统”区域中的P0.0/AD0P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个ah端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,P0.7/AD7对应着h。图2-1 电子琴电路2.2 如何用单片机实现音乐的节拍乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低,声音就低,不同音调的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。 音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。 一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。 除了音符以外,节拍也是音乐的关键组成部分。节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果1/4拍的延时是0.4秒,则1拍的延时是1.6秒,只要知道1/4拍的延时时间,其余的节拍延时时间就是它的陪数。如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。音乐的音拍,一个节拍为单位。2.3 主要芯片简介本次设计使用AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚(引脚图如图1-2所示),4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 图2-2 AT89S51管脚图2.4 元件介绍 AT89S52 功能特性:AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O口线,看门狗定时器,2 个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止1。 主要性能:与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz33Hz 、三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符2。 管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当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口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址5 “1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。2.5 LM386 LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地为参考同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中4。 LM386的封装形式有塑封8引线双列直插式和贴片式。LM386特性:静态功耗低,约为4mA,可用于电池供电;工作电压范围宽,4V-12V或5V-18V;外围元件少;电压增益可调,20-200;低失真度。LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。图2-3 LM386LM386内部电路原理图如图1-3所示。与通用型集成运放相类似,它是一个三级放大电路. 第一级为差分放大电路,T1和T3、T2和T4分别构成复合管,作为差分放大电路的放大管;T5和T6组成镜像电流源作为T1和T2的有源负载;T3和T4信号从管的基极输入,从T2管的集电极输出,为双端输入单端输出差分电路。使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益 第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数。 第三级中的T8和T9管复合成PNP型管,与NPN型管T10构成准互补输出级。二极管D1和D2为输出级提供合适的偏置电压,可以消除交越失真。 引脚2为反相输入端,引脚3为同相输入端。电路由单电源供电,故为OTL电路。输出端(引脚5)应外接输出电容后再接负载。 电阻R7从输出端连接到T2的发射极,形成反馈通路,并与R5和R6构成反馈网络,从而引入了深度电压串联负反馈,使整个电路具有稳定的电压增益。数码管(如图2-5所示)使用条件: 图2-5 7段数码管a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA上面这只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。数码管使用注意事项说明:(1)数码管表面不要用手触摸,不要用手去弄引角;(2)焊接温度:260度;焊接时间:5S(3)表面有保护膜的产品,可以在使用前撕下来。LED数码显示原理: 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。 LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码表(如表2-7所示)表2-1 字形码表“0”3FH“8”7FH“1”06H“9”6FH“2”5BH“A”77H“3”4FH“b”7CH“4”66H“C”39H“5”6DH“d”5EH“6”7DH“E”79H“7”07H“F”71H 由于显示的数字09的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。这样我们按着数字09的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLEDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH。2.6音频处理模块电路原理 由于单片机驱动能力不够,在处理音符信号时,需加功率放大装置,因LM386芯片具有低功耗、高增益的特点,这合适单片机低功耗输出,所以加装LM386音频信号放大器对信号进行放大。 图2-6 音频处理模块电路原理图3.电源模块电路原理 由于本次设计的芯片的工作电压都为5V,为了排除因为电压不稳定或者不准确影响电路的工作和软件的调试,本次设计单独用LM7805设计了一个输出5V的电压的电路,如图3-11所示,其中J0为一变压器插排接口,输出电压在7.5V,为交流电压,经过整流桥进行整流,电容滤波,再经过LM7805稳压后,得到本次设计所需的5V直流电源。 图2-7 电源模块电路原理图 第三部分 设计成果3.1程序框图 图3-1 音乐发声程序框图TD初始延时100毫秒Y是休止符FFH表头地址传送音符常数 R6查表取常数 取节拍常数 R7启动TO计数N是结束符0OHYP14求反校R6常数延时恢复初始条件,E清0N延时1S,两循环节拍时间到T1停止技术,中断计数器,H清0,B加1图3-2 音乐发声程序框图3.2仿真图单片机:P0 口对应数码管编码输出端; P1.0 口做音乐信号输出端; P2 口做键盘扫描部分输入输出端。键盘扫描:将16位开关通过矩阵连接,接出来四端接输入口(P0.4P0.7)用于键盘情况的输入,另外四端接输出口(P0.0P0.3)用于给键盘扫描信号。数码管显示:在使用时一要接上拉电阻(这是有单片机P0口的物理特性决定的),二是要加限流电阻以使流进单片机的小于单片机所能承受的电流。音乐处理:LM386将单片机P1.0口送过来的信号进行20倍的功率放大并送扬声器进行音乐的播出。 图3-3 电子琴仿真图#include<reg52.h> #define uint unsigned int #define uchar unsigned char#define rate 15/脉冲数与里程数的比例 sbit P20=P20; sbit P21=P21; sbit P22=P22; /接 74 LS 138 控制 数码管 sbit pulse_in=P10;bit pulse=1;bit dispflag;uchar num,temp;bit begin_signal;/ 开始标志 bit s_or_d;/单程 还是往返 标志 uint times; / 定时次数 uint pulse_counter;uint record;uint s_temple;uint s,m; /里程数 s 和 金额 m uint t; /等待时间 char baiwei,shiwei,gewei,xiaoshu; char keynum; /键盘 的键值 uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40; /0f and '-'的字型码(共阴) /声明 区 void delay(uint x); void init();void divide(uint counter);void select(bit a,bit b,bit c);void debouncer(void);uchar keyscan(void);void delay(uint x)/延时 x ms .uint i,j;for(i=0;i<x;i+)for(j=0;j<=150;j+);void init() / 定时器初始化 TMOD=0x01;TH0=(65536-25000)/256;/ timer=1/40sTL0=(65536-25000)%256;EA=1;ET0=1;TR0=1;void divide(uint counter)if(dispflag=0) P0=0x00;counter=counter*10/rate;xiaoshu=counter%10;gewei=(counter/10)%10;shiwei=(counter/100)%10;baiwei=(counter/1000)%10;if(counter<=30)m=80;elseif(s_or_d=0)m=80+2*(counter-30)+t/300;else m=80+1.5*(counter-30)+t/300;select(1,1,0);/显示里程数目 P0=tablexiaoshu;delay(2); select(0,1,0);P0=tablegewei|0x80;delay(2);select(1,0,0);P0=tableshiwei;delay(2);select(0,0,0);P0=tablebaiwei;delay(2);xiaoshu=m%10;gewei=(m/10)%10;shiwei=(m/100)%10;baiwei=(m/1000)%10;select(1,1,1); /显示 金额数目 P0=tablexiaoshu;delay(2); select(0,1,1);P0=tablegewei|0x80;delay(2);select(1,0,1);P0=tableshiwei;delay(2);select(0,0,1);P0=tablebaiwei;delay(2); else P0=0x00;xiaoshu=t%10;gewei=(t/10)%10;shiwei=(t/100)%10;baiwei=(t/1000)%10;select(1,1,0);/显示 等待时间 P0=tablexiaoshu;delay(2); select(0,1,0);P0=tablegewei;delay(2);select(1,0,0);P0=tableshiwei;delay(2);select(0,0,0);P0=tablebaiwei;delay(2); void timer0() interrupt 1TH0=(65536-25000)/256;TL0=(65536-25000)%256;if(begin_signal=1)if(pulse_in!=pulse)delay(10);if(pulse_in!=pulse)pulse=pulse;pulse_counter+;if (times=39)/1 s timer completedtimes=0;if(pulse_counter-record)<5)/如果 每秒 脉冲小于 5 , 则等待时间 增加 t+;record=pulse_counter;times+;/s_temple=pulse_counter/2;/divide(s_temple);void select(bit a,bit b,bit c)P20=a;P21=b;P22=c;void debouncer(void)/ 防抖动 程序 uint i;for(i=0;i<4800;i+);uchar keyscan() P3=0x7f; temp=P3; temp=temp&0x0f;while(temp!=0x0f) delay(10); temp=P3;temp=temp&0x0f; while(temp!=0x0f) temp=P3;switch(temp)case 0x7e:num=1;break;case 0x7d:num=2;break;case 0x7b:num=3;break;case 0x77:num=4;break;while(temp!=0x0f)temp=P3;temp=temp&0x0f; P3=0xbf; temp=P3; temp=temp&0x0f;while(temp!=0x0f)delay(10);temp=P3;temp=temp&0x0f;while(temp!=0x0f)temp=P3; switch(temp)case 0xbe:num=5;break;case 0xbd:num=6;break;case 0xbb:num=7;break;case 0xb7:num=8;break;while(temp!=0x0f)temp=P3;temp=temp&0x0f; P3=0xdf; temp=P3; temp=temp&0x0f;while(temp!=0x0f)delay(10);temp=P3;temp=temp&0x0f;while(temp!=0x0f)temp=P3; switch(temp)case 0xde:num=9;break;case 0xdd:num=10;break;case 0xdb:num=11;break;case 0xd7:num=12;break;while(temp!=0x0f)temp=P3;temp=temp&0x0f; P3=0xef; temp=P3; temp=temp&0x0f;while(temp!=0x0f)delay(10);temp=P3;temp=temp&0x0f;while(temp!=0x0f)temp=P3; switch(temp)case 0xee:num=13;break;case 0xed:num=14;break;case 0xeb:num=15; break;case 0xe7:num=16;break;while(temp!=0x0f)temp=P3;temp=temp&0x0f;return num;void singleway(void)/ 单程 开始 函数 begin_signal=1;s_or_d=0;void doubleway(void)/往返 开始 函数 begin_signal=1;s_or_d=1;void pause(void)/暂停 函数 begin_signal=0;void clear(void)/ 清除 函数 pulse_counter=0;t=0;void check(void)/ 查询 函数 dispflag=1;void check2(void)/ 查询 函数 dispflag=0;void sentence(void)/ 判定键盘值 if(keynum!=0)switch(keynum)case 1:singleway();break;case 2:doubleway();break;case 3:pause();break;case 4:clear();break;case 5:check();break;case 6:check2();break;main()init();while (1)divide(pulse_counter);keynum=keyscan();sentence();第四部分 结束语将程序烧入芯片,调试成功后,可任意弹奏自己想要的旋律。本研究通过制作电子琴,将几个模块很好的融合起来,对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。说明一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,于是我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可,然后我们利用功放电路来将音乐声音放大,同时通过显示模块来确知自己所弹的音符。通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。首先在毕业设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了单片机的发展现状以及未来的发展趋势,认识到目前单片机方面的各种各样的发展,和它们之间的竞争。了解了单片机方面的先进技术,这些都为我的未来的学习指明了方向。第五部分 致谢 这次毕业设计得到了很多老师、同学和同事的帮助,其中我的导师对我的关心和支持尤为重要,每次遇到难题,我最先做的就是向老师寻求帮助,而李老师每次不管忙或闲,总会抽空来找我面谈,然后一起商量解决的办法。 另外,感谢校方给予我这样一次机会,能够独立地完成一个课题,并在这个过程当中,给予我们各种方便,使我们在即将离校的最后一段时间里,能够更多学习一些实践应用知识,增强了我们实践操作和动手应用能力,提高了独立思考的能力。再一次对我的母校表示感谢。感谢在整个毕业设计期间和我密切合作的同学,和曾经在各个方面给予过我帮助的伙伴们,在大学生活即将结束的最后的日子里,我们再一次演绎了团结合作的童话,把一个庞大的,从来没有上手的课题,圆满地完成了。 正是因为有了你们的帮助,才让我不仅学到了本次课题所涉及的新知识,更让我感觉到了知识以外的东西,那就是团结的力量。最后,感谢所有在这次毕业设计中给予过我帮助的人。 对上述朋友,再一次真诚地表示感谢! 第六部分 参考文献【1】机电设备电气控制与PLC. 夏天天. 中南大学出版社. 2015年3月. P125-130【2】单片机课程设计实训教材M陈明荧.北京:清华大学出版社,2003年9月【3】单片机原理应用与实践M徐新艳北京:高等教育出版社,2005年3月【4】单片机实践与应用M吴金戌、沈庆阳、郭庭吉第一版北京:清华大学出版社,2002年【5】 微型计算机原理与接口技术M冯博琴.清华大学出版社,2004【6】基于CPLD的电子琴研究与设计J.黄鑫,马善农,赵永科.科技广34