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

上传人:沈*** 文档编号:42675442 上传时间:2021-11-27 格式:DOC 页数:44 大小:436KB
收藏 版权申诉 举报 下载
基于51单片机的低成本音乐门铃设计毕业论文_第1页
第1页 / 共44页
基于51单片机的低成本音乐门铃设计毕业论文_第2页
第2页 / 共44页
基于51单片机的低成本音乐门铃设计毕业论文_第3页
第3页 / 共44页
资源描述:

《基于51单片机的低成本音乐门铃设计毕业论文》由会员分享,可在线阅读,更多相关《基于51单片机的低成本音乐门铃设计毕业论文(44页珍藏版)》请在装配图网上搜索。

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

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

3、, 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 co

4、st, 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

5、. 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, t

6、he 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 i

7、n 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 目录目

8、录1 绪论.11.1 题目背景及目的 .11.2 国内外研究状况 .11.3 题目研究方法 .21.4 论文构成及研究内容.22 电子音乐门铃系统简介.32.1 分析功能要求.32.2 系统原理与控制方法 .42.3 单片机发音概述 .42.3.1 音调.42.3.2 节拍.53 系统硬件设计.73.1 原理简介 .73.2 主电路设计 .83.3 音乐功放电路设计 .113.3.1 概述.113.3.2 特性.123.3.3 应用电路.123.3.4 芯片使用方法与自激啸叫防治措施.144 系统软件设计.164.1 软件介绍 .164.2 主程序设计 .184.3 播放文件程序设计 .205

9、 系统调试与实现.225.1 硬件调试与实现 .225.2 软件调试与实现 .22结论.24参考文献.25致谢.26附录 A 主文件程序.27附录 B 播放文件程序.30 11 绪论绪论以下是关于此次毕业设计的题目北京以及目的,国内外研究状况,题目研究方法还有论文构成和研究内容的介绍。1.1 题目背景及目的题目背景及目的随着时代的发展和进步,控制智能化、仪器小型化、功耗微小化得到广泛关注。在这些领域中,单片机起到了举足轻重的作用,这就把单片机的应用提升到重要的地位,单片机应用系统设计就成为新的技术热点。 近几年来,随着市场上智能化楼宇的不断升温,门铃系统已作为智能化办公室和智能化住宅小区的一个

10、重要组成部分,被各商家和用户所接受。人们已开始习惯用门铃系统代替传统的铁钥匙去管理各通道门,这使门铃系统得到了飞跃性的发展。随着单片机技术的飞速发展,通过单片机实现人们对物质生活的满足,这将会日益成为今后的一个重要发展的方向1。由于电子音乐门铃具有铃声悦耳动听,价格低廉、耗电少等优点,在现代家具中的应用越来越流行。有了电子音乐门铃,在有客人在拜访时,听到的将不再是单调的提示等候音,而是不同凡响的流行音乐旋律、特效音等个性化的电子声乐。1.2 国内外研究状况国内外研究状况目前在家庭住宅中使用的电子门铃大多数是没用音乐,只有简单的叮咚叮当的声音,比较单调。其中绝大多数没有按钮提示以及其他功能,要不

11、就是造价昂贵,诸多缺点。经了解,现在市场上所有销售的门铃主要有以下几种:1、敲击式电子音乐门铃,采用声控触发电路和音乐集成电路组成,通过一个可调电阻来控制喇叭的灵敏度,一个电容快速充电来维持后续工作;2、不用按钮的音乐门铃,采用红外线发射接收电路和自激多谐振荡电路构成,荡发出的红外线被人遮挡住的一瞬间,扬声器就发出有没动听的音乐;3、带们演示电路的音乐门铃,采用低功耗交流继电器 TLP3502 和高频小功率管组成。只要按下门铃按钮就会同时打开门灯,使主人可以通过门镜来识别来 2客身份。门灯经一段时间的延时后自动熄灭;4、无限遥控门铃,采用脉冲调制发射,及石英晶振稳频技术,实现远距离遥控。1.3

12、 题目研究方法题目研究方法充分调查研究并且认真深刻学 51 芯片功能以及使用方法,掌握单片机应用系统的开发流程、硬软件系统设计以及相关工具软件的使用方法,同时对被控的实际应用对象有更深入的了解,达到学以致用、系统地整合所学专业知识的目的,达到设计的系统抗干扰能力强、稳定可靠、成本低廉、使用方便,满足相关的功能要求。掌握单片机的体系结构、工作原理、指令系统与编程技巧以及相关接口技术,熟悉单片机开发工具并掌握单片机应用系统的设计开发流程;选择并设计合理的补偿算法与程序结构;掌握相应的抗干扰措施;设计出系统的硬件结构与接口电路,编写相关软件。1.4 论文构成及研究内容论文构成及研究内容论文主要有绪论

