- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于单片机的音乐盒设计 电信0902 摘要: 单片机因其体积小、功能强、价格低廉而得到广泛应用。本文介绍用AT89C52单片机设计音乐盒的方法,仅需AT89C51最小系统,扩展两个按键,再加一片由两个NPN组成的达林顿管以及输出设备蜂鸣器和LCD。通过两个按键可以选择上一首歌曲及下一首歌曲,并在LCD上直观的显示出歌曲的序号。 1 引 言 1.1 问题的提出 目前市场上的音乐播放器价格偏高,能否利用现在所学的单片机知识及常见的元器件搭建出能播放简单音乐的电路,将会巩固所学的单片机知识。 1.2 任务与分析 本文是应用MCS-51单片机原理和控制理论设计音乐演奏控制器的硬件电路,并利用C语言进行程序设计。通过控制单片机内部的定时器来产生不同频率的方波,驱动喇叭发出不同音调的音乐,再利用延迟环节延迟一段时间来控制音乐的音调,再通过LCD显示出当前的歌曲名称。通过查找相关音乐资料把乐谱转化成相应的定时常数就可以从发音设备中演奏出悦耳动听的音乐。 2方案设计 总体设计框图 本设计采用89C52作为主控芯片,蜂鸣器作为输出设备产生音乐,通过按键1和2能够选择歌曲。LCD1602能够实时的显示当前的歌曲名及歌曲号。其中P3.3和P3.2外接按键,P2口用作LCD输出数据端口,P1.4接蜂鸣器端口。 3 系统硬件设计 3 系统硬件设计 主控芯片:设计中所采用主控芯片为AT89C52。因其价格便宜,在市场上已经很成熟,各个方面都能够满足设计要求故选择它。 蜂鸣器及蜂鸣器驱动:从价格及控制上方面,我们选择市场上常见的有源蜂鸣器作为音频输出设备。选择通过两个NPN三级管搭建成一个达林顿作为为驱动。 按键:采用常用的四引脚按键,其中各有两个引脚相连。按下时,接通,放开时,将断开。设计中需要两个按键,作为上一首和下一首的信号输入。 显示设备:为了在播放过程中能够清晰的知道当前歌曲的信息,我们采用市场上常见的LCD1602显示屏作为输入显示设备 音调 4.1.1 音频脉冲 要生产音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。 4.1.2 方法 利用8051的内部定时器使用其工作在计数器模式MODE1下,改变计数值THO及TLO以产生不同频率的方法。 计算公式 例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音DO (523Hz)。 计数脉冲值与频率的关系公式如下: 4.1.4 其计数值的求法 4.2 基本知识--节拍表二 C调各音符频率与计数值T的对照表 4.2.1相关知识 每个音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表三为节拍与节拍码的对照.如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间.假设1/4拍为1DELAY,则1拍应为4DELAY,以此类推.所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表四为1/4和1/8节拍的时间设定。 4.3 程序流程图 外部中断0中断程序中令Flag2=1, 中断1的中断程序中令Flag=1 定时器0中断流程图如图四。 。 主程序流程图如图五 程序代码 KCSJ.C #include reg52.h #include LCD.h sbit BUZZER=P3^1; unsigned char th,tl; unsigned char flag2,flag3; char song1[14]=NUM1; char song2[14]=NUM2; char song3[14]=NUM3; char song4[14]=NUM4; // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 // 7L 1 2 3 4 5 6 7 1H 2H 3H 5L 6L 4L unsigned int TONE[14]={1012,956,852,759,716,638,568,506,478,426,379,1276,1136,1433}; // 1 2 3 4 5 6 7 // 低音 1908 1701 1515 1433 1276 1136 1012 /
原创力文档


文档评论(0)