收藏 分享(赏)

单片机音乐播放器课程设计.doc

上传人:精品资料 文档编号:8319355 上传时间:2019-06-20 格式:DOC 页数:25 大小:253.50KB
下载 相关 举报
单片机音乐播放器课程设计.doc_第1页
第1页 / 共25页
单片机音乐播放器课程设计.doc_第2页
第2页 / 共25页
单片机音乐播放器课程设计.doc_第3页
第3页 / 共25页
单片机音乐播放器课程设计.doc_第4页
第4页 / 共25页
单片机音乐播放器课程设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、I摘 要本文将介绍一种以89C51型单片机为基础元件设计的自动音乐播放器。在当今这个科技高速发展的时代,生活节奏的加快,人们长期处于工作、学习压力过大的状态,对于调节心理压力而言音乐对于每一个人都十分重要,由此音乐播放器在国内已经开始普及。校园里的上下课的铃声,宿舍内早晨的起床号声音,都由以前枯燥刺耳的铃音转变成了好听的音乐,公路、广场中的计时装置也逐渐开始采用音乐来充当铃声。此装置不仅为人们日常生活的计时提供了方便,同时也为目前快节奏的生活带来了乐趣。本文是应用 MCS-51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C 语言进行程序设计。通过控制单片机内部的定时器来产生不同频率

2、的方波,驱动蜂鸣器发出不同音调的音乐,再利用延迟来控制发音时间的长短。把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。这种控制电路结构简单,可读性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。关键词:单片机;音乐播放器;C 语言。II目 录绪 论 1第 1 章 音乐盒的设计总体方案 2第 2 章 硬件电路设计 32.1 总体设计框图 .32.2 时钟电路 .32.3 复位电路 .32.4 选曲按键电路 .32.5 音频发生及放大电路 4第 3 章 软件程序设计 53.1 单片机发声概述 .53.2 程序流程图 63.3 音乐的产生 7第 4 章

3、 KEIL 仿真软件的应用 8第 5 章 调试与故障分析 95.1 软件程序调试 .95.2 硬件电路调试 .9总 结 .10致 谢 .11参考文献 .12附录 1:原理图 13附录 2:源程序 141绪 论单片机,更确切地说应称为作微控制器,是 20 世纪 70 年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强、体积小、可靠性高、价格低廉。它一面世便在工业控制、数据采集、智能仪表化、机电一体化、家用电器等领域得到了广泛应用,极大地提高了这些领域的技术水平和自动化程度。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。本文将介绍一种以 89C51 型单片机为基础元件

4、设计的自动音乐播放器。在当今这个科技高速发展的时代,生活节奏的加快,人们长期处于工作、学习压力过大的状态,对于调节心理压力而言音乐对于每一个人都十分重要,由此音乐播放器在国内已经开始普及。校园里的上下课的铃声,宿舍内早晨的起床号声音,都由以前枯燥刺耳的铃音转变成了好听的音乐,公路、广场中的计时装置也逐渐开始采用音乐来充当铃声。此装置不仅为人们日常生活的计时提供了方便,同时也为目前快节奏的生活带来了乐趣。本次设计以 89C51 单片机为基础,利用单片机编成技术对芯片进行功能设定,实现音乐的播放。同时,利用单片机的定时器中断,在单片机内部产生所需要的音乐频率,并通过音频功率放大器将音频信号放大,通

5、过蜂鸣器连续播放一段音乐。此设计通过多次测试,音乐声音宏亮清晰,节拍正常,达到预期效果。本文将围绕基于单片机的自动音乐播放器,介绍一些关于单片机的基础知识、音乐播放器的制作原理及方法(其中包括了音乐编程原理) 、定时器的设定,以及仿真软件(Keil、Proteus)的使用方法。2第 1 章 音乐盒的设计总体方案单片机音乐播放器控制系统结构简单,环节较少,因此,单片机音乐播放器包括 LED彩灯、数码管的显示。除了播放音乐有按键外,其余的硬件组成大体相同;对于单片机音乐播放器声音的读出除了蜂鸣器以外,还要配置合适的放大器播放出响亮的声音。单片机按键电路复位电路晶振电路 发声电路时钟电路 电源电路图