13、、电子音乐门铃系统简介(分析功能要求、系统原理与控制方法) 、系统硬件设计、系统软件设计、系统调试与实现、结论、参考文献、致谢、附录各部分组成。研究内容为开发研究出低成本音乐门铃。本文利用单片机体积小、速度快、功能强、性能可靠、价格低廉等优点,介绍了用 AT89C52 单片机设计电子音乐门铃的方法,系统实现简单、功能稳定。日后可在此基础上进一步完善,如增加语音防盗报警功能、有人无人语音门铃切换功能,甚至增加可视对讲功能等。 3 42 电子音乐门铃系统简介电子音乐门铃系统简介了利用单片机为主控制器设计电子门铃的具体方法。该电子门铃具有普通门铃的功能,而且还具有一些扩展功能。2.1 分析功能要求分

14、析功能要求本设计要求是要完成低成本音乐门铃设计,芯片可采用 51 芯片,89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS 8 位微处理器,俗称单片机。2AT89C2051 是一种带 2K 字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 100 次。该器件采用 ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATME

15、L 的 AT89C51 是一种高效微控制器,AT89C2051 是它的一种精简版本。AT89C 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性:与 MCS-51 兼容 , 4K 字节可编程闪烁存储器,寿命:1000 写/擦循环,数据保留时间:10 年,全静态工作:0Hz-24MHz,三级程序存储器锁定, 1288 位内部 RAM, 2 可编程 I/O 线,两个 16 位定时器/计数器, 5 个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路2。因为需要用到播放音乐功能,所以需要用到功放电路,其中采用 LM386 芯片, LM386 是一种音频集成功放,具

16、有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中。LM386 是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为 20。但在 1 脚和 8 脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在 6V 电源电压下,它的静态功耗仅为24mW,使得 LM386 特别适用于电池供电的场合。 52.2 系统原理与控制方法系统原理与控制方法利用单片机89C52产生乐曲音符,再把乐谱翻译成计算机音乐语言,由单片机

17、进行信息处理,在经过信号放大,由喇叭放出乐曲声。通过控制定时器的定时时间来产生不同频率的方波,驱动喇叭发出不同音阶的声音,再利用延迟来控制发音时间的长短,即可控制音调中的节拍。把乐谱中的音符和相应的节拍变换为定常数和延迟常数,作为数据表格存放在存储器中。由程序查表得到定时常数和延迟常数,分别用以控制定时分别代表某一频率的声音。3以 STC89C52RC 为核心,加上芯片最小系统电路,按钮,外围电源,LM386 功放电路,扬声器电路组成。该系统通过 STC89C52RC 单片机的中断调用来实现将音符转换为相应的电信号输出到扬声器,组成一首完整的音乐,并通过按钮实现歌曲的转换。2.3 单片机发音概

18、述单片机发音概述一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐振频率。单片机演奏的音乐基本都是单音频率。因此单片机演奏音乐比较简单,只需能清楚“音调”和“节拍”两个概念即可。音调表示一个音符唱多高的频率。节拍表示一个音符唱多长的时间。知道了一个音符的频率后,便可以让单片机发出相应频率的振荡信号,从而产生相应的音符声音。通过单片机的定时器进行定时中断,在中断服务程序中将单片机上完结 LM386 的 I/O 口来回置高电平或者是低电平的,从而让扬声器发出声音。通过节拍计算出每个音符所需要的时间,采用循环延时的方法来实现控制一个音符唱多长的时间,从而构成一首完整的音乐

19、。2.3.1 音调音调主要由声音的频率决定。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随响度增加而下降,高频纯音的音调却随响度增加而上升。 音调的高低还与发声体的结构有关,因为发声体的结构影响了声音的频率。 6 大体上,2000 赫兹以下的低频纯音的音调随响度的增加而下降,3000 赫兹以上高频纯音的音调随响度的增加而上升。例如,在音乐中常常把中音 C 上方的 A 音定位标准高音,其频率F=440HZ,其余音均与其进行比较。F1 和 F2 为两个音符,如果这两个音符的频率相差一倍时,也即 F2=2*F1 时,则称 F2 比 F1 高一个频程。在音乐中音符 1 与

20、音符 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,它以

