ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:556.85KB ,
资源ID:5224859      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5224859.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机简易电子琴.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机简易电子琴.docx

1、单片机简易电子琴基于AT89C52单片机的多音阶电子琴设计 一、 概述单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。随着社会的发展进步,音乐已经成为了我们生活中很重要的一部分。电子琴则是一种很常见的键盘乐器,是现代电子科技与音乐结合的产物,在现代音乐中扮演着重要的角色。单片机具有强大的控制功能和灵活的编程实现特性,早已溶入现代人们的日常生活中,成为不可替代的一部分。本文的主要内容是用

2、AT89C52单片机为核心控制元件,设计一个简易电子琴。二、 方案论证2.1系统基本组成本系统以AT80C52为主控核心,与键盘、喇叭等模块组成核心主控制模块,在主控模块上设有16个按键和喇叭。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成一些简单的音乐。2.2系统基本原理声音的频率范围约是几十到几千赫兹,若能利用程序来控制单片机某个口线不断地输出高低电平,则在改口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音。本系统就是按此原理设计,对于AT80C52而言要产生一定频率的方波一般是先将某口线输出高电平,延迟一段时间

3、后再输出低电平。通过改变延迟时间可以改变单片机的输出频率。单片机的延时主要有两种方式,即软件延时和使用定时/计数器延时。其中软件延时不是很精确,而电子琴电路由于每个音符的频率值要求比较严格,因此我们选用定时/计数器延时。单片机产生的音频脉冲信号没有足够的驱动能力,因此要在扬声器前加一放大电路,保证扬声器能产生所要实现的音符.电源电路复位电路音频放大电路AT89C52单片机扬声器晶振电路键盘电路 图2-1系统结构原理图三、 软件设计本软件设计关键是要实现一种由单片机控制的简单音乐发生器,它由16个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过喇叭将音乐播放出

4、来。3.1 行列式键盘识别为了降低成本采用非编码键盘。非编码键盘:键盘只简单地提供按键开关的行列矩阵。有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。 (1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键的质量相关,一般为520mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解决。 (2)防串键:防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。常用的方法有双键锁定和N键轮回两种

5、方法。双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。 (3)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。(4)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般

6、在内存区中建立一个键盘编码表,通过查表获得被按键的键码。TABLE:列 行12341低3低4低5低62低7中1中2中33中4中5中6中74高1高2高3高4 表3-1各个按键对应的音调 3.2 音乐发生3.2.1 音乐相关知识乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音商的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每

7、个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。3.2.2 如何用单片机实现音乐的频率 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。就可在P1.0引脚上得到此频率的脉冲。我们要为音符建立一个表格,单片机通过查表的方式来获得相应的数据。根据所建表我们可

8、以给4*4键盘每个按键赋予音阶对应的频率。单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表3-1所示表4-1 频率表音符频率(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#41

9、564331高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表4-2 曲调曲调值DELAY曲调值DELAY调4/4125ms调4/462ms调3/4187ms

10、调3/494ms调2/4250ms调2/4125ms对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。在这个程序中用到了两个定时/计数器来完成的。其中T0用来产生音符频率,T1用来产生音拍。图5-1 音乐发声程序框图3.3 系统总体功能流程图 该程序设计思路比较清晰既从开始到声明变量与函数再到读取按钮开关,判断是否按下,然后就是一个一个按钮的动作。其主程序流程图如下: 图5-2主程序流程图按键子程序流程图如下图6-1按键子程序流程图四、软件调试此次设计使用Keil C软件进行调试。调试软件介绍:Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开

11、发系统。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。程序调试界面如下图所示:图7-1 Keil C调试界面调试步骤:1) 打开Keil C软件,Project-New uVision Project,新建工程。File-New,新建并添加源程序文件,保存时使用扩展名.c。2) 在Project Workspace中,左击Source Group 1,选择Add Files

12、 to Group Source Group 1,然后选择相应源文件。3) 参数设置。选中项目文件,右击“Target 1”,在弹出的菜单中进行有关的参数设置。4) 编译。单击Project菜单下的Build Target或Rebuild all target files菜单,对源文件进行编译。当源文件有语法错误时,输出窗口会有提示。5) 仿真调试。单击Debug菜单下的Start/Stop Debug Session子菜单,单击Peripherals可打开单片机的I/O端口、定时器及中断等功能部件。单击View菜单下的子菜单,可打开反汇编、存储器、堆栈、代码等窗口,进行有关数据的观察。五 硬

13、件设计5.1主控核心本实例采用AT89C52作为主控核心。 图3-1 AT89C52的管脚图 AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编

14、程(S系列的才支持在线编程)。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。 主要引脚功能:6、RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;7、XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入;8、XTAL2(18):来自反向振荡器的输出;9、P1口(18):P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;10、ALE/PROG(30):当访问外部

