基于51单片机的音乐播放器的仿真与制作

发布者:MoonlightStar最新更新时间:2011-11-07 关键字:51单片机  音乐播放器  Proteus 手机看文章 扫描二维码
随时随地手机看文章
0 引言
    播放音乐最简单的方法就是采用专用音乐芯片,该方法的缺点是音乐芯片只能一次性烧录,播放的内容不可变。而采用单片机播放音乐则能克服这一缺点,其播放的内容以及歌曲的数量都可以随时修改。同时,使用软件Proteus在产品开发的初期对设计进行仿真无疑是一种提高效率和降低成本的好办法,但是仿真毕竟有一定的局限性,要实践起来可能会碰到一些问题。为此,本文通过Proteus软件对用AT89S52单片机播放音乐进行了仿真,指出了实际制作过程中需要注意的地方。

1 硬件电路设计
1.1 仿真软件Proteus简介
    Proteus的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,它支持单片机且元件库齐全,使用方便,是不可多得的专业单片机软件仿真系统。目前可支持的单片机类型有68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
1.2 电路设计
    图1所示是单片机音乐播放器的仿真原理图。在Proteus仿真软件中,按一下按钮,蜂鸥器即可播放音乐。

a.JPG[page]

 

    事实上,按照图1所示原理图来焊接电路,其结果可能没有任何效果。而图2所示才是单片机音乐播放器的实际制作电路。与图1相比,实
际电路多了两个部分:一是单片机左边最小系统所需的电路部分,而仿真软件中则将这些省略了;另一个是单片机右边多了一个三极管。之所以要加这个三极管,主要是为了放大蜂鸣器的驱动电流,而仿真软件里面所有的元件都是理想元件,所以,仿真能实现的效果,实际做出来往往没有效果。因此,要想在实际中实现满意的效果还要凭借硬件经验进行反复的摸索和尝试。

b.JPG



2 软件设计
2.1 播放原理
    声音的频谱范围通常约为几十到几千赫兹,通过程序控制单片机的I/O口可输出不同频率的矩形波。当该矩形波的频率位于声音频谱范围内时,在单片机的I/O口接上喇叭就能发出声音。然后利用延时程序控制矩形波的高、低电平持续时间,即改变矩形波的频率,即可产生不同的音调,从而发出不同的声音,再让矩形波输出的长短对应节拍,就可以实现单片机对音乐的演奏。
2.2 音调和节拍编码
    单片机奏乐只需弄清楚两个概念,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。
    由于各个音调对应的频率是已知的,因此,播放音乐时,应对乐曲中出现的音调进行编码,并找出单片机播放这些音调所对应的定时初值。表1所列是音调编码与定时器的初值表,其中频率是已知的,编码可以自己设置,而定时初值是怎样得来的呢?下面以“低6”为例进行说明。“低6”的频率f为440 Hz,其对应的周期为:T=1/f=1/440=272μs。单片机上对应蜂鸣器的I/O口来回取反的时间应为:t=T/2=2272/2=1136μs。单片机奏乐时,其定时器为工作方式1,若以振荡器的十二分频信号为计数脉冲,如果单片机晶振为12MHz,则1μs计数一次。所以,对于“低6”,其定时器的初值应该是:216-1136=64400。
    对节拍的控制可通过延时程序来实现。表2所列是节拍编码表。若以1拍的时长为400ms为例,1/2拍的时长为200ms,1/4拍的时长为100ms。首先,这样,确定一个基本时长的延时程序,比如以100ms为基本延时时间,那么,1/4拍可以调用一次延时程序,1/2拍需调用二次延时程序,1拍需调用四次延时程序,依次类推。[page]

2.3 编程
    音调和节拍都进行过编码后,那么,一首乐曲就可以用若干个8位的简码表示。比如“生日快乐歌”的第一个简码是“82H”,由表1可知,其高四位“8”表示音调“中5”,对应的频率是784Hz,对应的定时器初值是64898;另由表2可知,其低四位“2”表示节拍为“2/4拍”。这样,任意一首乐曲的简码都可以通过乐谱提取软件获得,而得到简码后,就可以编程了。图3所示是单片机播放音乐的程序流程图,本文使用的是定时器0,音调的高低由定时器来控制P3.7并按一定频率取反实现,节拍的长短由延时程序控制。流程图中的“TABLE”是由表1中的定时初值组成的。

c.JPG

d.JPG

e.JPG



3 结束语
    本文通过Proteus ISIS对单片机音乐播放器进行了仿真,并在仿真的基础上制作了一个音乐播放器实物,其音乐播放的效果很好。作者通过仿真与制作,对这两者进行了比较与总结,并给出了两种电路图及程序流程图,希望能成为读者的参考。

 

 

关键字:51单片机  音乐播放器  Proteus 引用地址:基于51单片机的音乐播放器的仿真与制作

上一篇:数模转换器DAC7724与51单片机的接口及程序设计
下一篇:一种基于51单片机的可控成像系统设计

推荐阅读最新更新时间:2024-03-16 12:45