21、振荡器的十二分频信号为计数脉冲。设外接晶振的振荡器频率为 f,则定时器的预置初始值有以下公式来确定:Temp = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC)TH = Temp /256TL = Temp %2562.3.2 节拍在音乐中,时间被分成均等的基本单位,每个单位叫做一个“拍子”或 称一拍。拍子的时值是以音符的时值来表示的,一拍的时值可以是四分音符(即以四分音符为一拍) ,也可以是二分音符(以二分音符为一拍)或八分音符(以八分音符为一拍) 。拍子的时值是一个相对的时间概念,比如当乐 曲的规定速度为每分钟 60 拍时,每拍占用的时间

22、是一秒,半拍是二分之一 秒;当规定速度为每分钟 120 拍时,每拍的时间是半秒,半拍就是四分之一 秒,依此类推。拍子的基本时值 7确定之后,各种时值的音符就与拍子联系在一起。例如,当以四分音符为一拍时,一个全音符相当于四拍,一个二分音符相当于两拍, 八分音符相当于半拍,十六分音符相当于四分之一拍;如果以八分音符做为 一拍,则全音符相当于八拍,二分音符是四拍,四分音符是两拍,十六分音 符是半拍4。对于一拍的发音时间,如果乐曲没有特殊说明,一般来说,一拍大约为400450ms。对于计算机编程 节拍码及节拍数如图 2.15所示:图 2.1 节拍码及节拍数 8 93 系统硬件设计系统硬件设计系统以AT

23、89C51单片机为核心,加上外围电源时钟电路、LM386功放电路及扬声器电路组成。Atmel公司的生产的AT89C51单片机是一种低功耗1氐电压、高性能的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行IO口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,片内集成4K字节可改变程序Flash存储器,具有低功耗,速度快,程序擦写方便等优点,完全满足本系统设计需要。系统通过P3连接功放电路从而驱动扬声器产生电子声乐,P1口连接门铃按键。3.1 原理简介原理简介总体设计方案本系统采用 STC89C52 作为系统核心,音乐是由音符组成不同的音符是由相应频率的振动产生产生

24、不同的音频需要有不同固定周期的脉冲信号。要产生音频林冲,只要算出某一音颉的周期 T,将此周期 T 除2即为毕周期的时间。我们利用单片机的内部定时器 TO,使其工作在计数器模式 MODEl 下韧始化适当的计数值 THO 及 TLO 以计时这个半周期时间每当计时时间到后就将输出脉冲的 P1.0 口反相然后重复计时此半周期时间。再对 P1.0 口反相就可在单片机 Pl.0 引脚上得到此频率的脉冲。P1.0 引脚脉冲接 LM386 作音频功放,然后辅出到扬声器从而发出美妙的乐音6。通过音频功放电路,把信号输出到扬声器,播出美妙的音乐。只要一按下按钮,就会有音乐播出,等一首歌播放完毕后,当再次按下按钮,

25、就会播放下一首音乐,如此循环,知道再次出现第一首音乐为止。本系统可以奏出三首不同旋律的歌曲。为绘制此次电路图,采用 DXP2004 软件,Protel DXP2004 是 Altium 公司于 2004 年推出的最新版本的电路设计 软件,该软件能实现从概念设计,顶层设计直到输出生产数据以及这之间的所有分析验证和设计数据的管理。当前比较流行的 Protel 98、Protel 99 SE,就是它的前期版本。 10Protel DXP 2004 已不是单纯的 PCB(印制电路板)设计工具,而是由多个模块组成的系统工具,分别是SCH(原理图)设计、 SCH(原理图)仿真、PCB(印制电路板)设计、

26、Auto Router(自动布线器)和 FPGA 设计等,覆盖了以 PCB 为核心的整个物理设计。该软件将 项目管理方式 、原理图和 PCB 图的双向同步技术、多通道设计、拓朴自动布线以及电路仿真等技术结合在一起,为电路设计提供了强大的支持。 与较早的版本 Protel99 相比,Protel DXP 2004 不仅在外观上显得更加豪华、人性化,而且极大地强化了电路设计的同步化,同时整合了VHDL 和 FPGA 设计系统,其功能大大加强了7。此电子音乐门铃的电路设计方案如图 3.1 所示图 3.1 PCB 绘制电路图3.2 主电路设计主电路设计AT89C5l 单片机简介:单片机发展至今已有 2