6、 1-1 结构总图单片机音乐播放器电路板向着小型化、低功耗、抗千扰、低成本、实用功能方向发展。因此在对单片机的选择趋向于容量适中、功能丰富、性能可靠、价格低的元件。因此本设计中应用最为广泛的 MCS-51 系列 8 位单片机 8051。3第 2 章 硬件电路设计2.1 总体设计框图 80c51单片机扬声器歌曲制按钮电源复位晶振 时钟钟图 2-1 总设计图2.2 时钟电路 EA/VP 31X119X218RESET9RD17W R16INT012INT113T014T115P 10/T1P 11/T2P 123P 134P 145P 156P 167P 178P 00 39P 01 38P 02

7、 37P 03 36P 04 35P 05 34P 06 33P 07 32P 20 21P 21 22P 22 23P 23 24P 24 25P 25 26P 26 27P 27 28P SEN 29ALE/P 30TXD11RXD10GND20Vcc 40STC8 9C51/5289C5 2RCC110u fS0VCCC330pC230p12MHZD1S1S2S3R510K P 32P 35P 12P 32P 35P 12IN+3IN-2GND4V OUT 5GAIN 1GAIN 8BYP ASS7Vcc 6386放放LM386C7 10u fC8100 ufC6104C5473VCC+

8、-BEEP0.25WR210KR31K R41032 1P 1P OWE R112233445566S1SW ITC HVCCRT1104VCCR12.2KVCC图 2-2 时钟电路2.3 复位电路 EA/VP 31X119X218RESET9RD17WR16INT012INT113T014T115P10/T1P11/T2P123P134P145P156P167P178P00 39P01 38P02 37P03 36P04 35P05 34P06 33P07 32P20 21P21 22P22 23P23 24P24 25P25 26P26 27P27 28PSEN 29ALE/P 30TXD

9、11RXD10GND20Vcc 40STC8 9C51/5289C5 2RCC110u fS0VCCC330pC230p12MHZD1S1S2S3R510K P32P35P12P32P35P12IN+3IN-2GND4V OUT 5GAIN 1GAIN 8BYPASS7Vcc 6386放放LM386C7 10u fC8100 ufC6104C5473VCC+-BEEP0.25WR210KR1K R41032 1P1POWE R112233445566S1SWITCHVCCRT1104VCCR12.2KVCC图 2-3 复位电路2.4 选曲按键电路 4S1S2S3P 12P 32P 35图 2-

10、4 选曲电路其中 P3.2 播放暂停, P1.2 上一首歌,P3.5 下一首歌。2.5 音频发生及放大电路IN+3 IN-2GND4V OUT 5GAIN 1GAIN 8BYPASS7Vcc 6386放放LM386C7 10ufC8100ufC6 104C5473VCC+- BEEP0.25WR210KR31K R410RT1104图 2-5 音频发生及放大电路利用 STC89C51 的 I/O 口产生一定频率的方波脉冲,通过 LM386 功放电路驱动喇叭发出不同的音调从而演凑乐曲。5第 3 章 软件程序设计 3.1单片机发声概述一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包

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

12、音、低频纯音的音调随响度增加而下降,高频纯音的音调却随响度增加而上升。 以标准高音 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) T

13、H = Temp /256 TL = Temp %25663.2 程序流程图 开始初始化堆栈初始化音乐输出口及按钮 暂停/播放键是否按下上一曲键是否按下,并且在开机后有一次按下暂停/播放键根据当前状态播放相应歌曲的某个音符按键处理是否下一曲键是否按下,并且在开机后有一次按下暂停/播放键按键处理是否按键处理是否开机后是否按下过暂停/播放键是按键处理否73.3 音乐的产生 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器 T0 来产生这样方波频率信号,