15、存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲;11、PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现;5.2键盘模块键盘是最常用的单片机输入设备,大致可以分为独立连接式键盘和矩阵式。独立连接式键盘是最简单的键盘电路,每个键独立接入一根数据线。这种键盘结构简

16、单,使用方便,但是占用的I/O口线较多。矩阵式键盘由行线和列线组成,按键位于行列的交叉点上,行线通过上拉电阻接到高电平。行列式键盘可节省I/O口,适合按键数较多的场合。所以本例的4X4键盘采用行列式键盘。 图3-2 键盘输入模块通过行列键盘扫描的方法可获取键盘输入的键值,从而知道按下的是哪个键,具体过程如下:(1) 查询是否键按下。单片机向行扫描口输出全为“0”的扫描码,然后检测列线信号,只要有一列信号不为“1”,则表示有键按下,且不为“1”的列即是按下的键的所在列。(2) 查询按下键所在具体位置。用逐行扫描的方法确定按下键所在的行号。单片机先使第一行为“0”,其余行为“1”,接着进行信号检测

17、,若全为“1”则按下键不再第一行;然后是第二行为“0”,其余行为“1”,在进行列信号检测,若全为“1”,则按下键不再第二行;往下依次类推。(3) 将得到的行号列号译码。对于4X4行列式键盘,可用一个字节(8位)来对键盘编码。本例中,将直接的高4为表示列号,低4位表示行号。在键盘扫描过程中,应该注意以下几个问题。(1)按下按键时,按键会产生机械抖动,一般持续几到几十毫秒。在键盘扫描过程中,必须注意键盘的消抖处理。(2)在键盘扫描过程中,应防止按一次键而多个对应键输入的情况。在按键处理完毕后,还应检测按下的键是否松开,只有按下的键松开后程序才往下执行。这样每按一个键,只做一个键处理。表3-3 键盘

18、的按键与键值编码对应关系表按键列号行号键值编码1(低3MI)1111H(00010001)2(低4FA)1221H(00100001)3(低5SO)1341H(01000001)4(低6LA)1481H(10000001)5(低7SI)2112H(00010010)6(中1DO)2222H(00100010)7(中2RE)2342H(01000010)8(中3MI)2482H(10000010)9(中4FA)3114H(00010100)10(中5SO)3224H(00100100)11(中6LA)3344H(01000100)12(中7SI)3484H(10000100)13(高1DO)41

19、18H(00011000)14(高2RE)4228H(00101000)15(高3MI)4348H(01001000)16(高4FA)4488H(10001000)5.3音频放大模块图3-4LM386管脚图LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。LM386的外形和引脚的排列如图4所示。引脚2为反相输入端,3为同相输入端;引脚5为输出端;引脚6和4分别为电源和地;引脚1和8为电压增益设定端;使用时在引脚7和地之间接旁路电容,通常取10F。LM386的电源电压4-12V或5-18V(LM386N-4

20、);静态消耗电流为4mA;电压增益为20-200dB;在1、8脚开路时,带宽为300KHz;输入阻抗为50K;音频功率0.5W。尽管LM386的应用非常简单,但稍不注意,特别是器件上电、断电瞬间,甚至工作稳定后,一些操作(如插拔音频插头、旋音量调节钮)都会带来的瞬态冲击,在输出喇叭上会产生非常讨厌的噪声。要注意以下几点:1、 通过接在1脚、8脚间的电容(1脚接电容+极)来改变增益,断开时增益为20dB。因此用不到大的增益,电容就不要接。2、 PCB设计时,所有外围元件尽可能靠近LM386;地线尽可能粗一些;输入音频信号通路尽可能平行走线,输出亦如此。这是死理,不用多说了吧。3、 选好调节音量的

21、电位器,阻值不要太大,10K最合适,太大会影响音质。4、 尽可能采用双音频输入/输出。好处是:“”、“”输出端可以很好地抵消共模信号,故能有效抑制共模噪声。5、 第7脚(BYPASS)的旁路电容不可少!实际应用时,BYPASS端必须外接一个电解电容到地,起滤除噪声的作用。工作稳定后,该管脚电压值约等于电源电压的一半。增大这个电容的容值,减缓直流基准电压的上升、下降速度,有效抑制噪声。6、 减少输出耦合电容。减小该电容值,可使噪声能量冲击的幅度变小、宽度变窄;但也不能减得太小,太低会使截止频率(fc1/(2*RL*Cout))提高。7、 电源的处理。如果系统中有多组电源,由于电压不同、负载不同以

22、及并联的去耦电容不同,每组电源的上升、下降时间必有差异。一般选择上升相对较慢的电源作为LM386的Vs,但不要低于4V。图3-5电子琴音频功放电路原理图5.4复位电路当单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。本次设计采用手动复位电路。在单片机启动后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路