27、0 余年的历史,形成了约 50 个系列 400 余种机型,设计者不可能对每一种芯片都熟悉,因此在选择芯片时切勿追赶时髦,使用从未接触过的芯片。单片机控制系统的核心器件是单片机芯片,它提供的功能和资源对整个应 11用系统所需要的支持电路、接口硬件设计以及软件程序设计起着关键的作用。ATMEL 公司以 E2PROM 技术和 Intel 公司的 80C31 单片机核心技术交换,从而取得 80C31 核的使用权。ATMEL 公司把自身的优势,即先进的 Flash 技术和80C31 核相结合,从而生产出 Flsah 单片机 AT89C51 系列8。ATMEL89 系列单片机具有下列优点:内部含 Flsa

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

29、51 系列单片机是兼容的系列,故对于 8051 的用户来说,用 ATMEL 公司的 89 系列机进行取代 8051的系统设计,是轻而易举的事10。AT89C51 是一种低功耗低电压、高性能的 8 位单片机,其输出引脚和指令系统都与 MCS 一 51 兼容,双列直插封装图如 3.214所示。它具有下列主要功能: 12图 3.2 51 芯片引脚图其最小系统电路如图 3.3 所示:图 3.3 最小系统电路 13其最小系统实物电路如图 3.4 所示:图 3.4 最小系统实物电路图3.3 音乐功放电路设计音乐功放电路设计LM386 引脚图,特性及典型功放电路和芯片使用方法与自激啸叫防治措施介绍。3.3.

30、1 概述LM386 是美国国家半导体公司生产的音频功率放大 器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为 20。但在 1 脚和 8 脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至 200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在 6V 电源电压下,它的静态功耗仅为24mW,使得 LM386 特别适用于电池供电的场合。 LM386 的封装形式有塑封 8 引线双列直插式和贴片式。其封装图如 3.5 所示: 14 图 3.5 LM386 引脚图3.3.2 特性静态功耗低,约为 4mA,可用于电池供电,工作电压范围宽,4-12V or 5-18V,

31、外围元件少,电压增益可调,20-200, 低失真度。LM386 电源电压 4-12V,音频功率 0.5w。LM386 音响功放是由 NSC 制造的,它的电源电压范围非常宽,最高可使用到 15V,消耗静态电流为 4mA,当电源电压为 12V 时,在 8 欧姆的负载情况下,可提供几百 mW 的功率。它的典型输入阻抗为 50K。3.3.3 应用电路如图 3.6 所示图 3.6 功放电路图 15焊接功放电路实物图如 3.7 所示图 3.7 功放电路实物图喇叭实物图如 3.8 所示图 3.8 喇叭实物图 163.3.4 芯片使用方法与自激啸叫防治措施LM386 是电子产品和家庭业余制作中广泛使用的音频功

32、率放大 Ic。其典型应用电路如图 3.9 所示。在绝大多数场合或单独使用的情况下,LM386 比较正常;但在和其它电路搭配之后,有可能产生自激和灵敏度降低等现象。就该 Ic的使用方法和自激啸叫的防治措施介绍如下。图 3.9 典型应用电路1、入信号过强引起的自激啸叫。对于由于输入信号过强引起的啸叫,可在LM386第、脚之间加阻容网络,批量应用时,R的阻值可由实验决定,或将R代换为微调电位器w,若信号仍然过强,可将LM386第、脚悬空。2、高频自激。防高频自激电路原理如图 3.10 所示。对高频自激引起的啸叫可在信号输入端与地之间接一只 47oo#-o F 的瓷片电容,在第脚与地之间接一只 l00

