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

上传人:b****5 文档编号:8274340 上传时间:2023-01-30 格式:DOCX 页数:15 大小:402.43KB
下载 相关 举报
例说51单片机课程设计.docx_第1页
第1页 / 共15页
例说51单片机课程设计.docx_第2页
第2页 / 共15页
例说51单片机课程设计.docx_第3页
第3页 / 共15页
例说51单片机课程设计.docx_第4页
第4页 / 共15页
例说51单片机课程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

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

《例说51单片机课程设计.docx》由会员分享,可在线阅读,更多相关《例说51单片机课程设计.docx(15页珍藏版)》请在冰豆网上搜索。

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

例说51单片机课程设计

基于STC89C52单片机简易电子琴设计

摘要:

随着电子技术的发展,电子技术正在逐渐改善着人们的学习、生活、工作。

电子技术与音乐的结合的不断开发,给人们的生活带来无限乐趣,由此而产生的电子琴在这种形势下,因其体积小、易于携带、经济适用,对初学者,尤其对识谱的人来说是很容易弹奏的,一首简单的曲子灵感好的人甚至不用很多的练习和教师的指导就能很快的弹奏出来。

本设计是基于STC89C52单片机一款简易的电子琴,以STC89C52单片机作为系统的核心控制部分,采用4*4距阵键盘,鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从低So到高DO等16个音。

通过制作硬件电路和软件的设计编写,然后进行软硬件的调试运行,最终达到设计电路的乐器演奏、点歌、存储及显示功能。

设计中应用中断系统和定时/计数原理控制演奏器发声,对音乐发生所必须确定的音符和节拍分别用C语言程序实现。

可以用它来弹奏和播放乐曲,特点是设计思路简单、清晰,成本低。

关键词:

单片机、电子琴、STC89C52

引言

单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。

单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。

因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。

随着社会的发展进步,音乐已经成为了我们生活中很重要的一部分。

电子琴则是一种很常见的键盘乐器,是现代电子科技与音乐结合的产物,在现代音乐中扮演着重要的角色。

单片机具有强大的控制功能和灵活的编程实现特性,早已溶入现代人们的日常生活中,成为不可替代的一部分。

本文的主要内容是用STC89C52单片机为核心控制元件,设计一个简易电子琴。

一、设计计划

利用4*4矩阵键盘能够发出16个不同的音调,并且可以播放完整的音乐

二、设计方案

2.1方案论证

2.1.1系统基本组成

本系统以STC89C52为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键、扬声器。

2.1.2系统基本原理

声音的频率范围约是几十到几千赫兹,若能利用程序来控制单片机某个口线不断地输出高低电平,则在改口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音。

本系统就是按此原理设计,对于STC89C52而言要产生一定频率的方波一般是先将某口线输出高电平,延迟一段时间后再输出低电平。

通过改变延迟时间可以改变单片机的输出频率。

单片机的延时主要有两种方式,即软件延时和使用定时/计数器延时。

其中软件延时不是很精确,而电子琴电路由于每个音符的频率值要求比较严格,因此我们选用定时/计数器延时。

单片机产生的音频脉冲信号没有足够的驱动能力,因此要在扬声器前加一放大电路,保证扬声器能产生所要实现的音符。

 

图1系统原理框图

2.1.3音乐相关知识

乐音听起来有的高、有的低,这就叫做音高。

音高是由发声物体振动频率的高低决定的,频率高声音就高,频率低声音就低。

音持续时间的长短即时值,一般用拍数表示。

休止符表示暂停发音。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同的频率组合,加以拍数对应的延时,构成音乐。

如果单片机要自己播放音乐就必须考虑到节拍的设置。

由于本例中是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。

因此,我们只需弄清楚音乐中的音符和对应的频率。

要产生相应的音频脉冲,只需要计算出某音频的周期,再除以2。

利用计数器计时半周期,计满时使P2.0反向,然后重复计时再反向。

本例中,单片机工作在12MHz时钟,使用定时器/计数器T0,工作模式为1,改变计数初值TH0、TL0就可产生不同频率的脉冲信号。

2.2硬件设计

2.2.1主控核心

本实例采用STC89C52作为主控核心。

 

图2STC89C52管脚图

STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。

STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,STC89C52可以按照常规方法进行编程,并可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

主要引脚功能:

1.RST(9):

复位输入。

当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;

2.XTAL1(19):

反向振荡器放大器的输入及内部时钟工作电路的输入;

3.XTAL2(18):

来自反向振荡器的输出;

4.P1口(1-8):

P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;

5.ALE/PROG(30):

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲;

6.PSEN(29):

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现;

2.2.2键盘模块

键盘是最常用的单片机输入设备,大致可以分为独立连接式键盘和矩阵式。

独立连接式键盘是最简单的键盘电路,每个键独立接入一根数据线。

这种键盘结构简单,使用方便,但是占用的I/O口线较多。

矩阵式键盘由行线和列线组成,按键位于行列的交叉点上,行线通过上拉电阻接到高电平。

行列式键盘可节省I/O口,适合按键数较多的场合。

所以本例的4X4键盘采用行列式键盘。

图3键盘输入模块

通过行列键盘扫描的方法可获取键盘输入的键值,从而知道按下的是哪个键,具体过程如下:

(1)查询是否键按下。

单片机向列扫描口输出全为“0”的扫描码,然后检测行线信号,只要有一行信号不为“1”,则表示有键按下,且不为“1”的行即是按下的键的所在行。

(2)查询按下键所在具体位置。

用逐列扫描的方法确定按下键所在的行号。

单片机先使第一列为“0”,其余列为“1”,接着进行信号检测,若全为“1”则按下键不再第一列;然后是第二列为“0”,其余列为“1”,在进行列信号检测,若全为“1”,则按下键不再第二列;往下依次类推。

(3)将得到的行号列号译码。

对于4X4行列式键盘,可用一个字节(8位)来对键盘编码。

本例中,将直接的高4为表示列号,低4位表示行号。

在键盘扫描过程中,应该注意以下几个问题。

(1)按下按键时,按键会产生机械抖动,一般持续几到几十毫秒。

在键盘扫描过程中,必须注意键盘的消抖处理。

(2)在键盘扫描过程中,应防止按一次键而多个对应键输入的情况。

在按键处理完毕后,还应检测按下的键是否松开,只有按下的键松开后程序才往下执行。

这样每按一个键,只做一个键处理。

2.2.3音频功放模块

图4LM386管脚图

LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。

LM386的外形和引脚的排列如图4所示。

引脚2为反相输入端,3为同相输入端;引脚5为输出端;引脚6和4分别为电源和地;引脚1和8为电压增益设定端;使用时在引脚7和地之间接旁路电容,通常取10μF。

LM386的电源电压4-12V或5-18V(LM386N-4);静态消耗电流为4mA;电压增益为20-200dB;在1、8脚开路时,带宽为300KHz;输入阻抗为50K;音频功率0.5W。

尽管LM386的应用非常简单,但稍不注意,特别是器件上电、断电瞬间,甚至工作稳定后,一些操作(如插拔音频插头、旋音量调节钮)都会带来的瞬态冲击,在输出喇叭上会产生非常讨厌的噪声。

要注意以下几点:

1、通过接在1脚、8脚间的电容(1脚接电容+极)来改变增益,断开时增益为20dB。

因此用不到大的增益,电容就不要接。

2、PCB设计时,所有外围元件尽可能靠近LM386;地线尽可能粗一些;输入音频信号通路尽可能平行走线,输出亦如此。

这是死理,不用多说了吧。

3、选好调节音量的电位器,阻值不要太大,10K最合适,太大会影响音质。

4、尽可能采用双音频输入/输出。

好处是:

“+”、“-”输出端可以很好地抵消共模信号,故能有效抑制共模噪声。

5、第7脚(BYPASS)的旁路电容不可少!

实际应用时,BYPASS端必须外接一个电解电容到地,起滤除噪声的作用。

工作稳定后,该管脚电压值约等于电源电压的一半。

增大这个电容的容值,减缓直流基准电压的上升、下降速度,有效抑制噪声。