23、,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。图3-6复位电路5.5时钟电路时钟电路用于产生单片机工作所需的时钟信号。震荡有两种方式:外部震荡、内部震荡。在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器,如图7所示。电路中的电容一般取30pF左右,而

24、晶体的振荡频率范围通常为1.212MHz。本例采用12MHz的晶振。图3-7晶体振荡电路3.6电源电路 整个系统采用的电源电压只需+5V电压,所以,采用不可调的三端稳压器件,用常用的LM7805就可以满足系统电源的要求。LM7805三端继承稳压电源内部由基准电压回路、恒流源、过压保护、过流保护和短路保护等八个部分组成,具有低功耗、高效率、纹波系数小、输出电压稳定等优点。 下图中,旁路电容串接在7805稳压器1和3脚与地之间,可使输出电压Uo得到一定的提高。 图3-8电源电路六、硬件调试在上电前,先确保电路中不在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试

25、中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况等。注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。掌握调试的方法后,我先用万用表检测每个按键的引脚,把万用表的旋转按钮旋到电阻档,两笔头碰上对角线上的引脚显示“1”,按下去显示“0.00”,说明按键是好的。就这样检查完16个按键都是正常的,接着检查AT89C52相关管脚的电压,40脚和地之间是5.08V。在确保硬件电路正常,无异常情况(断路或短路)方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要键盘单片机控制部分、和音频转换电路硬件

26、调试。 通上电之后。喇叭一直响,说明有键按下,继续断电检查,发现其中两个按键管脚上的焊点误联在一起,还有一个按键反应不灵敏,更换后再通上电,随机按动键盘可以发现各个按键对应的音正确。列 行12341低3低4低5低62低7中1中2中33中4中5中6中74高1高2高3高4 表4-1各个按键对应的音调七、参考文献1.单片机课程设计指导杨居义 清华大学出版社2.51单片机C语言应用程序设计实例精讲 戴佳 戴卫恒 电子工业出版社3.8051单片机实践与应用 吴金戎 沈庆国 郭庭吉 清华大学出版社4.单片机实验与实践教程 万光毅 严义 邢春香 北航出版社5.单片机原理及应用技术 范力昱 电子工业出版社6数

27、字电路设计 赵鑫 蒋亮 齐兆群 机械工业出版社7C语言程序设计 谭浩强. 清华大学出版社8.单片机原理及接口技术 李朝青 北京航天航空大学出版社9模拟电子线路基础 吴运昌 华南理工大学出版社10单片机应用系统设计M 韩志军 机械工业出版社11.单片机C语言轻松入门 周坚 北航出版社九、课程小结课程设计是本科学习阶段很有价值的理论与实践相结合的机会,这次课程设计能这么顺利的完成,除了要感谢学校给我们这次实践的机会,我还要由衷的感谢一直陪伴在实验室的庄老师孜孜不倦的教诲、细心的指导和不懈的支持,以及同班同学的帮忙调试,让我学会了很多东西。这次比较系统的电子琴设计提高了我运用所学的专业基础知识来解决

28、面临实际问题的能力,让我见证了单片机应用的价值,同时也提高了我查阅各种文献资料、设计手册、设计规范以及软件编程的水平。八、附录附录A:原理图附录B:程序清单 KEYBUF EQU 30H ;KEYBUF定义为30H STH0 EQU 31H ;STH0 定义为,31H STL0 EQU 32H ;STL0 定义为,32H TEMP EQU 33H ;TEMP 定义为,33H ORG 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV TMOD,#01H ;设置定时器0的工作方式 SETB ET0 ;设置定时器中断 SETB EA ;开总中断WAIT: M

29、OV P3,#0FFH ;设置P3口为输入模式 CLR P3.4 ;清0 P3.4,按键的第一行扫描 MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY1 ; LCALL DELY10MS ;延时10ms MOV A,P3 ; ANL A,#0FH ; XRL A,#0FH ; JZ NOKEY1 ; MOV A,P3 ; ANL A,#0FH ; CJNE A,#0EH,NK1 ; MOV KEYBUF,#0 ; LJMP DK1 ;NK1: CJNE A,#0DH,NK2 ; K1键按下 MOV KEYBUF,#1 ; LJMP DK1 ;NK2: CJNE A,#0BH,NK3 ;K2键按下 MOV KEYBUF,#2 ; LJMP DK1 ;NK3: CJNE A,#07H,NK4 ;K3键按下 MOV KEYBUF,#3 ; LJMP DK1 ;NK4: NOP ;K4键按下 DK1: MOV A,KEYBUF MOV B,#2 MUL AB ;因为查表里都是字,所以乘2的查表数据 MOV TEMP,A ; MOV DPTR,#TABLE ; 指向表头 MOVC A,A+DPTR ; 查表 MOV STH0,A ;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1