33、 470opF 瓷片电容。作单端输人时,闲置的输入端不要悬空而要接地。3、低频自激。对于低频自激引起的啸叫可试在输入端与地之间接一只6822kn 电阻,将第脚的滤波电容增大到 1000F,在制作印制板时,iM386 尽量靠近电源输出端。4、在使用其它品牌产品(如(jI386、l(A386 等)时,有的 IC 会对高音频的灵敏度 17有影响。可在其第脚与地之间接一只 01 F 瓷片电容,在第、脚间(注:不同于第脚接地)接一保 01 F 瓷片电容11。图 3.10 防高频自激电路原理图 184 系统软件设计系统软件设计本设计需要用到的软件都是大众一般使用的软件,具有方便简易快捷的优点,程序用 C

34、语言编程,也是编程的主流语言,方便日后修改与调试。4.1 软件介绍软件介绍本系统程序开发需要用到 keil、STC-ISP V35 软件以及郭天祥 51 开发板。以下是关于 keil 和 STC-ISP 的简介。现代电子系统的基本核心是嵌人式计算机系统,而单片机是最典型、最广泛、最普及的嵌入式系统。学好单片机,灵活应用 Keil 软件在电子、科技领域灵活应用单片机技术,将是带动国家科技发展、增强国家综合实力的必经之路。Keil 软件是目前最流行开发 MCS-51 系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出。Keil 提供了包括 C 编译器、宏汇编、连接器、库管

35、理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行 Keil 软件需要Pentium 或以上的 CPU,16MB 或更多 RAM、20M 以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP 等操作系统。掌握 Keil 软件的使用对于使用 51 系列单片机是十分必要的,即使不使用c 语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令单片机开发事半功倍。12STC-ISP 是单片机下载编程烧录软件,是针对 STC 系列单片机而设计的,可下载 STC89 系列、12C2052 系列和 12C5410

36、 等系列的 STC 单片机,使用简便,现已被广泛使用。程序控制流程图如图 4.1 所示。 19准备调用初始化程序读 P3 口,判断有无按键按下 调用初始化程序 调用延时子程序读 P3 口,判断有无按键按下 调用初始化程序 调用延时子程序调用延时子程序调用播放子程序调用播放子程序读 P3 口,判断有无按键按下 调用初始化程序 读 P3 口,判断有无按键按下 调用初始化程序 读 P3 口,判断有无按键按下 调用初始化程序 读 P3 口,判断有无按键按下 调用初始化程序 调用播放子程序图 4.1 程序控制流程图 204.2 主程序设计主程序设计本系统首先建立音乐,把音乐的音符找出,建立各个音符的常数

37、表,如下图 4.2:图 4.2 音符常数表编写程序时,我们把表建立在一个数组内,每个发音符使用一个字节,字节高四位(简谱码)代表音符的高低,低四位(节拍码)代表音符的节拍。如果一拍为 0.4 秒,1/4 秒就是 0.1 秒,只要设定延时时间就可以求得节拍的时间。假设 1/4 拍为 1 DELAY,则 1 拍应该为 4 DELAY,以此类推。所以只要求得1/4 拍的 DELAY 时间,其余的节拍就是它的倍数。1/4 拍的延时时间在此我们设为 125 毫秒。主文件程序由主程序、延时程序以及歌曲程序组成。主程序首先对所有端口进行初始化操作,接着进入不断循环部分,直到按键按下,进入防止抖动程序,如果不

38、是抖动,则进入音乐播放程序,直到音乐播放完毕,再次进入等待按键按下部分,直到第二次按键按下,再次进入防止抖动程序,如果不是抖动,则再次进入音乐播放程序,直到音乐播放完毕,直到第三次按键按下,最后一次次进入防止抖动程序,如果不是抖动,则最后一次次进入音乐播放程序,直到音乐播放完毕,回到循环起点,等待第四次按键按下部分,如此类推。程序如下:main()InitialSound();while(1)if(key=0) 21Delay1ms(10);if(key=0)Play(Music_Girl,0,3,360);dowhile(key=1);if(key=0)Delay1ms(10);if(key

39、=0)Play(Music_Same,0,3,360);dowhile(key=1);if(key=0)Delay1ms(10);if(key=0)Play(Music_Two,0,3,360);延时程序部分。为防止按键抖动,对门铃进行有效保护,设计了防止抖动延时程序,程序如下:void Delay1ms(unsigned int count) 22unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);4.3 播放文件程序设计播放文件程序设计播放文件程序由初始化程序函数,音符发生中断函数,播放函数组成。初始化函数是对芯片端口进行初始化操作,以确

40、定中断模式以及端口初始值,程序如下:void InitialSound(void)BeepIO = 0;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256;/ 计算 TL1 应装入的初值 (10ms 的初装值)Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;/ 计算 TH1 应装入的初值 TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0 x11;ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;EA = 1;音符发生中断函数用于接收

41、到中断信号时,进行的声音播放操作,程序如下:void BeepTimer0(void) interrupt 1/音符发生中断 23BeepIO = !BeepIO;TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0;播放函数用于主文件程序中调用音符的音调以及节拍,从而产生中断,播放音乐,其部分程序如下:while(Point = 2; /低音 if (SM=3) CurrentFre = 2; /高音Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);/计算计数器初值Sound_Temp_TH0

42、 = Temp_T/256; Sound_Temp_TL0 = Temp_T%256; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0 + 12; /加 12 是对中断延时的补偿 24 255 系统调试与实现系统调试与实现这是本设计较为困难的一部分,需要经过反反复复的调试,才能达到理想中的效果,以下将分文硬件与软件两部分介绍此次调试的过程,以及调试过程中遇到的困难和解决办法。5.1 硬件调试与实现硬件调试与实现考虑到本设计以低成本为主,所以一切原件以便宜为上,本设计开发工具需要用到一个电烙铁,一个铁架,一卷焊锡,一盒松脂,1 块 6X7CM 开发板,1 块

43、 6X10CM 开发板,一块 STC89C52 芯片以及一块芯片底座,一个 USB 接口,一个电源开关,1 个 10uf 电容,2 个 30pf 电容,1 个 12Mhz 晶振,一个抖动开关,1 个 10k 电阻,一个 10k 滑动变阻器,一块 lm386 芯片及其底座,1 个220uf 电容,1 个 0.05uf 电容,一个 8 欧姆 5 瓦的扬声器,以及杜邦线若干,插排若干。为方便调试,把系统焊接分为两个部分,其一是 51 单片机最小系统部分,其二是声音功率放大播放部分。这样的焊接不仅有利于系统的调试,还有利于日后对于其他系统的开发,直接利用最小系统以及杜邦线引出端口即可。由于本人焊接技术

44、不到位,常常出现短路问题,在第一次焊接完成后,多出出现短路,最后用万用表蜂鸣档位逐点测试,在重新焊接。其中还试过由于本人疏忽,直接把芯片焊接(没通过芯片底座)在开发板上,导致芯片烧坏,不得将其更换。开始时选用的音乐功放电路,也是基于 LM386 芯片,采用的是较为复杂的功放电路,但是焊接后,经过一系列调试,反复查找了失败原因,还是没有找到解决办法,但是后来突然想到,这次的设计是基于低成本的基础,一切得从简,所以选择了就只有一个 10k 滑动变阻器,一块 lm386 芯片及其底座,1 个 220uf 电容,1 个 0.05uf 电容所组成的功放电路,再次调试后,放出了声音,但是声音的音调和频率都

45、与理想中有所差距,应该是由于喇叭的自身额定功率与质量有关,需要调整的话应该是在电源供电以及喇叭的质量方面修正,但这是基于低成本的设计,只要喇叭有声音,效果一般就可了。5.2 软件调试与实现软件调试与实现 26程序主要取自一个音乐播放程序,但没有功率放大部分,更没有多音乐轮流播放部分,按钮部分。在此基础之上,首先是对其进行一定的修改,在保留原来音乐播放程序的前提下,进行主程序的设计,首先对所有端口进行初始化操作,接着进入不断循环部分,直到按键按下,进入防止抖动程序,如果不是抖动,则进入音乐播放程序,直到音乐播放完毕,再次进入等待按键按下部分,直到第二次按键按下,再次进入防止抖动程序,如果不是抖动

46、,则再次进入音乐播放程序,直到音乐播放完毕,直到第三次按键按下,最后一次次进入防止抖动程序,如果不是抖动,则最后一次次进入音乐播放程序,直到音乐播放完毕,回到循环起点,等待第四次按键按下部分,如此类推。在 keil 软件经不断改进后,生成 hex 文件,再用郭天祥 51 开发板烧入程序,并通过 stc-isp 烧录软件烧录后,最终得以完成。再把烧录好的 STC89C52 芯片摆放到已经焊接好的电路板上,按下按钮,听到第一首音乐,在第一首音乐播放完毕后,再按下按钮,听到第二首音乐,在第二首音乐播放完毕后,再次按下按钮,听到第三首音乐,在第三首音乐播放完毕后,再按下按钮,听到第一首音乐,如此类推。

47、程序在开始之初是用简单的中断延迟来实现,对于编歌曲来讲需要很大的工作量,在网上查找大量的资料之后,找到了一个做音乐播放器的程序,他也是基于中断延迟来实现播放功能,但是他对于歌曲编辑的灵活性,有很大的发展空间,所以我就采用了他的部分程序。并且利用一个名为 MusicEncode 的软件,可以把基本上所有的音符都转化为 16 位的二进制编码,大大提高了编程效率。其次是主程序的编辑,原来的音乐播放程序只是假单的等待按钮按下后,直接播放一首完整的歌曲后紧接着另外一首完整的歌曲歌。但是这次的设计是要制作一个门铃,而不是音乐播放,考虑到设计需要,我们要实现的功能是按下按钮,播放一小段音乐,停止,等待下一个

48、按钮,再播放,不断循环。所以,主要考虑到的是如何在播放完一首歌曲后,进入在此等待状态。因此,运用了 C 里面 DOWHILE 语句,一直等待按钮的按下。 对于该段程序中的主要保护手段,就是按钮防治抖动部分,因此在等待按 27钮按下后,采用一小段的延迟程序,再次判定是否有按钮的按下,在进入播放程序。 28结结 论论这次毕业设计,是我大学四年来学到知识的一次综合运用,对于此次工作,首要考虑到的是低成本的概念,音乐门铃在市面上一早就存在,想要继续得以发展,必须在成本上下功夫,这次设计的主要亮点是功放电路采用最简单的电路设计,只有一块芯片跟两个电阻以及两个电容。其次是程序方面的设计,主要解决的问题是如

49、何在一个按钮的基础上,实现歌曲的轮换以及播放,这是此次设计的难点之一,另外,焊接是此次设计所用时间最多的一部分,因为本人的焊接技术不到位,焊接能力不高,所以造成焊接的屡次失败,不过我在失败中吸取经验,在完成焊接后,焊接技术得到很大的提高。毕业设计还是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整单片机设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,解决实际工程问题的能力,同时也提高我查阅文献资料、设计手册、设计规范以及电脑制图等其他专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验

50、得到了丰富,并且意志品质力,抗压能力及耐力也都得到了不同程度的提升。这是我们都希望看到的也正是我们进行毕业设计的目的所在。总体来讲,这次设计让我对大学四年来的知识做了一个充分的整合,对其了解深度再次上了一个层次,希望在日后工作中能不断锻炼,提升自我! 29 30参考文献参考文献1 朱光中,黄云龙,范一鸣.AT89C51 单片机在可视对讲门铃中的应用J. 机 电一体化,2002,第 6 期:66-68.2 余永权nash 单片机原理及应用D北京:电子工业出版社,1997.3 用单片机实现电子音乐门铃J.无线电,2007,第 534 期:3839.4 刘茂荣.画说乐理(二十)音程 J.琴童,201

51、0,第 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.家庭电

52、子,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. 31附录附录 A 主文件程序主文件程序#include #include SoundPlay.hvoid Delay1ms(unsi

53、gned int count)unsigned int i,j;for(i=0;icount;i+)for(j=0;j120;j+);/*Music*/生日快乐unsigned char code Music_Girl=0 x0F,0 x03, 0 x0F,0 x03, 0 x10,0 x02, 0 x0F,0 x02, 0 x15,0 x02, 0 x11,0 x01, 0 x0F,0 x03, 0 x0F,0 x03, 0 x10,0 x02, 0 x0F,0 x02, 0 x16,0 x02, 0 x15,0 x01, 0 x0F,0 x02, 0 x0F,0 x02, 0 x0F,0