6、减少输出耦合电容。

减小该电容值,可使噪声能量冲击的幅度变小、宽度变窄;但也不能减得太小,太低会使截止频率(fc=1/(2π*RL*Cout))提高。

7、电源的处理。

如果系统中有多组电源,由于电压不同、负载不同以及并联的去耦电容不同,每组电源的上升、下降时间必有差异。

一般选择上升相对较慢的电源作为LM386的Vs,但不要低于4V。

 

图5简易电子琴音频功放电路原理图

2.2.4复位电路

当单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。

如果RST持续为高电平,单片机就处于循环复位状态。

根据应用的要求,复位操作通常有两种基本形式:

上电复位和上电或开关复位。

本次设计采用手动复位电路。

图6复位电路

2.2.5时钟电路

时钟电路用于产生单片机工作所需的时钟信号。

震荡有两种方式:

外部震荡、内部震荡。

在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器,如图7所示。

电路中的电容一般取30pF左右,而晶体的振荡频率范围通常为1.2~12MHz。

本例采用12MHz的晶振。

图7晶体振荡电路

 

图8单片机最小系统电路

2.3软件设计

目前普通低档单片机的编程中,一般会用汇编和C。

汇编语言非常接近计算机的硬件,因此,它可以最大限度地发挥计算机硬件的性能。

用汇编写的程序执行速度相当快,适用于实时性要求较高的场合。

但是用汇编写的程序比较庞大,编写速度也比较慢,而且汇编程序的移植性较差。

C语言作为高级语言,运用灵活,可自定义很多东西,更改方便,移植性好,且无需懂得单片机的具体硬件也能编出程序。

但C语言写好后是不能直接运行,需要编译,经过编译生成单片机专用的机器码后才能直接运行,效率是要低于直接用汇编写出来的代码的。

不过如果谈到开发速度、软件质量、结构严谨、程序坚固等方面的话,则C语言的完美绝非汇编语言编程所可比拟的。

2.3.1主程序流程图

 

 

图9简易电子琴主程序流程图

主程序(程序见附表)

先将各部分数值初始化,然后扫描键盘,看是否有按键按下。

有按键按下则再逐行扫描获取键值;无按键按下则返回继续判断有无按键按下。

根据不同的键值,设定不同的计数初值,使用计数器T0,在模式1下计数。

接着判断按键是否释放,若未释放则继续计数,若释放则关闭计数器T0,返回再次判断有无按键按下。

其流程图如图8。

2.3.2键盘扫描函数流程图

 

图9键盘扫描函数流程图

先给P1口赋值,使P1=0xef,扫描第一行,判断第一行是否有按键按下。

因为按键会产生机械抖动,所以必须延时消抖,再次进行判断有无按键按下。

有按键按下,则根据当前状态识别按键的确切编码。

没有则使P1=0xdf,扫描第二行,判断第二行是否有按键按下,消抖再判断,则根据当前状态识别按键的确切编码。

没有则使P1=0xbf,扫描第三行,判断第三行是否有按键按下,消抖再判断,则根据当前状态识别按键的确切编码。

没有再使使P1=0x7f,扫描第四行。

程序流程如图9所示。

2.3.3中断服务子程序流程图

 

图10中断服务子程序流程图

C语言编写中断程序,在main函数中直接对各位进行操作,以确定中断优先级,开启中断允许及总中断允许。

高优先级中断可以中断正在处理的低优先级程序,因此必须注意寄存器组。

分配的方法是使用usingn指定,其中n的值是0~3,对应使用4组工作寄存器。

定时器服务子程序:

voidBeepTimer0(void)interrupt1//音符发生中断

{

BeepIO=!

BeepIO;

TH0=Sound_Temp_TH0;

TL0=Sound_Temp_TL0;

}

三、软件设计

本软件设计关键是要实现一种由单片机控制的简单音乐发生器,它由16个音节组成的的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。

3.1音乐相关知识