14、因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。若要产生音频脉冲,只要算出某一音频的周期(1/频率) ,再将此周期除以 2,即为半周期的时间。利用定时器计时半周期时间,每当计时终止后就将 P1.0 反相,然后重复计时再反相。就可在 P1.0 引脚上得到此频率的脉冲。利用 AT89C51 的内部定时器使其工作计数器模式(MODE1)下,改变计数值 TH0 及TL0 以产生不同频率的方法产生不同音阶,例如,频率为 523Hz,其周期T1/5231912s, ,则半周期为 1912/2=956s,因此只要令计数器计时 956s,每计数 956 次时将 I/O 反相,就可得到中音 DO(523H

15、z)则初始值为 65535-956 = 64579 = 0xFC43。计数脉冲值与频率的关系式(如式 3-1 所示)是:Nfi2fr (3-1)式中,N 是计数值;fi 是机器频率(晶体振荡器为 12MHz 时,其频率为 1MHz) ;fr是想要产生的频率。其计数初值 T 的求法如下:T65536N65536fi2fr例如:设 K65536,fi1MHz,求低音 DO(261Hz) 、中音 DO(523Hz) 、高音DO(1046Hz)的计数值。T65536N65536fi2fr6553610000002fr65536500000/fr低音 DO 的 T65536500000/26263627

16、中音 DO 的 T65536500000/52364580高音 DO 的 T65536500000/1046650598第 4 章 KEIL 仿真软件的应用硬件与软件的设计一般都要分别借助一些软件,如我们通常用作电路设计与制版的Protel,MCS-51 程序开发工具 KEIL 等。Keil C51 uVision2 集成开发环境是基于 80C51 内核的软件开发平台,支持工程建立、程序的编译与链接、软件仿真、硬件仿真、目标代码的生成等功能。Keil C51 编译器在产生代码的准确性和效率方面达到了较高的水平。与大多数集成开发环境类似,Keil C51 集成开发环境也是用工程的方法来管理文件,

17、在一个工程文件中源程序(C51 程序、汇编程序) 、头文件等都可以进行统一管理。安装运行 KEIL51,使用 KEIL 的开发工具进行项目开发过程,与其他软件开发项目的过程基本上相同:创建 C 语言或汇编语言的源程序。编译或汇编源文件。纠正源文件中的错误。从编译器和汇编器连接目标文件。测试连接的应用程序。9第 5 章 调试与故障分析 5.1 软件程序调试 本次设计的软件部分由音乐播放程序组成。关于音乐播放程序的调试,我首先采用 Preteus 软件来仿真,但是该仿真软件中没有喇叭或蜂鸣器等声音播放工具。于是本人将图 3-4 中的单片机的 P1.0 处接了一个示波器,想通过这样来仿真并调试音乐播

18、放程序,但是效果不是很理想。程序运行的时候,能看见示波器有不同频率的波形交替出现,但是频率变换得很快,无法确认是否显示的是所需要的频率,并且无法辨别音频变换的节奏是否正确。此方法并不适用。接着,我制作了一个简单的单片机播放器电路。即在实验板上焊接实验电路,电路由单片机 89C51、按钮外围电路组成,并在单片机的 P1.0 处用三极管连接一个简单的音频放大器,再外接一个蜂鸣器。将程序写入单片机中,这样就能听出声音和音乐节奏是否正确。5.2 硬件电路调试 本次设计的硬件电路主要由单片机 89C51 组成,在调试电路的过程中也碰到了一些问题。问题一:单片机无法正常下载程序。调试步骤:(1)检查单片机

19、和串口电路是否连接错。(2)检查焊接电路是否有虚焊和漏焊。问题二:下载音频程序后无法播放音乐。调试步骤:检查电源是否正常接入电路中。利用示波器测试单片机输出端是否有信号输出,发现信号输出正常,说明单片机正常工作。利用示波器测试音频放大电路输出端是否有信号输出,发现信号输出正常,说明音频放大电路工作正常,同时说明是蜂鸣器部分出现了问题。故障原因:焊接时将发声器件烧坏了,导致发不出声音。解决方案:重新换一个无源蜂鸣器,即可正常播放音乐。10总 结经过这次创新设计,我觉得自己学到了不少东西。归纳起来,主要有以下几点:(1)通过这次创新设计,我能将以前四年所学到的专业知识与实践相联系,将所学到的知识充

20、分运用到本次设计中。同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。(2)进一步熟悉了单片机的知识。通过本次设计,我对单片机的基本原理、内部结构、各引脚功能、定时器和中断的应用都有了更深刻的理解。并且,能够以单片机为基础元件设计一个简单的系统。(3)通过本次设计,熟悉了设计一个项目所必经的几个阶段。本次设计从理论研究到硬件原理图设计,从元器件的选择到 PCB 板的制作,从软件编程到最后的调试过程都由我独立完成。这不仅锻炼了我独立完成设计工作的能力,更重要的是了解了一个电子产品的设计流程,为将来投入工作增加了宝贵的经验,奠定了坚实