54、x03, 0 x0F,0 x03, 0 x19,0 x02, 0 x17,0 x02, 0 x15,0 x02, 0 x11,0 x0C, 0 x10,0 x16, 0 x18,0 x03, 0 x18,0 x03, 0 x17,0 x02, 0 x15,0 x02, 0 x16,0 x02, 0 x15,0 x16, 0 x00,0 x00 ;/小星星unsigned char code Music_Same= 0 x15,0 x02, 0 x15,0 x02, 0 x19,0 x02, 0 x19,0 x02, 0 x1A,0 x02, 0 x1A,0 x02, 0 x19,0 x01,

55、0 x18,0 x02, 0 x18,0 x02, 0 x17,0 x02, 0 x17,0 x02, 0 x16,0 x02, 0 x16,0 x02, 0 x15,0 x01, 0 x19,0 x02, 32 0 x19,0 x02, 0 x18,0 x02, 0 x18,0 x02, 0 x17,0 x02, 0 x17,0 x02, 0 x16,0 x01, 0 x19,0 x02, 0 x19,0 x02, 0 x18,0 x02, 0 x18,0 x02, 0 x17,0 x02, 0 x17,0 x02, 0 x16,0 x01, 0 x15,0 x02, 0 x15,0 x02

56、, 0 x19,0 x02, 0 x19,0 x02, 0 x1A,0 x02, 0 x1A,0 x02, 0 x19,0 x01, 0 x18,0 x02, 0 x18,0 x02, 0 x17,0 x02, 0 x17,0 x02, 0 x16,0 x02, 0 x16,0 x02, 0 x15,0 x01, 0 x00,0 x00 ;/有只雀仔跌落水 unsigned char code Music_Two =0 x19,0 x02, 0 x1A,0 x03, 0 x19,0 x03, 0 x18,0 x02, 0 x17,0 x02, 0 x18,0 x02, 0 x19,0 x00,

57、 0 x16,0 x02, 0 x17,0 x02, 0 x18,0 x01, 0 x17,0 x02, 0 x18,0 x02, 0 x19,0 x01, 0 x19,0 x02, 0 x1A,0 x03, 0 x19,0 x03, 0 x18,0 x02, 0 x17,0 x02, 0 x18,0 x02, 0 x19,0 x00, 0 x16,0 x01, 0 x19,0 x01, 0 x17,0 x02, 0 x15,0 x00, 0 x00,0 x00 ;/*main()InitialSound();while(1)if(key=0)Delay1ms(10); 33if(key=0)

58、Play(Music_Girl,0,3,360);dowhile(key=1);if(key=0)Delay1ms(10);if(key=0)Play(Music_Same,0,3,360);dowhile(key=1);if(key=0)Delay1ms(10);if(key=0)Play(Music_Two,0,3,360); 34附录附录 B 播放文件程序播放文件程序/* SOUND PLAY FOR 51MCU COPYRIGHT (c) 2005 BY JJJ. - ALL RIGHTS RESERVED - File Name: SoundPlay.h Author: Jiang

59、Jian Jun Created: 2005/5/16 Modified:NO Revision: 1.0 */* * 曲谱存贮格式 unsigned char code MusicName音高,音长,音高,音长., 0,0; 末尾:0,0 表示结束(Important) 音高由三位数字组成: 个位是表示 17 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音; 百位表示这个音符是否要升半音: 0-不升,1-升半音。 音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 35 |几分音符: |1 |2 |

