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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

例说51单片机课程设计.docx

1、例说51单片机课程设计基于STC89C52单片机简易电子琴设计摘要:随着电子技术的发展,电子技术正在逐渐改善着人们的学习、生活、工作。电子技术与音乐的结合的不断开发,给人们的生活带来无限乐趣,由此而产生的电子琴在这种形势下,因其体积小、易于携带、经济适用,对初学者,尤其对识谱的人来说是很容易弹奏的,一首简单的曲子灵感好的人甚至不用很多的练习和教师的指导就能很快的弹奏出来。本设计是基于STC89C52单片机一款简易的电子琴,以STC89C52单片机作为系统的核心控制部分,采用4*4距阵键盘,鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从低So到高DO等16个音。通过制作硬件电路和软件的

2、设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、点歌、存储及显示功能。设计中应用中断系统和定时/计数原理控制演奏器发声, 对音乐发生所必须确定的音符和节拍分别用C语言程序实现。可以用它来弹奏和播放乐曲,特点是设计思路简单、清晰,成本低。关键词:单片机、电子琴、STC89C52引 言单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。随着社会的发展进步,音乐已经成为了我们生活

3、中很重要的一部分。电子琴则是一种很常见的键盘乐器,是现代电子科技与音乐结合的产物,在现代音乐中扮演着重要的角色。单片机具有强大的控制功能和灵活的编程实现特性,早已溶入现代人们的日常生活中,成为不可替代的一部分。本文的主要内容是用STC89C52单片机为核心控制元件,设计一个简易电子琴。一、设计计划利用4*4矩阵键盘能够发出16个不同的音调,并且可以播放完整的音乐二、设计方案2.1 方案论证2.1.1系统基本组成本系统以STC89C52为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键、扬声器。2.1.2系统基本原理声音的频率范围约是几十到几千赫兹,若能利用程序来控制

4、单片机某个口线不断地输出高低电平,则在改口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音。本系统就是按此原理设计,对于STC89C52而言要产生一定频率的方波一般是先将某口线输出高电平,延迟一段时间后再输出低电平。通过改变延迟时间可以改变单片机的输出频率。单片机的延时主要有两种方式,即软件延时和使用定时/计数器延时。其中软件延时不是很精确,而电子琴电路由于每个音符的频率值要求比较严格,因此我们选用定时/计数器延时。单片机产生的音频脉冲信号没有足够的驱动能力,因此要在扬声器前加一放大电路,保证扬声器能产生所要实现的音符。 图1 系统原理框图2.1.3音乐相关知识乐音听起来有的

5、高、有的低,这就叫做音高。音高是由发声物体振动频率的高低决定的,频率高声音就高,频率低声音就低。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同的频率组合,加以拍数对应的延时,构成音乐。如果单片机要自己播放音乐就必须考虑到节拍的设置。由于本例中是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。因此,我们只需弄清楚音乐中的音符和对应的频率。要产生相应的音频脉冲,只需要计算出某音频的周期,再除以2。利用计数器计时半周期,计满时使P2.0反向,然后重复计时再反向。本例中,单片机工作在12MHz

6、时钟,使用定时器/计数器T0,工作模式为1,改变计数初值TH0、TL0就可产生不同频率的脉冲信号。2.2硬件设计2.2.1主控核心本实例采用STC89C52作为主控核心。 图2 STC89C52管脚图STC89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16

7、位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52可以按照常规方法进行编程,并可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。 STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。 主要引脚功能:1.RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;2.XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入;3.XTAL2(18):来自反向振荡器的输出;4.P1口(18):P1口是从内部提供上拉电阻器的8位双向I/O口

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

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

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

11、有按下的键松开后程序才往下执行。这样每按一个键,只做一个键处理。2.2.3音频功放模块图4 LM386管脚图LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。LM386的外形和引脚的排列如图4所示。引脚2为反相输入端,3为同相输入端;引脚5为输出端;引脚6和4分别为电源和地;引脚1和8为电压增益设定端;使用时在引脚7和地之间接旁路电容,通常取10F。LM386的电源电压4-12V或5-18V(LM386N-4);静态消耗电流为4mA;电压增益为20-200dB;在1、8脚开路时,带宽为300KHz;输入阻

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

13、出端可以很好地抵消共模信号,故能有效抑制共模噪声。5、第7脚(BYPASS)的旁路电容不可少!实际应用时,BYPASS端必须外接一个电解电容到地,起滤除噪声的作用。工作稳定后,该管脚电压值约等于电源电压的一半。增大这个电容的容值,减缓直流基准电压的上升、下降速度,有效抑制噪声。6、减少输出耦合电容。减小该电容值,可使噪声能量冲击的幅度变小、宽度变窄;但也不能减得太小,太低会使截止频率(fc1/(2*RL*Cout))提高。7、电源的处理。如果系统中有多组电源,由于电压不同、负载不同以及并联的去耦电容不同,每组电源的上升、下降时间必有差异。一般选择上升相对较慢的电源作为LM386的Vs,但不要低

14、于4V。图5 简易电子琴音频功放电路原理图2.2.4 复位电路当单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。本次设计采用手动复位电路。图6 复位电路2.2.5 时钟电路时钟电路用于产生单片机工作所需的时钟信号。震荡有两种方式:外部震荡、内部震荡。在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定