乐音听起来有的高,有的低,这就叫音高,音高是由发音物体振动频率的高低决定的,频率高声音就高,频率低声音就低,不同音商的乐音是用C、D、E、F、G、A、B表示的,这7个字母就是乐音的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,这是唱曲时乐音的发音,所以叫唱名。

音持续时间的长短即时值,一般用拍数表示,休止符表示暂停发音。

一首音乐是由许多不同的音符组成的,而每个音符对应着不同的频率,这样就可以利用不同频率的组合,加以与拍数对应的延时,构成音乐。

3.2如何用单片机实现音乐的节拍

除了音符以外,节拍也是音乐的关键组成部分。

节拍实际上就是音持续时间的长短,在单片机系统中可以用延时来实现,如果1/4拍的延时是0.4秒,则1拍的延时是1.6秒,只要知道1/4拍的延时时间,其余的节拍延时时间就是它的陪数。

如果单片机要自己播放音乐,那么必须在程序设计中考虑到节拍的设置,由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

音乐的音拍,一个节拍为单位(C调)具体如下表:

曲调值

DELAY

 

曲调值

DELAY

调4/4

125ms

 

调4/4

62ms

调3/4

187ms

 

调3/4

94ms

调2/4

250ms

 

调2/4

125ms

表1音乐节拍表

3.3如何用单片机产生音频脉冲

在本实验中,单片机工作于12MHZ时钟频率,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号,在此情况下,C调的各音符频率与计数值T的对照如下表:

音符

频率(HZ)

计数值(T值)

音符

频率(HZ)

计数值(T值)

低1DO

262

63628

#4FA#

740

64860

#1DO#

277

63737

中5SO

784

64898

低2RE

294

63835

#5SO#

831

94934

#2RE#

311

63928

中6LA

880

64968

低3MI

330

64021

#6LA#

932

64994

低4FA

349

64103

中7SI

968

65030

#4FA#

370

64185

低1DO

1046

65058

低SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6LA#

466

64463

高3MI

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA#

1490

65198

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64633

#5SO#

1661

65235

#2RE#

622

64884

高6LA

1760

65252

中3MI

659

64732

#6LA#

1865

65268

中4FA

698

64820

高7SI

1967

65283

表2音符频率与计数值T的对照表

T的值决定了TH0和TL0的值,其关系为:

TH0=T/256,TL0=T%256

四、软件调试

此次设计使用KeilC软件进行调试。

调试软件介绍:

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。

KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。

另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

程序调试界面如下图所示:

图11KeilC调试界面

调试步骤:

1)打开KeilC软件,Project->NewuVisionProject,新建工程。

File->New,新建并添加源程序文件,保存时使用扩展名.c。

2)在ProjectWorkspace中,左击SourceGroup1,选择AddFilestoGroup‘SourceGroup1‘,然后选择相应源文件。

3)参数设置。

选中项目文件,右击“Target1”,在弹出的菜单中进行有关的参数设置。

4)编译。

单击Project菜单下的BuildTarget或Rebuildalltargetfiles菜单,对源文件进行编译。

当源文件有语法错误时,输出窗口会有提示。

五、课程设计小结

通过单片机的课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。

通过设计制作简易电子琴,将自己的理论知识与实践相结合起来,进一步巩固了专业基础知识和相关专业课程知识,同时也培养了自己独立自主、综合分析的思维与创新能力。

在设计的过程中遇到过各种各样的问题,设计的过程也不是一帆风顺。

最后,感谢老师的精心指导,使我能够完成这次课程设计。

 

参考文献:

1.《例说51单片机》(C语言版)(第三版)谢亮谢晖改编人民邮电出版社

2.《单片机原理与应用设计》张毅刚彭喜元电子工业出版社

3.《嵌入式C语言程序设计》郁文工作室人民邮电出版社

4.苏家健、曹柏荣、汪志锋.单片机原理及应用技术[M].高等教育出版社

5.于海生.微型计算机控制技术选编[M].清华大学出版社,1999.

6.李朝青.单片机原理及接口技术[M].北京:

北京航天航空大学出版色,2001.

7.胡汉才.单片机原理及其接口技术[M].北京:

清华大学出版社,2004.

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

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

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