60、4 |8 |16 |32 |64 音符=2n 十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音 百位是符点位: 0-无符点,1-有符点 调用演奏子程序的格式 Play(乐曲名,调号,升降八度,演奏速度);|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束;|调号(0-11) : 是指乐曲升多少个半音演奏;|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;|演奏速度(1-12000): 值越大速度越快;*/#ifndef _SOUNDPLAY_H_REVISION_FIRST_#define _SOUNDPLAY_H_REVISION_FIRST_/*#def

61、ine SYSTEM_OSC 12000000/定义晶振频率 12000000HZ#define SOUND_SPACE 4/5 /定义普通音符演奏的长度分率,/每 4分音符间隔sbit BeepIO = P10;/定义输出管脚sbit key=P37;unsigned int code FreTab12 = 262,277,294,311,330,349,369,392,415,440,466,494 ; /原始频率表unsigned char code SignTab7 = 0,2,4,5,7,9,11 ; /17 在频率表中的位置unsigned char code LengthTab7

62、= 1,2,4,8,16,32,64 ;unsigned char Sound_Temp_TH0,Sound_Temp_TL0;/音符定时器初值暂存 36unsigned 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)%256;/ 计算TH1 应

63、装入的初值 TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0 x11;ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;EA = 1;void BeepTimer0(void) interrupt 1/音符发生中断BeepIO = !BeepIO;TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0;/*void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,unsigned int Speed)unsi

64、gned int NewFreTab12;/新的频率表unsigned char i,j; 37unsigned int Point,LDiv,LDiv0,LDiv1,LDiv2,LDiv4,CurrentFre,Temp_T,SoundLength;unsigned char Tone,Length,SL,SH,SM,SLen,XG,FD;for(i=0;i 11)j = j-12;NewFreTabi = FreTabj*2;elseNewFreTabi = FreTabj;if(Octachord = 1)NewFreTabi=2;else if(Octachord = 3)NewFre

65、Tabi=2;SoundLength = 0;while(SoundSoundLength != 0 x00)/计算歌曲长度SoundLength+=2;Point = 0;Tone = SoundPoint;Length = SoundPoint+1; / 读出第一个音符和它时时值LDiv0 = 12000/Speed;/ 算出 1 分音符的长度(几个 10ms) 38LDiv4 = LDiv0/4; / 算出 4 分音符的长度 LDiv4 = LDiv4-LDiv4*SOUND_SPACE; / 普通音最长间隔标准 TR0 = 0;TR1 = 1;while(Point = 2; /低音

66、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%256; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0 + 12; /加 12 是对中断延时的补偿 SLen=LengthTabLength%10; /算出是几分音符XG=Length/10%10; /算出音符类型(0 普通 1 连音 2 顿音) FD=Length/100;LDiv=LDiv0/SLen; /算出连音音符演奏的长度(多少个10ms)if (FD=1) LDiv=LDiv+LDiv/2;if(XG!=1)if(XG=0) /算出普通音符的演奏长度 if (SLen0;i-) /发规定长度的音 while(TF1=0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;if(LDiv2!=0)T

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!