《基于AT89S51单片机的电子琴设计.doc》由会员分享,可在线阅读,更多相关《基于AT89S51单片机的电子琴设计.doc(20页珍藏版)》请在三一办公上搜索。
1、基于AT89S51单片机的电子琴设计 摘 要:随着电子产业的发展和人民生活水平的提高,电子琴在人们生活中将扮演着越来越重要的角色,它改善人们的生活,给人们带来快乐和陶冶人的情操。本文设计是在充分了解音乐音阶基础上,以Atmel公司的AT89S51单片机作为核心控制器件,通过程序控制与键盘,运放电路,扬声器等电路设计成的电子琴。 关键词:AT89S51,电子琴,proteus仿真 Abstract: Along with the development of the electronics industry and the improvement of peoples living standa
2、rd, the keyboard will play a more and more important role in peoples life, improve peoples life, it brought people joy and edify ones sentiment. This article is designed on the basis of fully understand the music scales, taking Atmel AT89S51 as the core control device, through process control and ke
3、yboard, op-amp circuit, speakers circuit design, including the keyboard. Key words: AT89S51, electronic organ, proteus simulation1 绪论 随着人们生活水平的提高和电子产业的高速发展,越来越多的电子产品融入到人们的生活当中,电子琴也不例外,它作为一种陶冶人们情操,给人们生活增添乐趣的一种乐器,在生活中扮演比较重要的角色。目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化
4、过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域, 通过对单片机系统的学习和认识,我认识到通过AT89S51单片机p1输入到系统,可以完成此简易电子琴的任务。单片机结构简单、价格低廉、原理简单、 体积小,携带方便、性价比高,使用AT89S51单片机做电子琴是我的不二选择。2 总体方案本次设计重点主要是从系统结构框图来阐述了硬件的设计以及从方案上对比选择各个电路部分的元件,目的是使系统达到一
5、个低成本、高质量、稳定可靠的设计。包括硬件部分和软件部分。总体设计框图如图1所示 图1 总体设计框图2.1 控制模块选择方案 采用AT89C51单片机进行控制,由于AT89C51与MCS-51 兼容,具有4K字节可编程FLASH存储器;两个16位定时器/计数器 ;低功耗的闲置和掉电模式; 片内振荡器和时钟电路,使用方便,声音是有震动产生的,每个音符都对应了频率,利用定时计数器T0工作方式定时方式,通过改变TH0和TL0的值, 就可以产生不同频率的脉冲,例如像产生523Hz的脉冲,其周期1/523=1912us.因此只要让定时T0定时956us后,使P1.0取反,就可以在P1.0引脚输出一个频率
6、为52Hz的脉冲,若晶振的频率飞为6MHz,则计数值为956/2=478,而计数器的初值为65536-478H=65058=OFF22H,即TH0=OFFH,TL0=22H。这样每个音符都对应了一个T值。6MHz 的晶振各音符T值如图2-1音符频率T值音符频率T值126264582152365058229464685257865110333064778365965165434964819469865178539264898578465217644064968688065252749465030798865283图2-1 各音符T值图另一方面是每个音符的发音长度,各节拍与时间的设定如图2-2曲调
7、值1/4拍时间1/8拍时间调4/4125ms62ms调3/4187ms94ms调2/4250ms125ms图2-2 节拍与时间设定图2.2 按键选择方案 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键。3 硬件设计本次设计是根据系统设计结构图来对每个部分的电路进行分析和说明,重点讲述微控制器AT89S51、七段数码管显示模块、扬声器。3.1 AT89S51AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4k Bytes I
8、SP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80S51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。 AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89S51是一种带4K字节闪烁可编程可擦除只读存储器的单
9、片机。 图3-1 AT89S51引脚图主要功能特性1、4k Bytes Flash片内程序存储器;2、128 bytes的随机存取数据存储器(RAM);3、32个外部双向输入/输出(I/O)口;4、6个中断源;5、2个16位可编程定时器/计数器;6、2个全双工串行通信口;3.2 矩阵式键盘的识别和显示3.2.1矩阵式键盘的结构与工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别
10、越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。如图3-1图3-2 矩阵式键盘结构3.2.2按键识别方法 确定矩阵式键盘上何键被按下介绍一种“行扫描法”。 行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.判断键盘中有无键
11、按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。3.2.3键盘口必须具有的四个功能键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。 (1)去抖动:每个按键在按下或松开时
12、,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为520mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。 (2)防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和N键轮回两种方法。双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。 (3)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描
13、法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。 (4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。 3.3 七段数码管3.3.1七段数码管简介 (图3-3)a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定; 小数点:根据发光颜色决定c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 10
14、0mA上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。(共阳管与共阴管的判断方法:在公共端加高电平,段码端加低电平,看是否点亮二极管,若亮则为共阳管,不亮则为共阴管) 图3-3 七段数码管引脚图3.3.2数码管的分类 数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的
15、阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。3.4 功率放大器功率放大器工作原理:利用三极管的电流控制作用或场效应管的电压控制作用将电源的功率转换为按照输入信号变化的电流。因为声音是不同振幅和不同频率的波,即交流信号电流,三极管的集电极电流永远是基极电流的倍,是三极管的交流放大倍数,应用这一点,若将小信号注入基极,则集电极流过的电流会等于基极电流的倍,然后将这个信号用隔直电容隔离出来
16、,就得到了电流(或电压)是原先的倍的大信号,这现象成为三极管的放大作用。经过不断的电流放大,就完成了功率放大,简称功放。如图3-4所示。 图3-4 功率放大器原理图从能耗方面考虑,功放输出的功率最终是由电源提供的,例如收音机中功放耗电要占整机的2/3,因此要十分注意提高电路效率,即输出功率与耗电功率的比值。功放电路的输入信号已经几级放大,有足够强度,这会使功放管工作点大幅度移动,所以要求功放电路有较大的动态范围。功放管的工作点选择不当,输出会有严重失真。为得到需要的输出功率,电路须选集电极功耗足够大的三极管,功放管的工作电流和集电极电压也较高。电路设计使用中首先要考虑怎样充分地发挥三极管功能而
17、又不损坏三极管。由于电路中功放管工作状态常接近极限值,所以功放电流调整和使用时要小心,不宜超限使用。选择是非常重要的。 我选择的是LM386功放。LM386是专为低功耗电源设计的功率放大器集成电路,它的内建增益为20,透过Pin1和pin8脚位间电容的搭配,增益高达200。LM386可使用电池供电。其输入电压范围4V-12V,无动作是仅消耗4mA电流,且失真低。其LM386内部电路如图3-1图3-5 LM386内部电路图第一级为差分放大电路,T1和T3、T2和T4分别构成复合管,作为差分放大电路的放大管;T5和T6组成镜像电流源作为T1和T2的有源负载;T3和T4信号从管的基极输入,从T2管的
18、集电极输出,为双端输入单端输出差分电路。使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益。 第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数。 第三级中的T8和T9管复合成PNP型管,与NPN型管T10构成准互补输出级。二极管D1和D2为输出级提供合适的偏置电压,可以消除交越失真。 引脚2为反相输入端,引脚3为同相输入端。电路由单电源供电,故为OTL电路。输出端(引脚5)应外接输出电容后再接负载。 电阻R7从输出端连接到T2的发射极,形成反馈通路,并与R5和R6构成反馈网络,从而引入了深度电压串联负反馈,使整个电路具有稳定的电压增益。
19、 3.5基于单片机电子琴硬件电路图 电子琴的整体硬件电路,包括以上设计的各个分块电路。另外还包括矩阵按键电路,指示灯只是电路等,完整的电路如图3-2所示。图3-6 电路硬件图 4 软件设计基于单片机的电子琴硬件电路已经确定,要实现其功能,需要软件支持,电子琴的工作原理前文已论述,设计框图如图4所示 否 图4 程序流程图4.1 电子琴总体软件设计电子琴是高科技在音乐领域的一个代表,它是古典文化与现代文明的一个浓缩体。它不但可以帮助我们的音乐教师进行传统音乐文化的教育教学工作,而且由于它又具备现代音乐,特别是电子音乐、电脑音乐的基本结构、特征,因而使我们的教师在进行现代音乐、电子音乐、电脑音乐的教
20、学时,更直接、更简便。单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。电子琴基本工作流程如图4-1所示: 图4-1 基本工作流程图(1) 键盘扫描程序:检测是否有按键按下,有按键按下则记录按下键的键值,并跳转至功能转移程序;无按键按下,则返回键盘扫描程序继续检测。图4-2图4-2 键盘扫描程序流程图(2)功能转移程序:对检测到的按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序。
21、(3)琴键处理程序:根据检测到的按键值,查询音调表,给定时计时器赋值,使发出相应频率键的声音。 4.2电子琴按键软件设计 基于单片机电子琴的另一个重要功能就是要实现点击后发出类似钢琴那种管弦乐音。单片机控制核心通过拾取按键信息,判断是哪个按键按下,并对按键进行相应的出来,然后调动不同的频率输出,产生定时,去驱动蜂鸣器,实现电子弹奏功能。每一个音符对应一个频率。利用实验仪上提供的键盘,使数字1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调,用P1.0口发出音频脉冲,驱动喇叭。5 调试结果(如图5) 图5 电路连线图通过键盘的按键1、2、3、4、5、6、7键发出声音,当我按下1键是发
22、出声音duo。当按下键2时发出声音re,当按下键3时发出声音mi,当按下键4时发出声音fa,当按下键5时发出声音shuo,当按下键6时发出声音na,当按下键7时发出声音xi.达到本次设计的效果。6 结束语 通过这次的设计提高了我运用所学的专业基础知识来解决面临实际问题的能力,同时也提高了我查阅各种文献资料、设计手册、设计规范以及软件编程排版的水平。対单片机课程设计的整个流程和设计要求都有了深刻的认识,对以后的学习和设计都有很大的帮助。本论文是在我的导师牟琳老师的亲切关怀和悉心指导下完成的。从课题的选择到最终完成,牟琳老师都始终给予我细心的指导和不懈的支持。在此谨向牟琳老师致以诚挚的谢意和崇高的
23、敬意。参考文献 1 谭会生.张昌凡.EDA技术及应用(第二版)M.西安电子科技大学出版社,2009年9月.2徐志军. EDA技术与PLD设计M.人民邮电出版社, 2010年2月第1版.3赵鑫.数字电路设计M.北京机械工业出版社,2009年6月第一版.4苏家健、曹柏荣、汪志锋.单片机原理及应用技术M.高等教育出版社,2012年6月.5美Ashish Wilfred Meeta Gupta Kartik Bhatnagar著,刘永明,贺民译. php专业项目实例开发J. 水利水电出版社,2009.6于海生. 微型计算机控制技术选编M.清华大学出版社,2009.7李朝青. 单片机原理及接口技术M.
24、北京:北京航天航空大学出版色,2009.8胡汉才. 单片机原理及其接口技术M. 北京:清华大学出版社,2009.附录源程序代码 ;连线P1.0-VIN1 OUTBIT equ 0e101h 位控制口IN equ 0e103h 键盘入口Pulse equ 0PulseCNT equ 50hToneHigh equ 51hToneLow equ 52h LJMP STAR ;=MIAN: DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H;.MIAN1: DB 02H, 00H,0D0H;.;=INTS1: MOV DPTR,#0E100H DPTR=0E100H
25、MOV A,#03H A=03H MOVX DPTR,A DPTR=03H MOV TMOD,#01H TMOD=01H定时计数器 MOV IE,#82H IE=82H终端控制寄存器 INTS2: MOV A,#0FFH A=0FFH JZ INTS2 累加器为0时跳转到INTS2 LCALL KEY1 绝对调用子程序到KEY1 MOV R4,07H R4=07H MOV A,R4 A=07H CLR C 进位标志位C清0 SUBB A,#01H A=07H-01H JC INTS2 进位标志位为1 转到INTS2 MOV A,R4 A=07H SETB C 进位标志位C置1 SUBB A,#
26、07H A=07H-07H JNC INTS2 进位标志位为0时转移到INTS2 MOV A,R4 A=07H ADD A,ACC A=A+ACC ADD A,#0C0H A=A+0C0H MOV DPL,A DPL=A CLR A 累加A 清0 ADDC A,#00H A=A+00H(带进位) MOV DPH,A DPH=A CLR A 对累加器A清0 MOVC A,A+DPTR A=A+DPTR MOV R2,A R2=A MOV A,#01H A=01H MOVC A,A+DPTR A=A+DPTR MOV R3,A R3=A MOV A,R2 A=R2 MOV 09H,A 09H=A
27、MOV 08H,#00H 08H=00H MOV 0AH,#00H 0AH=00H MOV 0BH,R3 OBH=R3 MOV TH0,A TH0=A为计数器高位赋值 MOV TL0,0BH TL0=0BH为计数器低位赋值 SETB TR0 启动定时器 MOV 0CH,#0C8H 0CH=0C8H KEY: MOV A,0CH A=0CH JNZ KEY 累加器为1时转移到KEY CLR TR0 对TR0清0 TR0=0时停止工作 SJMP INTS2 段转移到INTS2 KEY1: MOV R7,#06H R7=06H MOV R6,#20H R6=20H KEY2: MOV A,R6 A=
28、20H CPL A 累加器A求反 MOV DPTR,#0E101H DPTR=0E101H MOVX DPTR,A DPTR=A MOV A,R6 A=20H CLR C 对C清0 RRC A 经过进位标志位的累加器循环右移 MOV R6,A R6=A MOV DPTR,#0E103H DPTR=0E103H MOVX A,DPTR A=DPTR CPL A 累加器A求反 ANL A,#0FH A=A&0FH MOV R5,A R5=A DEC R7 R7减1 MOV A,R7 A=R7 JZ KEY3 累加器为0转移到KEY3 MOV A,R5 A=R5 JZ KEY2 累加器为0转移到KE
29、Y2 KEY3: MOV A,R5 A=R5 JZ TONE3 为0则转移 MOV A,R7 A=R7 ADD A,ACC 加A到累加器ACC ADD A,ACC 加A到累加器ACC MOV R7,A 累加器内容传送到寄存器 MOV A,R5 寄存器内容传送到累加器 JNB ACC.1,TONE ACC.1不为1则跳转到TONE标号处为1则向下顺序执行。 INC R7 寄存器增1 SJMP TONE2 短跳转到当前TONE2所指位置;= TONE: MOV A,R5 A=R5 JNB ACC.2,TONE1 ACC.2不为1则跳转到TONE1标号处,为1则向下顺序执行 INC R7 寄存器增1
30、 INC R7 寄存器增1 SJMP TONE2 短跳转到当前TONE2所指位置TONE1: MOV A,R5 A=R5 JNB ACC.3,TONE2 ACC.3不为1则跳转到TONE2标号处,为1则向下顺序执行。 INC R7 寄存器增1 INC R7 寄存器增1 INC R7 寄存器增1TONE2: MOV DPTR,#0E101H DPTR=0E101H CLR A 对A清0 MOVX DPTR,A DPTR = A MOV A,R7 A=R7 MOV DPTR,#00AAH DPTR =00AAH MOVC A,A+DPTR 程序存储器代码字节传送到累加器 MOV R7,A R7=A
31、 RET ;=TONE3: MOV R7,#0FFH R7=0FFH RET ;=Q00AA: DB 00H, 01H, 04H, 07H, 0FH, 02H, 05H, 08HQ00B2: DB 0EH, 03H, 06H, 09H, 0DH, 0CH, 0BH, 0AHQ00BA: DB 10H, 10H, 10H, 10H, 10H, 10H, 10H, 10HQ00C2: DB 0FCH, 42H,0FCH,0AEH,0FDH, 0AH,0FDH, 35HQ00CA: DB 0FDH, 82H,0FDH,0C8H,0FEH, 05H,0C0H,0D0HQ00D2: DB 0C2H, 8CH, 85H, 09H, 8CH, 85H, 0BH, 8AHQ00DA: DB 0D2H, 8CH,0A2H, 00H, 92H, 90H,0B2H, 00HQ00E2: DB 15H, 0CH,0D0H,0D0H, 32H, 90H,0E1H, 01HQ00EA: DB 0E4H,0F0H, 90H,0E1H, 03H,0E0H,0F4H, 54HQ00F2: DB 0FH,0FFH, 22H;.;=STAR: MOV R0,#7FH R0=7FH