15、的自激振荡器,如图7所示。电路中的电容一般取30pF左右,而晶体的振荡频率范围通常为1.212MHz。本例采用12MHz的晶振。图7 晶体振荡电路图8 单片机最小系统电路2.3 软件设计目前普通低档单片机的编程中,一般会用汇编和C。汇编语言非常接近计算机的硬件,因此,它可以最大限度地发挥计算机硬件的性能。用汇编写的程序执行速度相当快,适用于实时性要求较高的场合。但是用汇编写的程序比较庞大,编写速度也比较慢,而且汇编程序的移植性较差。C语言作为高级语言,运用灵活,可自定义很多东西,更改方便,移植性好,且无需懂得单片机的具体硬件也能编出程序。但C语言写好后是不能直接运行,需要编译,经过编译生成单片

16、机专用的机器码后才能直接运行,效率是要低于直接用汇编写出来的代码的。不过如果谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非汇编语言编程所可比拟的。2.3.1主程序流程图图9 简易电子琴主程序流程图主程序(程序见附表)先将各部分数值初始化,然后扫描键盘,看是否有按键按下。有按键按下则再逐行扫描获取键值;无按键按下则返回继续判断有无按键按下。根据不同的键值,设定不同的计数初值,使用计数器T0,在模式1下计数。接着判断按键是否释放,若未释放则继续计数,若释放则关闭计数器T0,返回再次判断有无按键按下。其流程图如图8。2.3.2键盘扫描函数流程图图9 键盘扫描函数流程图先给P

17、1口赋值,使P1=0xef,扫描第一行,判断第一行是否有按键按下。因为按键会产生机械抖动,所以必须延时消抖,再次进行判断有无按键按下。有按键按下,则根据当前状态识别按键的确切编码。没有则使P1=0xdf,扫描第二行,判断第二行是否有按键按下,消抖再判断,则根据当前状态识别按键的确切编码。没有则使P1=0xbf,扫描第三行,判断第三行是否有按键按下,消抖再判断,则根据当前状态识别按键的确切编码。没有再使使P1=0x7f,扫描第四行。程序流程如图9所示。2.3.3中断服务子程序流程图 图10 中断服务子程序流程图C语言编写中断程序,在main函数中直接对各位进行操作,以确定中断优先级,开启中断允许

18、及总中断允许。高优先级中断可以中断正在处理的低优先级程序,因此必须注意寄存器组。分配的方法是使用using n指定,其中n的值是03,对应使用4组工作寄存器。定时器服务子程序:void BeepTimer0(void) interrupt 1 /音符发生中断 BeepIO = !BeepIO; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0; 三、软件设计 本软件设计关键是要实现一种由单片机控制的简单音乐发生器,它由16个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。3.1 音乐相关知识 乐音听起

19、来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音商的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。3.2如何用单片机实现音乐的节拍 除了音符以外,节拍也是音乐的关键组成部分。 节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果

20、1/4拍的延时是0.4秒,则1拍的延时是1.6秒,只要知道1/4拍的延时时间,其余的节拍延时时间就是它的陪数。如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。音乐的音拍,一个节拍为单位(C调)具体如下表:曲调值DELAY 曲调值DELAY调4/4125ms 调4/462ms调3/4187ms 调3/494ms调2/4250ms 调2/4125ms 表1 音乐节拍表3.3如何用单片机产生音频脉冲在本实验中,单片机工作于12MHZ时

21、钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:音符频率(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#1109

22、65085#5SO#41564331高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 表2 音符频率与计数值T的对照表T的值决定了TH0和TL0的值,其关系为

23、:TH0=T/256,TL0=T%256四、软件调试此次设计使用Keil C软件进行调试。调试软件介绍:Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。程序调试界面如下图所示:图11 Keil C调试界面调试步骤:1) 打开Keil C软件,Project-New uVision

24、Project,新建工程。File-New,新建并添加源程序文件,保存时使用扩展名.c。2) 在Project Workspace中,左击Source Group 1,选择Add Files to Group Source Group 1,然后选择相应源文件。3) 参数设置。选中项目文件,右击“Target 1”,在弹出的菜单中进行有关的参数设置。4) 编译。单击Project菜单下的Build Target或Rebuild all target files菜单,对源文件进行编译。当源文件有语法错误时,输出窗口会有提示。五、课程设计小结通过单片机的课程设计,我学到了不少课本上没有的知识,也锻炼

25、了自己的动手能力,将以前学过的零散的知识串到一起。通过设计制作简易电子琴,将自己的理论知识与实践相结合起来,进一步巩固了专业基础知识和相关专业课程知识,同时也培养了自己独立自主、综合分析的思维与创新能力。在设计的过程中遇到过各种各样的问题,设计的过程也不是一帆风顺。最后,感谢老师的精心指导,使我能够完成这次课程设计。参考文献:1. 例说51单片机(C语言版)(第三版)谢亮 谢晖 改编 人民邮电出版社2. 单片机原理与应用设计 张毅刚 彭喜元 电子工业出版社3. 嵌入式C语言程序设计 郁文工作室 人民邮电出版社4. 苏家健、曹柏荣、汪志锋.单片机原理及应用技术M.高等教育出版社5. 于海生. 微型计算机控制技术选编M.清华大学出版社,1999.6. 李朝青. 单片机原理及接口技术M. 北京:北京航天航空大学出版色,2001.7. 胡汉才. 单片机原理及其接口技术M. 北京:清华大学出版社,2004.

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

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