21、的基础。(4)提高了自己查找资料的能力。在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得不断学习的重要性。11致 谢在枣庄学院的求学生涯在师长、亲友的大力支持下,走得辛苦却也收获满囊,在论文即将付梓之际,思绪万千,心情久久不能平静。 伟人、名人为我所崇拜,可是我更急切地要把我的敬意和赞美献给一位平凡的人,我的导师。我不是您最出色的学生,而您却是我最尊敬的老师。您治学严谨,学识渊博

22、,思想深邃,视野雄阔,为我营造了一种良好的精神氛围。授人以鱼不如授人以渔,置身其间,耳濡目染,潜移默化,使我不仅接受了全新的思想观念,树立了宏伟的学术目标,领会了基本的思考方式,从论文题目的选定到论文写作的指导,经由您悉心的点拨,再经思考后的领悟,常常让我有“山重水复疑无路,柳暗花明又一村” 。感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚谢意!最后再一次感谢所有在创新设计中曾经帮助过我的良师益友和同学,以及在设计中被

23、我引用或参考的论著的作者。12参考文献1 郑郁正.单片机原理及应用.四川大学出版社,20032 谭浩强.C 程序设计(第二版).清华大学出版社,19993 王晓君.安国臣等. MCS 51 及兼容单片机原理与选型. 北京-电子工业出版社, 20034 李启炎. Protel 99SE 应用教程. 上海-同济大学出版社 2005.25 胡烨, 姚鹏翼, 江思敏. Protel 99 SE 电路设计与仿真教程. 北京-机械工业出版社, 20066 张义和,陈敌北。例说 8051。北京:人民邮电出版社,20067 张洪润,张亚凡。单片机原理及应用。清华大学出版社,20048 AT89C51 DATA

24、 SHEEP Philips Semiconductors 1999.dec9Yang. Y., Yi. J., Woo, Y.Y., and Kim. B.: Optimum design for linearityand efficiency of microwave Doherty amplifier using a new loadmatching technique, Microw. J., 2001, 44, (12), pp. 203610 Vizimuller, P.: RF design guide-systems, circuits, and equations (Arte

25、chHouse, Boston, MA, 1995)13附录 1:原理图EA/VP 31X119 X218RESET9RD17 WR16INT012 INT113T014 T115P10/T1 P11/T2P123 P134P145 P156P167 P178P00 39P01 38P02 37P03 36P04 35P05 34P06 33P07 32P20 21P2122P22 23P23 24P2425P25 26P26 27P2728PSEN 29ALE/P 30TXD11 RXD10GND20Vcc 40STC89C51/5289C52RCC110ufS0VCCC330pC230p1

26、2MHZD1S1S2S3 R510K P32P35P12P32P35P12IN+3 IN-2GND4V OUT 5GAIN 1GAIN 8BYPASS7Vcc 6386放放LM386C7 10ufC8100ufC6 104C5473VCC+- BEEP0.25WR210KR31K R41032 1P1POWER112233445566S1SWITCHVCCRT1104VCCR12.2KVCC14附录 2:源程序#include#define sound_amount 5 /歌曲的数量sbit play_up=P13; /上一首歌sbit play_down=P35; /下一首歌sbit pau

27、se=P32; /播放暂停sbit speaker=P10; /无源蜂鸣器unsigned char timer0h,timer0l,time;/timer0h,timer0l 为定时器 T0 的高低位初值,time 为对应的节拍时间unsigned char music_num; /music_num 为歌曲编号,music_num=0 表示刚开机时的状态,num 是查找歌曲数据表的地址unsigned int num;signed int fre; /对应频率数据表的地址bit play_enable; /歌曲播放的使能标志位,用于播放暂停void delay(unsigned char

28、t); /延时子函数,控制发音的时间长度void delayms(unsigned int t); /普通延时子程序,可用于按键消抖void music_play(void); /播放歌曲/每三个数字,代表一个音符/第一个数字是音符的数值 1234567 之一(第几个音),代表哆来咪发./第二个数字是 0123 之一,代表低音中音高音超高音(第几个八度)/第三个数字是时间长度,以半拍为单位,乐曲数据表的结尾是三个 0/烟花易冷unsigned char code song1=5,2,1, 3,2,1, 2,2,2, 2,2,4, 3,2,1, 1,2,1, 2,2,1, 3,2,4, 5,2,

