欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    Protel软件及单片机技术综合训练基于单片机的音乐播放系统.doc

    • 资源ID:4146682       资源大小:200KB        全文页数:21页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Protel软件及单片机技术综合训练基于单片机的音乐播放系统.doc

    音乐播放系统设计李凯龙目 录摘 要11 绪论11.1 功能需求22 硬件设计22.1 音乐播放系统的电路原理图22.2 电源输入的电路原理图32.3 晶振电路33 系统工作原理43.1 系统的总体方案设计43.2 主控芯片AT89C51简介44 线路连接55 软件设计65.1 主程序流程图66 调试与故障分析86.1 软件程序调试86.2 硬件电路调试87 结论98 致谢9参考文献10附录一:电路图11附录二:主程序11摘 要本文将介绍一种以89C51型单片机为基础元件设计的自动音乐播放器。在当今这个科技高速发展的时代,生活节奏的加快,人们长期处于工作、学习压力过大的状态,对于调节心理压力而言音乐对于每一个人都十分重要,由此音乐播放器在国内已经开始普及。校园里的上下课的铃声,宿舍内早晨的起床号声音,都由以前枯燥刺耳的铃音转变成了好听的音乐,公路、广场中的计时装置也逐渐开始采用音乐来充当铃声。此装置不仅为人们日常生活的计时提供了方便,同时也为目前快节奏的生活带来了乐趣。本文是应用MCS-51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C语言进行程序设计。通过控制单片机内部的定时器来产生不同频率的方波,驱动蜂鸣器发出不同音调的音乐,再利用延迟来控制发音时间的长短。把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。这种控制电路结构简单,可读性高,应用性强;软件程序适应范围广,对于不同的音乐只需要改变相应的定时常数即可。关键词: 音乐播放器,51单片机,C语言1 绪论单片机,更确切地说应称为作微控制器,是20世纪70年代中期发展起来的一种面向控制的大规模集成电路模块,其特点是功能强、体积小、可靠性高、价格低廉。它一面世便在工业控制、数据采集、智能仪表化、机电一体化、家用电器等领域得到了广泛应用,极大地提高了这些领域的技术水平和自动化程度。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。本次设计以89C51单片机为基础,利用单片机编成技术对芯片进行功能设定,实现音乐的播放。同时,利用单片机的定时器中断,在单片机内部产生所需要的音乐频率,并通过音频功率放大器将音频信号放大,通过蜂鸣器连续播放一段音乐。此设计通过多次测试,音乐声音宏亮清晰,节拍正常,达到预期效果。本文将围绕基于单片机的自动音乐播放器,介绍一些关于单片机的基础知识、音乐播放器的制作原理及方法(其中包括了音乐编程原理)、定时器的设定,以及仿真软件(Keil、Protel99 SE)的使用方法和相关PCB板的制作。1.1 功能需求 本设计利用单片机组成音乐播放系统。利用单片机的定时器产生乐谱的各种频率方波信号经过放大后由喇叭发出声音,能够自动连续播放多首乐曲,还能手动选择单曲。2 硬件设计2.1 音乐播放系统的电路原理图 单片机音乐播放器控制系统结构简单,环节较少,因此,单片机音乐播放器包括LED彩灯、数码管的显示。除了播放音乐有按键外,其余的硬件组成大体相同。对于单片机音乐播放器声音的读出除了蜂鸣器以外,还要配置合适的放大器播放出响亮的声音。本系统共有两部分构成,其中硬件部分由电源电路、晶振电路、按键电路、复位电路、时钟电路、发生电路组成,软件部分对应的由主程序、初始化程序、键功能程序、定时中断程序等组成。单片机上位复电后,从头开始执行程序,时钟频率由外部晶振频率提供。 电子时钟的电路图由电源输入电路、晶振电路、按键电路、声音播放电路等电路组成。本系统采用AT89C51单片机作为主控制芯片,为了提高计时精度,所采用的晶振频率为12MHz。电子时钟原理图如图1所示。 图1 音乐播放系统的电路原理图2.2 电源输入的电路原理图音乐播放系统的主控制部分电源需要用5V直流电源供电,把频率为50Hz、有效值为220V过电源变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,所以需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需通过低通滤波电路滤波,使输出电压平滑。稳压电路的功能是使输出直流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流电压,如图2所示。图2 电源输入的原理图2.3 晶振电路晶振电路如图3所示。XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。图3 晶振电路3 系统工作原理3.1 系统的总体方案设计本次设计课题为音乐播放系统的设计,采用AT89C51单片机内部定时器实现数字时钟的定时功能。音乐播放系统的整体框图如图4所示。图4 音乐播放的系统整体框图3.2 主控芯片AT89C51简介AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。其引脚图如图5所示。图5 AT89C51引脚图4 线路连接本课程设计需要用到CPU 模块的P1.0、P1.3、P3.2、P3.5、XTAL1、XTAL2、电源VCC、接地GND引脚。电路板由自己焊接好,无需外部扩展。电路原理图如下。图6 89C51引脚接线图图7 声音播放模块、晶振电路、LED模块、按钮模块、电源模块接线图5 软件设计5.1 主程序流程图一般来说,单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐振频率。单片机演奏的音乐基本都是单音频率。因此单片机演奏音乐比较简单,只需能清楚“音调”和“节拍”两个概念即可。音调表示一个音符唱多高的频率。节拍表示一个音符唱多长的时间。 知道了一个音符的频率后,便可以让单片机发出相应频率的振荡信号,从而产生相应的音符声音。通过单片机的定时器进行定时中断,在中断服务程序中将单片机上完结单片机I/O口来回置高电平或者是低电平的,从而让扬声器发出声音。通过节拍计算出每个音符所需要的时间,采用循环延时的方法来实现控制一个音符唱多长的时间,从而构成一首完整的音乐。音调主要由声音的频率决定。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随响度增加而下降,高频纯音的音调却随响度增加而上升。  音调的高低还与发声体的结构有关,因为发声体的结构影响了声音的频率。大体上,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 %256主程序流程图如图8所示。图8 主程序流程图6 调试与故障分析 6.1 软件程序调试本次设计的软件部分由音乐播放程序组成,曲目序号显示程序仿真。关于音乐播放程序的调试,我首先采用Preteus软件来仿真,但是该仿真软件中没有喇叭或蜂鸣器等声音播放工具。于是本人将图3-4中的单片机的P1.0处接了一个示波器,想通过这样来仿真并调试音乐播放程序,但是效果不是很理想。程序运行的时候,能看见示波器有不同频率的波形交替出现,但是频率变换得很快,无法确认是否显示的是所需要的频率,并且无法辨别音频变换的节奏是否正确。此方法并不适用。接着,我制作了一个简单的单片机播放器电路。即在实验板上焊接实验电路,电路由单片机89C51、按钮外围电路组成,并在单片机的P1.0处用三极管连接一个简单的音频放大器,再外接一个蜂鸣器。将程序写入单片机中,这样就能听出声音和音乐节奏是否正确。6.2 硬件电路调试 本次设计的硬件电路主要由单片机89C51组成,在调试电路的过程中也碰到了一些问题。问题一:单片机无法正常下载程序。调试步骤: (1)检查单片机和串口电路是否连接错。 (2)检查焊接电路是否有虚焊和漏焊。 问题二:下载音频程序后无法播放音乐。 调试步骤: 检查电源是否正常接入电路中。 利用示波器测试单片机输出端是否有信号输出,发现信号输出正常,说明单片机正常工作。 利用示波器测试音频放大电路输出端是否有信号输出,发现信号输出正常,说明音频放大电路工作正常,同时说明是蜂鸣器部分出现了问题。 故障原因:焊接时将发声器件烧坏了,导致发不出声音。 解决方案:重新换一个无源蜂鸣器,即可正常播放音乐。7 结论 经过这次课程设计,我觉得自己学到了不少东西。归纳起来,主要有以下几点:(1)通过这次课程设计,我能将以前所学到的专业知识与实践相联系,将所学到的知识充分运用到本次设计中。同时,我也认识到自己知识上不足的地方,体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好。(2)进一步熟悉了单片机的知识。通过本次课程设计,我对单片机的基本原理、内部结构、各引脚功能、定时器和中断的应用都有了更深刻的理解。并且,能够以单片机为基础元件设计一个简单的系统。(3)通过本次设计,熟悉了设计一个项目所必经的几个阶段。本次设计从理论研究到硬件原理图设计,自己购买元器件焊接电路板,从软件编程到最后的调试过程都由我独立完成。这不仅锻炼了我独立完成设计工作的能力,更重要的是了解了一个电子产品的设计流程,为将来投入工作增加了宝贵的经验,奠定了坚实的基础。(4)提高了自己查找资料的能力。在设计过程中,我碰到了一些暂时无法解决的问题,于是我通过上网查阅和图书馆借阅资料,或是通过与老师同学交流一步步地解决了。从中我懂得了我们这个专业的知识面相当广泛,我们需要不断通过各种途径更新自己的知识,不断充实自己,同时要懂得与他人交流意见,积极听取别人的建议,懂得不断学习的重要性。8 致谢 五周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,遇到许多这样那样的问题,在同学的热情帮助下,相互学习,相互监督。 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础通过这次课程设计,本人在多方面都有所提高。通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行的实际训练从而培养和提高学生独立工作能力,巩固与扩充了单片机程序设计的应用技能,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。 在这次设计过程中,体现出自己单独设计单片机程序的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 在此感谢我们的马凤霞老师,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次课程设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。 同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。参考文献1 郑郁正.单片机原理及应用.四川大学出版社,20032 谭浩强.C程序设计(第二版).清华大学出版社,19993 王晓君.安国臣等. MCS51及兼容单片机原理与选型. 北京-电子工业出版社, 20034 李启炎. Protel 99SE应用教程. 上海-同济大学出版社 2005.25 胡烨, 姚鹏翼, 江思敏. Protel 99 SE电路设计与仿真教程. 北京-机械工业出版社, 20066 张义和,陈敌北。例说8051。北京:人民邮电出版社,20067 张洪润,张亚凡。单片机原理及应用。清华大学出版社,2004附录一:电路图附录二:主程序#include<REG52.H>#define sound_amount 5 /歌曲的数量sbit play_up=P13; /上一首歌sbit play_down=P35; /下一首歌sbit pause=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 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,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, 7,2,3, 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,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, 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,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,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,中音,1个半拍; /3,2,2代表3,中音,2个半拍; /5,2,2代表5,中音,2个半拍; /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, 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, 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; /送别unsigned 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,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, 5,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, 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, 0xF6, 0xF7, 0xF8, /低音1234567 0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,/1,2,3,4,5,6,7,i 0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, /高音 234567 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF; /超高音 1234567/ 频率-半周期数据表 低八位unsigned char code FREQL= 0x42, 0xC1, 0x17, 0xB6, /低音1234567 0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, /1,2,3,4,5,6,7,i 0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D, /高音 234567 0x47, 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只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放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)&&(music_num!=0) /上一首按键delayms(5);if(!play_up)&&(music_num!=0) speaker=1;music_num-=1;/歌曲编号减一if(music_num<=0)music_num=8;num=0; /从头开始播放if(music_num=(sound_amount+1)music_num=1; delayms(500);/歌曲切换时延时0.5Sif(!play_down)&&(music_num!=0)delayms(5);if(!play_down)&&(music_num!=0) speaker=1;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;i<t;i+)for(j=0;j<123;j+);void delay(unsigned char t) /延时子函数,控制发音的时间长度,每个节拍0.4Sunsigned char t1;for(t1=0;t1<t;t1+) /嵌套循环, 共延时t个半拍 for(t2=0;t2<8000;t2+) /延时期间, 可进入T0中断去发音 ; TR0=0; /关闭T0, 停止发音void timer0(void) interrupt 1 /T0中断程序,控制发音的音调speaker=!speaker;/输出方波, 发音TH0=timer0h; /下次的中断时间,这个时间控制音调高低TL0=timer0l; void song(void) /演奏一个音符TH0=timer0h; /控制音调TR0=1; /启动T0, 由T0输出方波发音delay(time); /每个音符的演奏时间void music_play(void)/播放相应歌曲的某个音符if(music_num=1)&&(play_enable=1)fre=song1num+7*song1num+1-1;/第i个是音符,第i+1个是第几个八度timer0h=FREQHfre; /从数据表中读出频率数值,实际上是定时的时间长度 timer0l=FREQLfre; time=song1num+2; /读出时间长度数值 num+=3;if(fre<0)/判断歌曲的结束位,结束后转到下一首num=0; /下一首从头播放music_num=2; song(); /发出一个音符/if(music_num=2)&&(play_enable=1) fre=song2num+7*song2num+1-1;timer0h=FREQHfre; num+=3;if(fre<0)num=0;music_num=3; song();/if(music_num=3)&&(play_enable=1) fre=song3num+7*song3num+1-1;timer0h=FREQHfre; num+=3;if(fre<0)num=0;music_num=4; song();/if(music_num=4)&&(play_enable=1)fre=song4num+7*song4num+1-1;timer0h=FREQHfre; num+=3;if(fre<0)num=0;music_num=5; song();/if(music_num=5)&&(play_enable=1)fre=song5num+7*song5num+1-1;timer0h=FREQHfre; num+=3;if(fre<0)num=0;music_num=6; song();/if(music_num=6)&&(play_enable=1)fre=song6num+7*song6num+1-1; timer0l=FREQLfre; time=song6num+2; num+=3;if(fre<0)num=0;music_num=7; song();/if(music_num=7)&&(play_enable=1) timer0l=FREQLfre; time=song7num+2; num+=3;if(fr

    注意事项

    本文(Protel软件及单片机技术综合训练基于单片机的音乐播放系统.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开