MCS-51单片机最小系统的组成部分及电路图介绍
  MCS-51单片机概述   MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。   51系列单片机的特点   -8位cpu   -片内带振荡器,频率范围为1.2MHz~12MHz   -片内带128B的数据存储器   -片内带4KB的程序存储器   -程序存储器的寻址空间为64KB   -片外数据存储器的寻址空间为64KB   -128个用户位寻址空间   -21个字节特殊功
[单片机]
MCS-<font color='red'>51单片机</font>最小系统的组成部分及电路图介绍
图形点阵式液晶显示模块与51单片机的接口设计
引 言 液晶作为一种显示器件,以其特有的优势正广泛应用于仪器、仪表、电子设备等低功耗产品中。以往的测控仪器的显示部分大都采用LED式液晶显示屏进行参数设定和结果显示,其显示信息量少、形式单一、人机交互性差、操作人员要求较高。而液晶显示器(LCD)具有功耗低、体积小、质量轻、超薄和可编程驱动等其他显示方式无法比拟的优点,不仅可以显示数字、字符,还可以显示各种图形、曲线、及汉字,并且可实现屏幕上下左右滚动、动画、闪烁、文本特征显示等功能;人机界面更加友好,使用操作也更加灵活、方便,使其日益成为智能仪器仪表和测试设备的首选显示器件。本文在介绍以ST7920为驱动器的WGM-12832液晶显示模块的引脚、结构、功能的基础上,详述了与AT
[应用]
51单片机中断矢量表
8051系列单片机是现在最常用的单片机他的中断矢量表如下所示: 下面是8051单片机的各种封装形式和引脚图
[单片机]
<font color='red'>51单片机</font>中断矢量表
51单片机做32路流水灯程序
用51单片机做的超级32路流水灯程序 下面是实物图片: 源代码下载地址: http://www.51hei.com/f/ts24.rar #include reg51.h #include intrins.h #define ushort unsigned short //P0,P1,P2,P3数据类型是 unsigned short ;数值范围 :0~~~~65 635 #define uint unsigned int ushort code display_P0 ={ //P0 口显示内容 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
[单片机]
<font color='red'>51单片机</font>做32路流水灯程序
P10点阵屏C51单片机程序
P10点阵屏C51程序 1/4扫描,四扫下行,1路16行,数据低OE高(04-P16-08) 适用于HUB12接口单色P10 串口模式0,普通左移,亮度速度可调,6个IO口,用的STC8F1K08,最多231个字 制作出来的实物图如下: 单片机源程序如下: #include STC8.H #include intrins.h #include string.h #define DATA P30 // #define CLOCK P31 //↑ ↓ #define ADDR_A P32 //↑ #de
[单片机]
P10点阵屏C<font color='red'>51单片机</font>程序
基于51单片机的无线温湿度控制系统
发射_DHT11程序 //宏定义 #define uchar unsigned char #define uint unsigned int //头函数 #include reg51.h #include intrins.h //无线模块 #include api.h #include nRF24L01P.h #include DHT11.h //LED 管脚定义 sbit TXLED_R=P1^3; sbit RXLED_Y=P1^5; //主机询问命令 uchar CMD ={0xaa,0xbb,0xcc,0xdd}; //主函数 void main() { TXLED_R=0;
[单片机]
基于<font color='red'>51单片机</font>的无线温湿度控制系统
51单片机汇编语言实例2
简介:上面的单片机系统和汇编语言控制指令,很容易被更改为多口、多位的单键控制系统。图5为多个LED灯-单个按键的运行结果与汇编语言。图6中对P2.0口改用双掷开关,实现P2.0口的两种电平状态。 a)单个按键与多个LED灯(位操作—输入与字节操作—输出)—判断与子程序 此处只是将输出指令由位指令换成了字节指令,而输入判断仍然是位判断指令。 ORG 0000H MAIN: ;CLR C MOV C,P2.0 ;获取P2.0位状态送位累加器;位与字节转换需要判断指令 JNC ZIJIE;JC位累加器—进位位为1转移到ZIJIE , JNC位累加器为0转移到ZIJIE
[单片机]
<font color='red'>51单片机</font>汇编语言实例2
Keil5中51单片机和MDK的整合的方法
不知道论坛的朋友们是怎么处理MDK和51的,在前一段时间,我是用Keil4来写51, Keil5写ARM。后来发现它两其实可以整合到一块。在这分享一下我的雕虫小技。 1.Keil5的安装 网上的教程非常之多,这里我提供MDk526的包,双击安装就行。x也在里面。 2.Software Packs下载 选择需要的芯片包下载,比如上图的DFPXXX什么的就是芯片包。 我也提供了STM32F4系列还有TI的MSP432。 3.51的导入 使用stc官方的下载助手,一键导入。 4.最终成型 最终就可以在一个IDE里编辑这两种内核的了,当然C251内核的也可以这样导入。 链接: https://pan.baidu.com/s/1
[单片机]
Keil5中<font color='red'>51单片机</font>和MDK的整合的方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved