毕业设计(论文)-基于51单片机的低成本音乐门铃设计 - 图文

更新时间:2024-07-08 13:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业设计(论文)

基于51单片机的低成本音乐门铃设计

学 院 信息工程学院 专 业 信息工程 (应用电子技术方向) 年级班别 2007级(4)班 学 号 学生姓名 指导教师

2011年

摘 要

门铃的应用,在现代社会里随处可见,但是出于多方面的考虑,如成本的高低,声音的模式等,需要我们进一步去挖掘。本论文的设计就是围绕低成本音乐门铃进行研究开发。其中主要运用到了51芯片,51芯片是微型处理器, 51单片机具有优异的性能价格比、集成度高、体积小、可靠性高、 控制功能强、低电压、低功耗等优点。本设计中音乐门铃的基本功能都能由51芯片提供,且价格低廉。除芯片基本电路部分外,还需要声音扩大部分,用到386DE芯片。整个系统围绕价格低廉展开,拓展功能由程序部分实现。

先用c语言编写实现音乐门铃的程序代码,然后将c语言用keil软件生成hex文件下载到stc89c51集成芯片中,利用不同的频率发出不同的音调,利用延时产生不同的节拍,通过功率放大器传送到喇叭使其发出美妙的音乐。为进一步降低成本,所以本设计主要完成部分在于程序,程序分为主体与扩展部分。扩展部分用于规定的歌曲节拍,音调控制。扩展部分由主程序,音乐曲目以及歌曲数组函数组成。在利用画图工具完成基本电路设计后,再焊接电路,最后再进入变成部分。

关键词:单片机,低成本,程序,音乐

注:本设计(论文)题目来源于自选。

Abstract

Doorbell application, can be seen everywhere in modern society, but because of various considerations, such as low cost, voice pattern, we need to dig further. The design of this thesis is to focus on research and development cost music doorbell. Mainly applied to the 51-chip, 51 chip is a microprocessor, microcontroller 51 has excellent performance and low cost, high integration, small size, high reliability, high control, low voltage, low power consumption. The design of the basic functions of music doorbell can be from 51 chips, and low prices. In addition to the basic part of the circuit chip, but also need to expand the sound section, use 386DE chip. Expand the system around the low cost and expand the function by the program partially achieved.

First with the c language code to achieve musical doorbell, and then use keil software c language generated hex file to stc89c51 integrated chip, the use of different frequencies make different tone, the use of delay have different beats, transmitted through the power amplifier To the speaker to broadcast the wonderful music. To further reduce costs, so the design process the main part is completed, the program is divided into subject and extension. Extension of the provisions of the songs used in rhythm, tone control. Extension from the main program, music tracks and songs composed of an array of functions. In the use of drawing tools to complete the basic circuit design, and then soldering the circuit, and finally re-entering into a part.

Key words:Single chip, Low-cost, Program,Music

目录

1 绪论 ........................................................................................................................................ 1 1.1 题目背景及目的 .............................................................................................................. 1 1.2 国内外研究状况 .............................................................................................................. 1 1.3 题目研究方法 .................................................................................................................. 2 1.4论文构成及研究内容 ....................................................................................................... 2 2 电子音乐门铃系统简介 ........................................................................................................ 3 2.1分析功能要求 ................................................................................................................... 3 2.2 系统原理与控制方法 ...................................................................................................... 4 2.3 单片机发音概述 .............................................................................................................. 4

2.3.1 音调 ....................................................................................................................... 4 2.3.2 节拍 ....................................................................................................................... 5 3 系统硬件设计 ........................................................................................................................ 7 3.1 原理简介 .......................................................................................................................... 7 3.2 主电路设计 ...................................................................................................................... 8 3.3 音乐功放电路设计 ........................................................................................................ 11

3.3.1 概述 ..................................................................................................................... 11 3.3.2 特性 ..................................................................................................................... 12 3.3.3应用电路 .............................................................................................................. 12 3.3.4 芯片使用方法与自激啸叫防治措施 ................................................................. 14 4 系统软件设计 ...................................................................................................................... 16 4.1 软件介绍 ........................................................................................................................ 16 4.2 主程序设计 .................................................................................................................... 18 4.3 播放文件程序设计 ........................................................................................................ 20 5 系统调试与实现 .................................................................................................................. 22 5.1 硬件调试与实现 ............................................................................................................ 22

5.2 软件调试与实现 ............................................................................................................ 22 结论 .......................................................................................................................................... 24 参考文献 .................................................................................................................................. 25 致谢 .......................................................................................................................................... 26 附录A 主文件程序 ................................................................................................................ 27 附录B 播放文件程序 ............................................................................................................ 30

1 绪论

以下是关于此次毕业设计的题目北京以及目的,国内外研究状况,题目研究方法还有论文构成和研究内容的介绍。 1.1 题目背景及目的

随着时代的发展和进步,控制智能化、仪器小型化、功耗微小化得到广泛关注。在这些领域中,单片机起到了举足轻重的作用,这就把单片机的应用提升到重要的地位,单片机应用系统设计就成为新的技术热点。

近几年来,随着市场上智能化楼宇的不断升温,门铃系统已作为智能化办公室和智能化住宅小区的一个重要组成部分,被各商家和用户所接受。人们已开始习惯用门铃系统代替传统的铁钥匙去管理各通道门,这使门铃系统得到了飞跃性的发展。随着单片机技术的飞速发展,通过单片机实现人们对物质生活的满足,这将会日益成为今后的一个重要发展的方向[1]。

由于电子音乐门铃具有铃声悦耳动听,价格低廉、耗电少等优点,在现代家具中的应用越来越流行。有了电子音乐门铃,在有客人在拜访时,听到的将不再是单调的提示等候音,而是不同凡响的流行音乐旋律、特效音等个性化的电子声乐。

1.2 国内外研究状况

目前在家庭住宅中使用的电子门铃大多数是没用音乐,只有简单的叮咚叮当的声音,比较单调。其中绝大多数没有按钮提示以及其他功能,要不就是造价昂贵,诸多缺点。

经了解,现在市场上所有销售的门铃主要有以下几种:

1、敲击式电子音乐门铃,采用声控触发电路和音乐集成电路组成,通过一个可调电阻来控制喇叭的灵敏度,一个电容快速充电来维持后续工作;

2、不用按钮的音乐门铃,采用红外线发射接收电路和自激多谐振荡电路构成,荡发出的红外线被人遮挡住的一瞬间,扬声器就发出有没动听的音乐; 3、带们演示电路的音乐门铃,采用低功耗交流继电器TLP3502和高频小功率管组成。只要按下门铃按钮就会同时打开门灯,使主人可以通过门镜来识别来客身

1

份。门灯经一段时间的延时后自动熄灭;

4、无限遥控门铃,采用脉冲调制发射,及石英晶振稳频技术,实现远距离遥控。

1.3 题目研究方法

充分调查研究并且认真深刻学51芯片功能以及使用方法,掌握单片机应用系统的开发流程、硬软件系统设计以及相关工具软件的使用方法,同时对被控的实际应用对象有更深入的了解,达到学以致用、系统地整合所学专业知识的目的,达到设计的系统抗干扰能力强、稳定可靠、成本低廉、使用方便,满足相关的功能要求。

掌握单片机的体系结构、工作原理、指令系统与编程技巧以及相关接口技术,熟悉单片机开发工具并掌握单片机应用系统的设计开发流程;选择并设计合理的补偿算法与程序结构;掌握相应的抗干扰措施;设计出系统的硬件结构与接口电路,编写相关软件。 1.4论文构成及研究内容

论文主要有绪论、电子音乐门铃系统简介(分析功能要求、系统原理与控制方法)、系统硬件设计、系统软件设计、系统调试与实现、结论、参考文献、致谢、附录各部分组成。

研究内容为开发研究出低成本音乐门铃。本文利用单片机体积小、速度快、 功能强、性能可靠、价格低廉等优点,介绍了用AT89C52单片机设计电子音乐门铃的方法,系统实现简单、功能稳定。日后可在此基础上进一步完善,如增加语音防盗报警功能、有人无人语音门铃切换功能,甚至增加可视对讲功能等。

2

2 电子音乐门铃系统简介

了利用单片机为主控制器设计电子门铃的具体方法。该电子门铃具有普通 门铃的功能,而且还具有一些扩展功能。 2.1分析功能要求

本设计要求是要完成低成本音乐门铃设计,芯片可采用51芯片,89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称

[2]

单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:与MCS-51 兼容 , 4K字节可编程闪烁存储器,寿命:1000写/擦循环,数据保留时间:10年,全静态工作:0Hz-24MHz,三级程序存储器锁定, 128×8位内部RAM, 2可编程I/O线,两个16位定时器/计数器, 5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路[2]。

因为需要用到播放音乐功能,所以需要用到功放电路,其中采用LM386芯片, LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。

LM386是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。

3

2.2 系统原理与控制方法

利用单片机89C52产生乐曲音符,再把乐谱翻译成计算机音乐语言,由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声。

通过控制定时器的定时时间来产生不同频率的方波,驱动喇叭发出不同音阶的声音,再利用延迟来控制发音时间的长短,即可控制音调中的节拍。把乐谱中的音符和相应的节拍变换为定常数和延迟常数,作为数据表格存放在存储器中。由程序查表得到定时常数和延迟常数,分别用以控制定时分别代表某一频率的声音。[3]

以STC89C52RC为核心,加上芯片最小系统电路,按钮,外围电源,LM386功放电路,扬声器电路组成。该系统通过STC89C52RC单片机的中断调用来实现将音符转换为相应的电信号输出到扬声器,组成一首完整的音乐,并通过按钮实现歌曲的转换。 2.3 单片机发音概述

一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐振频率。单片机演奏的音乐基本都是单音频率。因此单片机演奏音乐比较简单,只需能清楚“音调”和“节拍”两个概念即可。

音调表示一个音符唱多高的频率。 节拍表示一个音符唱多长的时间。

知道了一个音符的频率后,便可以让单片机发出相应频率的振荡信号,从而产生相应的音符声音。通过单片机的定时器进行定时中断,在中断服务程序中将单片机上完结LM386的I/O口来回置高电平或者是低电平的,从而让扬声器发出声音。通过节拍计算出每个音符所需要的时间,采用循环延时的方法来实现控制一个音符唱多长的时间,从而构成一首完整的音乐。 2.3.1 音调

音调主要由声音的频率决定。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随响度增加而下降,高频纯音的音调却随响度增加而上升。

音调的高低还与发声体的结构有关,因为发声体的结构影响了声音的频率。

4

大体上,2000 赫兹以下的低频纯音的音调随响度的增加而下降,3000 赫兹以上高频纯音的音调随响度的增加而上升。

例如,在音乐中常常把中音C上方的A音定位标准高音,其频率F=440HZ,其余音均与其进行比较。F1和F2为两个音符,如果这两个音符的频率相差一倍时,也即F2=2*F1时,则称F2比F1高一个频程。

在音乐中音符1与音符2,音符2与音符3……等等之间正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度内,有12个半音。由于人耳的听觉效果,这12个音阶的分度基本上是以对数的关系来划分的。只要知道12个音符的音高,也就是其基本频率,就可以根据音符之间的倍频关系得到其他音符的基本音调频率[3]。

以标准高音A的频率F=440HZ,其对应的周期为: T=1/F=1/440=2272us

因此需要在单片机I/O端口输出周期为T=2272us的方波脉冲,也就是t=T/2=2272/2=1136us

也就是说,单片机上定时器的中断出发时间为1136us。如果单片机采用定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设外接晶振的振荡器频率为f,则定时器的预置初始值有以下公式来确定: Temp = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC) TH = Temp /256 TL = Temp %6 2.3.2 节拍

在音乐中,时间被分成均等的基本单位,每个单位叫做一个“拍子”或 称一拍。拍子的时值是以音符的时值来表示的,一拍的时值可以是四分音符(即以四分音符为一拍),也可以是二分音符(以二分音符为一拍)或八分音符(以八分音符为一拍)。

拍子的时值是一个相对的时间概念,比如当乐 曲的规定速度为每分钟 60 拍时,每拍占用的时间是一秒,半拍是二分之一 秒;当规定速度为每分钟 120 拍时,每拍的时间是半秒,半拍就是四分之一 秒,依此类推。拍子的基本时值确定之后,各种时值的音符就与拍子联系在一起。例如,当以四分音符为一拍时,

5

一个全音符相当于四拍,一个二分音符相当于两拍, 八分音符相当于半拍,十六分音符相当于四分之一拍;如果以八分音符做为 一拍,则全音符相当于八拍,二分音符是四拍,四分音符是两拍,十六分音 符是半拍[4]。

对于一拍的发音时间,如果乐曲没有特殊说明,一般来说,一拍大约为400~450ms。

对于计算机编程 节拍码及节拍数如图2.1[5]所示:

图2.1 节拍码及节拍数

6

3 系统硬件设计

系统以AT89C51单片机为核心,加上外围电源时钟电路、LM386功放电路及扬声器电路组成。

Atmel公司的生产的AT89C51单片机是一种低功耗/1氐电压、高性能的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,片内集成4K字节可改变程序Flash存储器,具有低功耗,速度快,程序擦写方便等优点,完全满足本系统设计需要。

系统通过P3连接功放电路从而驱动扬声器产生电子声乐,P1口连接门铃按键。 3.1 原理简介

总体设计方案本系统采用STC89C52作为系统核心,音乐是由音符组成.不同的音符是由相应频率的振动产生.产生不同的音频需要有不同固定周期的脉冲信号。要产生音频林冲,只要算出某一音颉的周期T,将此周期T除2.即为毕周期的时间。

我们利用单片机的内部定时器TO,使其工作在计数器模式MODEl下.韧始化适当的计数值THO及TLO以计时这个半周期时间.每当计时时间到后就将输出脉冲的P1.0口反相.然后重复计时此半周期时间。

再对P1.0口反相.就可在单片机Pl.0引脚上得到此频率的脉冲。P1.0引脚脉冲接LM386作音频功放,然后辅出到扬声器.从而发出美妙的乐音[6]。

通过音频功放电路,把信号输出到扬声器,播出美妙的音乐。只要一按下按钮,就会有音乐播出,等一首歌播放完毕后,当再次按下按钮,就会播放下一首音乐,如此循环,知道再次出现第一首音乐为止。本系统可以奏出三首不同旋律的歌曲。

为绘制此次电路图,采用DXP2004软件,Protel DXP2004是Altium公司于2004年推出的最新版本的电路设计软件,该软件能实现从概念设计,顶层设计直到输出生产数据以及这之间的所有分析验证和设计数据的管理。当前比较流行的Protel 98、Protel 99 SE,就是它的前期版本。

7

Protel DXP 2004已不是单纯的PCB(印制电路板)设计工具,而是由多个模块组成的系统工具,分别是SCH(原理图)设计、SCH(原理图)仿真、PCB(印制电路板)设计、Auto Router(自动布线器)和FPGA设计等,覆盖了以PCB为核心的整个物理设计。该软件将项目管理方式、原理图和PCB图的双向同步技术、多通道设计、拓朴自动布线以及电路仿真等技术结合在一起,为电路设计提供了强大的支持。

与较早的版本——Protel99相比,Protel DXP 2004不仅在外观上显得更加豪华、人性化,而且极大地强化了电路设计的同步化,同时整合了VHDL和FPGA设计系统,其功能大大加强了[7]。

此电子音乐门铃的电路设计方案如图3.1所示

图3.1 PCB绘制电路图

3.2 主电路设计

AT89C5l单片机简介:单片机发展至今已有20余年的历史,形成了约50个系列400余种机型,设计者不可能对每一种芯片都熟悉,因此在选择芯片时切勿追赶时髦,使用从未接触过的芯片。

单片机控制系统的核心器件是单片机芯片,它提供的功能和资源对整个应用

8

系统所需要的支持电路、接口硬件设计以及软件程序设计起着关键的作用。ATMEL公司以E2PROM技术和Intel公司的80C31单片机核心技术交换,从而取得80C31核的使用权。ATMEL公司把自身的优势,即先进的Flash技术和80C31核相结合,从而生产出Flsah单片机AT89C51系列[8]。

ATMEL89系列单片机具有下列优点:内部含Flsah存储器,在系统开发过程中,可以十分容易进行程序的修改,大大缩短了系统的开发周期[9]。

同时,在系统工作过程中,能有效地保存一些数据信息,即使外界电源损坏也不影响到信息的保存;输出引脚和指令系统与80C51兼容用89系列单片机取代80C51时,可以直接进行代换;静态时钟方式,89系列单片机采用静态时钟方式,所以可以节省电能,这对降低产品的功耗十分有利;错误编程亦无废品产生错误编程之后仍可以重新编程,直到正确为止,故不存在废品;可进行反复系统试验到最优。而且随用户的需要和发展,还可以修改,使系统不断适应用户的最新要求[13]。

ATMEL9系列单片机是以80C31核构成的,它和8051系列单片机是兼容的系列,故对于8051的用户来说,用ATMEL公司的89系列机进行取代8051的系统设计,是轻而易举的事[10]。

AT89C51是一种低功耗/低电压、高性能的8位单片机,其输出引脚和指令系统都与MCS一51兼容,双列直插封装图如3.2[14]所示。它具有下列主要功能:

9

图3.2 51芯片引脚图

其最小系统电路如图3.3所示:

图3.3 最小系统电路

10

其最小系统实物电路如图3.4所示:

图3.4 最小系统实物电路图

3.3 音乐功放电路设计

LM386引脚图,特性及典型功放电路和芯片使用方法与自激啸叫防治措施介绍。 3.3.1 概述

LM386是美国国家半导体公司生产的音频功率放大 器,主要应用于低电压

消费类产品。为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。

LM386的封装形式有塑封8引线双列直插式和贴片式。其封装图如3.5所示:

11

图3.5 LM386引脚图

3.3.2 特性

静态功耗低,约为4mA,可用于电池供电,工作电压范围宽,4-12V or 5-18V, 外围元件少,电压增益可调,20-200, 低失真度。

LM386电源电压4--12V,音频功率0.5w。LM386音响功放是由NSC制造的,它的电源电压范围非常宽,最高可使用到15V,消耗静态电流为4mA,当电源电压为12V时,在8欧姆的负载情况下,可提供几百mW的功率。它的典型输入阻抗为50K。 3.3.3应用电路 如图3.6所示

图3.6 功放电路图

12

焊接功放电路实物图如3.7所示

图3.7 功放电路实物图

喇叭实物图如3.8所示

图3.8 喇叭实物图

13

3.3.4 芯片使用方法与自激啸叫防治措施

LM386是电子产品和家庭业余制作中广泛使用的音频功率放大Ic。其典型应用电路如图3.9所示。在绝大多数场合或单独使用的情况下,LM386比较正常;但在和其它电路搭配之后,有可能产生自激和灵敏度降低等现象。就该Ic的使用方法和自激啸叫的防治措施介绍如下。

图3.9 典型应用电路

1、入信号过强引起的自激啸叫。对于由于输入信号过强引起的啸叫,可在LM386第①、⑨脚之间加阻容网络,批量应用时,R的阻值可由实验决定,或将R代换为微调电位器w,若信号仍然过强,可将LM386第①、⑤脚悬空。

2、高频自激。防高频自激电路原理如图3.10所示。对高频自激引起的啸叫可在信号输入端与地之间接一只47oo#-o~. F的瓷片电容,在第⑥脚与地之间接一只l00 470opF瓷片电容。作单端输人时,闲置的输入端不要悬空而要接地。 3、低频自激。对于低频自激引起的啸叫可试在输入端与地之间接一只6.8~22kn电阻,将第⑥脚的滤波电容增大到1000~F,在制作印制板时,/i~.M386尽量靠近电源输出端。