29、1, 3,2,1, 2,2,2, 2,2,2, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 7,2,1, 3,2,1, 2,2,2, 1,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,1, 5,1,1, 6,1,6, 5,2,1, 3,2,1, 2,2,2, 2,2,1, 2,2,1, 2,2,1, 5,1,1, 3,2,1, 4,2,1, 3,2,4, 3,2,1, 3,2,1, 157,2,3, 3,2,1, 2,2,2, 1

30、,2,1, 7,1,1, 1,2,1, 2,2,1, 3,2,1, 6,2,3, 6,1,1, 1,2,1, 3,2,1, 2,2,1, 6,1,1, 1,2,1, 7,1,2, 5,1,2, 6,1,6, 0,0,0 ;/发如雪unsigned char code song2=5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1, 3,2,1, 6,2,1, 5,2,1, 3,2,1, 5,2,3, 5,2,1, 6,2,1, 1,3,2, 6,2,1, 5,2,1, 3,2,1, 5,2,1, 3,2,2,

31、 1,2,1, 2,2,1, 3,2,1, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 5,1,1, 2,2,1, 3,2,2, 2,2,1, 3,2,1, 5,2,1, 6,2,1, 5,2,3, 1,2,1, 2,2,1, 5,2,1, 3,2,1, 5,2,1, 3,2,2, 1,2,1, 6,1,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 1,2,1, 2,2,1, 2,2,1, 1,2,4, 0,0,0 ;/简单爱unsigned char code song3=5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,

32、1, 5,2,1, 5,2,1, 5,2,1, 4,2,1, 3,2,1, 2,2,3, 5,1,1, 1,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,1, 6,2,1, 5,2,2, 2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1, 3,2,1, 3,2,1, 1,2,1, 5,2,1, 1,2,1, 5,2,1, 1,2,1, 7,1,1, 1,2,1, 1,2,1, 6,1,1, 2,2,1, 2,2,1, 3,2,1, 3,2,1, 5,2,1, 5,2,1, 4,2,1, 3,2,1, 2,2

33、,3,5,1,1, 1,2,1, 2,2,1, 3,2,1, 2,2,1, 3,2,1, 4,2,1, 5,2,1, 5,2,1, 5,2,2,2,2,1, 3,2,1, 1,2,2, 1,2,1, 6,1,1, 2,2,1, 2,2,1, 3,2,1, 3,2,1, 1,2,2, 5,2,1, 1,2,1, 5,2,1, 5,2,1, 7,1,1, 1,2,1, 0,0,0 ;/世上只有妈妈好unsigned char code song4=6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1,/6,2,3 代表 6,中音,3 个半拍;/5,2,1 代表 5,中音

34、,1 个半拍;/3,2,2 代表 3,中音,2 个半拍;/5,2,2 代表 5,中音,2 个半拍;16/1,3,2 代表 1,高音,2 个半拍;3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0;/当你孤单你会想起谁unsigned char code song5=3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,2, 5,2,2, 2,2,2, 2,2,3,

35、6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 ;/乡间小路unsigned char code song6=3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1, 2,1,2, 2,1,1, 3,1,1

36、, 2,1,4, 3,1,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2,3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1, 3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0; /送别un

37、signed char code song7=5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1, 1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,

38、1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0;/最浪漫的事unsigned char code song8=5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 3,1,1, 5,1,5, 175,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1, 6,1,1, 5,1,1, 6,1,1, 1,1,5, 3,1,2, 2,1,3, 5,1,1, 6,1,1, 1,2,1, 6,1,2, 6,1,1, 5,1,1,