4、在使用其它品牌产品(如(jI386、l(A386等)时,有的IC会对高音频的灵敏度有影响。可在其第⑦脚与地之间接一只0.1 F瓷片电容,在第④、⑥脚间(注:

14

不同于第⑥脚接地)接一保0.1 F瓷片电容[11]。

图3.10 防高频自激电路原理图

15

4 系统软件设计

本设计需要用到的软件都是大众一般使用的软件,具有方便简易快捷的优点,程序用C语言编程,也是编程的主流语言,方便日后修改与调试。 4.1 软件介绍

本系统程序开发需要用到keil、STC-ISP V35 软件以及郭天祥51开发板。以下是关于keil和STC-ISP的简介。

现代电子系统的基本核心是嵌人式计算机系统,而单片机是最典型、最广泛、最普及的嵌入式系统。学好单片机,灵活应用Keil软件在电子、科技领域灵活应用单片机技术,将是带动国家科技发展、增强国家综合实力的必经之路。

Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。

掌握Keil软件的使用对于使用51系列单片机是十分必要的,即使不使用c语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令单片机开发事半功倍。[12]

STC-ISP 是单片机下载编程烧录软件,是针对STC系列单片机而设计的,可下载STC89系列、12C2052 系列和12C5410等系列的STC单片机,使用简便,现已被广泛使用。

程序控制流程图如图4.1所示。

16

准备 调用初始化程序 读P3口,判断有无按键调用延时子程序 读P3口,判断有无按键按下调用播放子程序 读P3口,判断有无按键按下调用延时子程序 调用播放子程序 读P3口,判断有无按键按下读P3口,判断有无按键按下调用延时子程序 调用播放子程序 图4.1 程序控制流程图

读P3口,判断有无按键按下

17

4.2 主程序设计

本系统首先建立音乐,把音乐的音符找出,建立各个音符的常数表,如下图4.2:

图4.2 音符常数表

编写程序时,我们把表建立在一个数组内,每个发音符使用一个字节,字节高四位(简谱码)代表音符的高低,低四位(节拍码)代表音符的节拍。如果一拍为0.4秒,1/4秒就是0.1秒,只要设定延时时间就可以求得节拍的时间。假设1/4拍为1 DELAY,则1拍应该为4 DELAY,以此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。1/4拍的延时时间在此我们设为125毫秒。

主文件程序由主程序、延时程序以及歌曲程序组成。

主程序首先对所有端口进行初始化操作,接着进入不断循环部分,直到按键按下,进入防止抖动程序,如果不是抖动,则进入音乐播放程序,直到音乐播放完毕,再次进入等待按键按下部分,直到第二次按键按下,再次进入防止抖动程序,如果不是抖动,则再次进入音乐播放程序,直到音乐播放完毕,直到第三次按键按下,最后一次次进入防止抖动程序,如果不是抖动,则最后一次次进入音乐播放程序,直到音乐播放完毕,回到循环起点,等待第四次按键按下部分,如此类推。程序如下: main() {

InitialSound(); while(1){

if(key==0)

18

} } } }

{

Delay1ms(10); if(key==0)

Play(Music_Girl,0,3,360); do {

}while(key==1); if(key==0) {

Delay1ms(10); if(key==0)

Play(Music_Same,0,3,360); {

}while(key==1); if(key==0) {

Delay1ms(10); if(key==0)

do

Play(Music_Two,0,3,360);}

延时程序部分。为防止按键抖动,对门铃进行有效保护,设计了防止抖动延时程序,程序如下:

void Delay1ms(unsigned int count) {

19

}

unsigned int i,j; for(i=0;i

4.3 播放文件程序设计

播放文件程序由初始化程序函数,音符发生中断函数,播放函数组成。 初始化函数是对芯片端口进行初始化操作,以确定中断模式以及端口初始值,程序如下: void InitialSound(void) {

BeepIO = 0;

Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;

(10ms的初装值)

// 计算TL1应

装入的初值

Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%6; // 计算TH1应

装入的初值 }

音符发生中断函数用于接收到中断信号时,进行的声音播放操作,程序如下: void BeepTimer0(void) interrupt 1 //音符发生中断 {

BeepIO = !BeepIO;

20

TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TMOD |= 0x11; ET0 = 1; ET1 = 0; TR0

= 0;

TR1 = 0; EA = 1;

TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0; }

播放函数用于主文件程序中调用音符的音调以及节拍,从而产生中断,播放音乐,其部分程序如下: ……

while(Point < SoundLength) {

SL=Tone;

//计算出音符

//计算出高低音

SM=Tone/10; SH=Tone/100;

//计算出是否升半

//查出对应音符的

CurrentFre = NewFreTab[SignTab[SL-1]+SH];

频率

if(SL!=0) {

if (SM==1) CurrentFre >>= 2; if (SM==3) CurrentFre <<= 2; Temp_T

//低音 //高音

=

65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值

}

Sound_Temp_TH0 = Temp_T/256; Sound_Temp_TL0 = Temp_T%6; TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿

……

21

5 系统调试与实现

这是本设计较为困难的一部分,需要经过反反复复的调试,才能达到理想中的效果,以下将分文硬件与软件两部分介绍此次调试的过程,以及调试过程中遇到的困难和解决办法。 5.1 硬件调试与实现

考虑到本设计以低成本为主,所以一切原件以便宜为上,本设计开发工具需要用到一个电烙铁,一个铁架,一卷焊锡,一盒松脂,1块6X7CM开发板,1块6X10CM开发板,一块STC89C52芯片以及一块芯片底座,一个USB接口,一个电源开关,1个10uf电容,2个30pf电容,1个12Mhz晶振,一个抖动开关,1个10k电阻,一个10k滑动变阻器,一块lm386芯片及其底座,1个220uf电容,1个0.05uf电容,一个8欧姆5瓦的扬声器,以及杜邦线若干,插排若干。

为方便调试,把系统焊接分为两个部分,其一是51单片机最小系统部分,其二是声音功率放大播放部分。这样的焊接不仅有利于系统的调试,还有利于日后对于其他系统的开发,直接利用最小系统以及杜邦线引出端口即可。

由于本人焊接技术不到位,常常出现短路问题,在第一次焊接完成后,多出出现短路,最后用万用表蜂鸣档位逐点测试,在重新焊接。其中还试过由于本人疏忽,直接把芯片焊接(没通过芯片底座)在开发板上,导致芯片烧坏,不得将其更换。开始时选用的音乐功放电路,也是基于LM386芯片,采用的是较为复杂的功放电路,但是焊接后,经过一系列调试,反复查找了失败原因,还是没有找到解决办法,但是后来突然想到,这次的设计是基于低成本的基础,一切得从简,所以选择了就只有一个10k滑动变阻器,一块lm386芯片及其底座,1个220uf电容,1个0.05uf电容所组成的功放电路,再次调试后,放出了声音,但是声音的音调和频率都与理想中有所差距,应该是由于喇叭的自身额定功率与质量有关,需要调整的话应该是在电源供电以及喇叭的质量方面修正,但这是基于低成本的设计,只要喇叭有声音,效果一般就可了。 5.2 软件调试与实现

程序主要取自一个音乐播放程序,但没有功率放大部分,更没有多音乐轮流

22

播放部分,按钮部分。

在此基础之上,首先是对其进行一定的修改,在保留原来音乐播放程序的前提下,进行主程序的设计,首先对所有端口进行初始化操作,接着进入不断循环部分,直到按键按下,进入防止抖动程序,如果不是抖动,则进入音乐播放程序,直到音乐播放完毕,再次进入等待按键按下部分,直到第二次按键按下,再次进入防止抖动程序,如果不是抖动,则再次进入音乐播放程序,直到音乐播放完毕,直到第三次按键按下,最后一次次进入防止抖动程序,如果不是抖动,则最后一次次进入音乐播放程序,直到音乐播放完毕,回到循环起点,等待第四次按键按下部分,如此类推。

在keil软件经不断改进后,生成hex文件,再用郭天祥51开发板烧入程序,并通过stc-isp烧录软件烧录后,最终得以完成。

再把烧录好的STC89C52芯片摆放到已经焊接好的电路板上,按下按钮,听到第一首音乐,在第一首音乐播放完毕后,再按下按钮,听到第二首音乐,在第二首音乐播放完毕后,再次按下按钮,听到第三首音乐,在第三首音乐播放完毕后,再按下按钮,听到第一首音乐,如此类推。

程序在开始之初是用简单的中断延迟来实现,对于编歌曲来讲需要很大的工作量,在网上查找大量的资料之后,找到了一个做音乐播放器的程序,他也是基于中断延迟来实现播放功能,但是他对于歌曲编辑的灵活性,有很大的发展空间,所以我就采用了他的部分程序。

并且利用一个名为MusicEncode的软件,可以把基本上所有的音符都转化为16位的二进制编码,大大提高了编程效率。

其次是主程序的编辑,原来的音乐播放程序只是假单的等待按钮按下后,直接播放一首完整的歌曲后紧接着另外一首完整的歌曲歌。但是这次的设计是要制作一个门铃,而不是音乐播放,考虑到设计需要,我们要实现的功能是按下按钮,播放一小段音乐,停止,等待下一个按钮,再播放,不断循环。

所以,主要考虑到的是如何在播放完一首歌曲后,进入在此等待状态。因此,运用了C里面DO……WHILE语句,一直等待按钮的按下。

对于该段程序中的主要保护手段,就是按钮防治抖动部分,因此在等待按钮按下后,采用一小段的延迟程序,再次判定是否有按钮的按下,在进入播放程序。

23

结 论

这次毕业设计,是我大学四年来学到知识的一次综合运用,对于此次工作,首要考虑到的是低成本的概念,音乐门铃在市面上一早就存在,想要继续得以发展,必须在成本上下功夫,这次设计的主要亮点是功放电路采用最简单的电路设计,只有一块芯片跟两个电阻以及两个电容。其次是程序方面的设计,主要解决的问题是如何在一个按钮的基础上,实现歌曲的轮换以及播放,这是此次设计的难点之一,另外,焊接是此次设计所用时间最多的一部分,因为本人的焊接技术不到位,焊接能力不高,所以造成焊接的屡次失败,不过我在失败中吸取经验,在完成焊接后,焊接技术得到很大的提高。

毕业设计还是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整单片机设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,解决实际工程问题的能力,同时也提高我查阅文献资料、设计手册、设计规范以及电脑制图等其他专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富,并且意志品质力,抗压能力及耐力也都得到了不同程度的提升。这是我们都希望看到的也正是我们进行毕业设计的目的所在。

总体来讲,这次设计让我对大学四年来的知识做了一个充分的整合,对其了解深度再次上了一个层次,希望在日后工作中能不断锻炼,提升自我!

24

参考文献

[1] 朱光中,黄云龙,范一鸣.AT89C51单片机在可视对讲门铃中的应用[J]. 机 电一体化,2002,第6期:66-68.

[2] 余永权.nash单片机原理及应用[D].北京:电子工业出版社,1997. [3] 用单片机实现电子音乐门铃[J].无线电,2007,第534期:38-39. [4] 刘茂荣.画说乐理(二十)——音程 [J].琴童,2010,第8期:18-19. [5] 苏成富. 多功能音乐门铃[J]. 电机电器技术,2000,第3期:20-21. [6] 魏俊民.机电一体化系统设计[D].北京:中国纺织出版社,l998. [7] 侯文芳.Protel99SE在电子技术实验中的应用[J].科技信息,2011,第2期:

238-238.

[8] 王毅.单片机器件应用手册[D].北京:人民邮电出版社,1994.

[9] 吴宁. 80X86/Pentium 微型计算机原理及应用[M]. 北京:电子工业出版 社,2004:1-249.

[10] 肖金球. 单片机原理与接口技术[M]. 北京: 清华大学出版社, 2004:1-323. [11] 志宽.LM386功放IC的使用方法[J].家庭电子,2003,第8期:43-43. [12] 佩 苗文斌 李森.浅谈KeilC的常用技巧[J].企业技术开发,2011,第1期:

88-88.

[13] AT89C51 DATA SHEEP Philips Semiconductors 1999.dec.

[14] HeZuxi. Colour televsion elements and maintain [M]. Beijing: The electron industry book concern,1979:15-18.

25

致 谢

在此论文撰写过程中,要特别感谢我的导师李优新老师的导与督促,同时感谢她的谅解与包容。没有李优新老师的帮助也就没有今天的这篇论文。求学历程是艰苦的,但又是快乐的。感谢我的班主任姚老师,谢谢他在这四年中为我们全班所做的一切,他不求回报,无私奉献的精神很让我感动,再次向他表示由衷的感谢。在这四年的学期中结识的各位生活和学习上的挚友让我得到了人生最大的一笔财富。在此,也对他们表示衷心感谢。

谢谢我的父母,没有他们辛勤的付出也就没有我的今天,在这一刻,将最崇高的敬意献给你们!

本文参考了大量的文献资料,在此,向各学术界的前辈们致敬!

26

附录A 主文件程序

#include #include \

void Delay1ms(unsigned int count) { }

//*****************************Music****************************************************** //生日快乐

unsigned char code Music_Girl[]={0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02, 0x15,0x02,

0x11,0x01, 0x0F,0x03, 0x0F,0x03, 0x10,0x02, 0x0F,0x02,

0x16,0x02, 0x15,0x01, 0x0F,0x02, 0x0F,0x02, 0x0F,0x03,

0x0F,0x03, 0x19,0x02, 0x17,0x02, 0x15,0x02, 0x11,0x0C,

0x10,0x16, 0x18,0x03, 0x18,0x03, 0x17,0x02, 0x15,0x02,

0x16,0x02, 0x15,0x16, 0x00,0x00 }; //小星星

unsigned char code Music_Same[]={ 0x15,0x02, 0x15,0x02, 0x19,0x02, 0x19,0x02, 0x1A,0x02,

0x1A,0x02, 0x19,0x01, 0x18,0x02, 0x18,0x02, 0x17,0x02,

0x17,0x02, 0x16,0x02, 0x16,0x02, 0x15,0x01, 0x19,0x02,

unsigned int i,j; for(i=0;i

27

0x19,0x02, 0x18,0x02, 0x18,0x02, 0x17,0x02, 0x17,0x02,

0x16,0x01, 0x19,0x02, 0x19,0x02, 0x18,0x02, 0x18,0x02,

0x17,0x02, 0x17,0x02, 0x16,0x01, 0x15,0x02, 0x15,0x02,

0x19,0x02, 0x19,0x02, 0x1A,0x02, 0x1A,0x02, 0x19,0x01,

0x18,0x02, 0x18,0x02, 0x17,0x02, 0x17,0x02, 0x16,0x02,

0x16,0x02, 0x15,0x01, 0x00,0x00 }; //有只雀仔跌落水

unsigned char code Music_Two[] ={0x19,0x02, 0x1A,0x03, 0x19,0x03, 0x18,0x02, 0x17,0x02,

0x18,0x02, 0x19,0x00, 0x16,0x02, 0x17,0x02, 0x18,0x01,

0x17,0x02, 0x18,0x02, 0x19,0x01, 0x19,0x02, 0x1A,0x03,

0x19,0x03, 0x18,0x02, 0x17,0x02, 0x18,0x02, 0x19,0x00,

0x16,0x01, 0x19,0x01, 0x17,0x02, 0x15,0x00, 0x00,0x00 };

//*********************************************************************************** main() {

{

Delay1ms(10);

InitialSound(); while(1){

if(key==0)

28

if(key==0)

Play(Music_Girl,0,3,360); do {

}while(key==1); if(key==0) { Delay1ms(10);

if(key==0)

Play(Music_Same,0,3,360); do

{

}while(key==1); if(key==0) { Delay1ms(10);

if(key==0) Play(Music_Two,0,3,360);}

} } } }

29

附录B 播放文件程序

/**************************************************************************

File Name: SoundPlay.h Author: Jiang Jian Jun Created: 2005/5/16 Modified:

*******************************************************************************/ /*

**************************************************************************

曲谱存贮格式 unsigned char code MusicName{音高,音长,音高,音长...., 0,0};

音高由三位数字组成:

音长最多由三位数字组成:

个位表示音符的时值,其对应关系是:

|数值(n): |0 |1 |2 |3 | 4 | 5 | 6

30

SOUND PLAY FOR 51MCU COPYRIGHT (c) 2005 BY JJJ.

-- ALL RIGHTS RESERVED --

NO 1.0

Revision:

末尾:0,0 表示结束(Important)

个位是表示 1~7 这七个音符

十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。

|几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n

十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点

调用演奏子程序的格式

***************************************************************************/

#ifndef __SOUNDPLAY_H_REVISION_FIRST__ #define __SOUNDPLAY_H_REVISION_FIRST__

//**************************************************************************

#define SYSTEM_OSC #define SOUND_SPACE 每4分音符间隔 sbit BeepIO = sbit key=P3^7; unsigned

int

code

FreTab[12]

=

{ 262,277,294,311,330,349,369,392,415,440,466,494 }; //原始频率表 unsigned char code SignTab[7] = { 0,2,4,5,7,9,11 };

//1~7在频率表中的位置

P1^0;

//定义输出管脚

12000000 4/5

//定义晶振频率12000000HZ //定义普通音符演奏的长度分率,//

Play(乐曲名,调号,升降八度,演奏速度);

|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束; |调号(0-11) : 是指乐曲升多少个半音演奏; |升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度; |演奏速度(1-12000): 值越大速度越快;

unsigned char code LengthTab[7]= { 1,2,4,8,16,32,64 };

unsigned char Sound_Temp_TH0,Sound_Temp_TL0; //音符定时器初值暂存

31

unsigned char Sound_Temp_TH1,Sound_Temp_TL1; //音长定时器初值暂存 //************************************************************************** void InitialSound(void) {

BeepIO = 0;

Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;

// 计算

TL1应装入的初值 (10ms的初装值)

Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%6; // 计算

TH1应装入的初值 }

void BeepTimer0(void) interrupt 1 //音符发生中断 { }

//************************************************************************** void {

unsigned int NewFreTab[12]; unsigned char i,j;

32

TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TMOD |= 0x11; ET0 = 1; ET1 = 0; TR0

= 0;

TR1 = 0; EA = 1;

BeepIO = !BeepIO;

TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0;

Play(unsigned char *Sound,unsigned char Signature,unsigned

Octachord,unsigned int Speed)

//新的频率表

unsigned

unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD; for(i=0;i<12;i++)

int

Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;

// 根据调号及升降八度来生成新的频

率表

Point = 0;

Tone = Sound[Point]; Length = Sound[Point+1];

LDiv0 = 12000/Speed;

33

{ }

SoundLength = 0;

while(Sound[SoundLength] != 0x00) //计算歌曲长度 { }

SoundLength+=2; j = i + Signature; if(j > 11) { } else

NewFreTab[i] = FreTab[j]; j = j-12;

NewFreTab[i] = FreTab[j]*2;

if(Octachord == 1)

NewFreTab[i]>>=2; NewFreTab[i]<<=2;

else if(Octachord == 3)

// 读出第一个音符和它时时值

// 算出1分音符的长度(几个10ms)

LDiv4 = LDiv0/4; // 算出4分音符的长度

LDiv4 = LDiv4-LDiv4*SOUND_SPACE; // 普通音最长间隔标准 TR0

= 0;

TR1 = 1;

while(Point < SoundLength) {

SL=Tone;

//计算出音符

//计算出高低音

SM=Tone/10; SH=Tone/100;

//计算出是否升半

//查出对应音符的

CurrentFre = NewFreTab[SignTab[SL-1]+SH];

频率

if(SL!=0) {

if (SM==1) CurrentFre >>= 2; if (SM==3) CurrentFre <<= 2; Temp_T

//低音 //高音

=

65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//计算计数器初值

}

SLen=LengthTab[Length]; //算出是几分音符 XG=Length/10; FD=Length/100; LDiv=LDiv0/SLen;

//算出连音音符演奏的长度(多少个

//算出音符类型(0普通1连音2顿音)

Sound_Temp_TH0 = Temp_T/256; Sound_Temp_TL0 = Temp_T%6; TH0 = Sound_Temp_TH0;

TL0 = Sound_Temp_TL0 + 12; //加12是对中断延时的补偿

10ms)

if (FD==1)

LDiv=LDiv+LDiv/2; if(XG==0)

34

if(XG!=1)

//算出普通音符的演奏长度

if (SLen<=4)

LDiv1=LDiv-LDiv4;

else

LDiv1=LDiv*SOUND_SPACE;

else

LDiv1=LDiv/2;

//算出顿音的演奏长度

else LDiv1=LDiv; if(SL==0) LDiv1=0;

LDiv2=LDiv-LDiv1;

//算出不发音的长度if (SL!=0) { TR0=1;

for(i=LDiv1;i>0;i--) //发规定长度的音 { while(TF1==0);

TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TF1=0;

}

}

if(LDiv2!=0) { TR0=0; BeepIO=0;

for(i=LDiv2;i>0;i--) //音符间的间隔 { while(TF1==0);

TH1 = Sound_Temp_TH1; TL1 = Sound_Temp_TL1; TF1=0;

}

}

Point+=2; Tone=Sound[Point];

35

}

}

Length=Sound[Point+1];

BeepIO = 0;

//************************************************************************** #endif

36

本文来源:https://www.bwwdw.com/article/ukd.html

Top