39、 6,1,1, 5,1,1, 6,1,1, 1,1,5, 1,1,1, 2,1,1, 3,1,1, 4,1,2, 4,1,1, 5,1,1, 6,1,1, 6,1,1, 5,1,1, 6,1,2, 1,2,1, 6,1,3, 1,2,1, 6,1,1, 5,1,1, 5,1,4, 1,1,1, 6,1,1, 5,1,5, 5,1,1, 6,1,1, 1,2,1, 3,1,1, 2,1,1, 3,1,1, 1,1,6, 0,0,0; / 频率-半周期数据表 高八位 共保存了四个八度的 28 个频率数据unsigned char code FREQH=0xF2, 0xF3, 0xF5, 0xF5,

40、 0xF6, 0xF7, 0xF8, /低音 12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,/1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, /高音 2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF; /超高音 1234567/ 频率-半周期数据表 低八位unsigned char code FREQL=0x42, 0xC1, 0x17, 0xB6, /低音 12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0x

41、E9, 0x5B, 0x8F, /1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, /高音 2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16; /超高音 1234567 void main(void)TMOD=0x11; /T0 T1 均在工作方式 1ET0=1; /T0 开中断EA=1; /CPU 开中断 while(1)music_play(); /根据当前状态播放相应歌曲的某个音符if(!pause) /暂停键处理if(!pause)if(music_num=0) /music_num=0 只

42、有在刚开机,且未按下暂停键时18存在,表示刚开机时的状态,按下后从第一首开始播放music_num=1; /歌曲序号置 1num=0; /从头播放play_enable=1; /允许播放elseplay_enable=play_enable;speaker=1;while(!pause) /若按着暂停键不放手时的处理if(play_enable=0) /如果是暂停,则显示时间不变/(暂停时 play_enable=0)/暂停键处理结束/while 结束if(!play_up)if(!play_up)music_num-=1;/歌曲编号减一if(music_num=0)music_num=8;n

43、um=0; /从头开始播放if(music_num=(sound_amount+1)music_num=1; delayms(500);/歌曲切换时延时 0.5S19if(!play_down)if(!play_down)music_num=1;num=0; /从头开始播放if(music_num=0)music_num=sound_amount;delayms(500);/歌曲切换时延时 0.5S void delayms(unsigned int t) /MS 延时子程序unsigned int i,j;for(i=0;it;i+)for(j=0;j123;j+);void delay(u

44、nsigned char t) /延时子函数,控制发音的时间长度,每个节拍0.4Sunsigned char t1;for(t1=0;t1t;t1+) /嵌套循环, 共延时 t 个半拍20for(t2=0;t28000;t2+) ;/延时期间, 可进入 T0 中断去发音TR0=0; /关闭 T0, 停止发音void timer0(void) interrupt 1 /T0 中断程序,控制发音的音调speaker=!speaker;/输出方波, 发音TH0=timer0h; /下次的中断时间,这个时间控制音调高低TL0=timer0l;void song(void) /演奏一个音符TH0=tim

45、er0h; /控制音调TR0=1; /启动 T0, 由 T0 输出方波发音delay(time); /每个音符的演奏时间void music_play(void)/播放相应歌曲的某个音符if(music_num=1)/第 i 个是音符,第 i+1 个是第几个八度timer0h=FREQHfre; /从数据表中读出频率数值,实际上是定时的时间长度timer0l=FREQLfre;time=song1num+2; /读出时间长度数值num+=3;if(fre0) /判断歌曲的结束位,结束后转到下一首num=0; /下一首从头播放music_num=2;21song(); /发出一个音符if(mus

46、ic_num=2)timer0h=FREQHfre;num+=3;if(fre0)num=0;music_num=3;song();if(music_num=3)timer0h=FREQHfre;num+=3;if(fre0)num=0;music_num=4;song();if(music_num=4)22timer0h=FREQHfre;num+=3;if(fre0)num=0;music_num=5;song();if(music_num=5)timer0h=FREQHfre;num+=3;if(fre0)num=0;music_num=6;song();if(music_num=6)timer0l=FREQLfre;time=song6num+2;num+=3;if(fre0)num=0;23music_num=7;song();if(music_num=7)time=song7num+2;num+=3;if(fre0)num=0;music_num=8;song();if(music_num=8)timer0l=FREQLfre;time=song8num+2;num+=3;if(fre0)music_num=1;song();/程序结束

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报