音乐播放器实验报告

合集下载

数电实验报告-音乐播放器

数电实验报告-音乐播放器

实验课题:简易乐曲播放器学院:班级:姓名:学号:班内序号:一、设计课题要求 (2)二、设计思路和总体框图 (2)三、分块电路设计 (4)四、仿真波形 (6)五、源程序 (7)六、功能说明 (20)七、所用元器件情况 (20)八、故障及问题分析 (21)九、总结和结论 (22)十、参考文献 (22)一设计课题的任务要求设计制作一个简易乐曲播放器:1. 播放器内预存3 首乐曲;2. 播放模式:顺序播放、随机播放,并用数码管或LED 显示当前播放模式;顺序播放:按内部给定的顺序依次播放3 首乐曲;随机播放:随机产生一个顺序播放3 首乐曲;3. 用数码管显示当前播放乐曲的顺序号;4. 设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;5. 设置Next 和Previous 键,按Next 键可以听下一首,按Previous 键回到本首开始;6. 选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;7. 选做:自拟其它功能。

二设计思路和总体框图设计思路:组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的2个基本要素。

乐曲的12平均律规定:每2个八度音之间的频率相差1倍。

在2个八度音之间,又可分为12个半音,每两个半音的频率比为2开12次方。

另外,音符A (简谱中的低音6)的频率为440Hz,音符B到C之间、E到F之间为半音,其余为全音。

由此可以计算出简谱中从低音1至高音1之间每个音符的频率,如下表所示。

产生各音符所需的频率可用分频器实现。

本次实验使用的是MAXⅡ实验板,时钟频率为50MHz,计算出各个音符对应的分频系数,进行50%占空比的分频,即可得到各音符对应的频率。

对于节拍,如果将一拍的长度定为1秒,则1/4拍的时间为1/4秒,为其提供一个4Hz的时钟频率即可产生出1/4拍的效果了。

若需要半拍,只需将该音符记录两次就可以了。

产生节拍时钟也用分频器实现,本次实验中时钟频率为5Hz。

音乐播放器_MFC

音乐播放器_MFC

音乐播放器大型实验报告计自2班201426810805 胡海兵一、实验目的通过动手制作基于VS2013的音乐播放器,了解播放器的原理。

并通过自己动手,在windows播放器组件的基础上,用自己的算法,去实现自己的界面和自己的播放模式。

二、实验工具在win8.1的操作系统下,使用vs2013编程实现。

三、总体设计1、制作的顺序如图1所示基本界面的构想与设计实现mci的调用基本控件的功能实现滚动条的调用以及实现给控件和背景加上颜色音乐播放器图1 音乐播放器的制作顺序2、功能框架 如图2图2 音乐播放器的功能框架四、实验步骤1、基本界面的构想与设计 如图3所示播放暂停下一首歌上一首歌声音和进度增加和删除歌曲 播放模式的选择显示列表歌曲音乐播放器图3 基本界面的设计插入按钮每一个按钮的制作都是一模一样的,在这里我举一个例子,例如增加歌曲的按钮的添加:从工具栏中拖出BUTTON控件,然后点击拖来的按钮,在右下键有按钮的属性,修改当前按钮的ID,ID是控件的唯一标示,不可重复。

点击按钮,右键点击添加变量,取一个合适的名字。

插入文本框每一个文本框的制作都是一模一样的,在这里我举一个例子,例如显示歌曲数量的文本框的添加:从工具栏中拖出static text控件,然后点击拖来的控件,在右下键有控件的属性,修改当前按钮的ID,ID是控件的唯一标示,不可重复。

点击控件,右键点击添加变量,取一个合适的名字。

其他控件的添加方式都一样,不在举例。

2、实现mci的调用void CMusicPlayerDlg::Load(HWND hWnd, CString strFilepath,int j){m_hWnd = hWnd;mciSendCommand(DeviceID, MCI_CLOSE, 0, 0);//在加载文件前先清空上一次播放的设备mciopenparms.lpstrElementName = strFilepath;//将音乐文件路径传给设备DWORD dwReturn;if (dwReturn = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT, (DWORD)(LPVOID)&mciopenparms)){ //如果打开文件失败,则将出错信息储存在buffer,并显示出错警告??wchar_t buffer[256];mciGetErrorString(dwReturn, buffer, 256);MessageBoxW( buffer, L"出错警告!", MB_ICONHAND| MB_ICONERROR| MB_ICONSTOP);}DeviceID = mciopenparms.wDeviceID;GetLenth();//StatusParms.dwReturn;//MessageBox(StatusParms.dwReturn);//打开文件成功就关联文件到设备now_play = j;}DWORDCMusicPlayerDlg::GetMode()//这个比较关键,是获得当前的播放状态(一首歌是否播放完了就是靠他){StatusParms.dwItem = MCI_STATUS_MODE;mciSendCommand(DeviceID, MCI_STATUS, MCI_STATUS_ITEM,(DWORD)(LPVOID)&StatusParms);mode = StatusParms.dwReturn;return mode;}DWORDCMusicPlayerDlg::GetNow()//当前是播放的歌曲第几分第几秒?可以用来改变时间栏和进度条{StatusParms.dwItem = MCI_STATUS_POSITION;mciSendCommand(DeviceID, MCI_STATUS, MCI_STATUS_ITEM,(DWORD)(LPVOID)&StatusParms);now=StatusParms.dwReturn;return now;}DWORDCMusicPlayerDlg::GetLenth()//获得歌曲的长度。

简易音乐播放器数电实验

简易音乐播放器数电实验

数字电路与逻辑设计综合设计实验报告实验名称:简易音乐播放器姓名:班级:班班内序号:27一、设计任务要求设计制作一个简易乐曲播放器。

1)播放器内预存3首乐曲;2)播放模式:顺序播放、随机播放,并用数码管或LED显示当前播放模式;3)顺序播放:按内部给定的顺序依次播放3首乐曲;4)随机播放:随机产生一个顺序播放3首乐曲;5)用数码管显示当前播放乐曲的顺序号;6)设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;7)设置Next和Previous键,按Next键可以听下一首,按Previous键回到本首开始;8)选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;9)选做:自拟其它功能。

二、系统设计1)设计思路首先音乐有音高和节拍两个因素。

音高可以通过对时钟信号不同的分频得到不同频率的信号进而发出不同的音,节拍可以定义一个音符计数器,计数器的每一个值对应一个音高。

对播放的控制包括播放/暂停、复位、上一首、下一首、本首重放、顺序播放/随机播放,用一个状态机,共播放和暂停两个状态,另外歌曲的切换以及暂停都是利用音符计数器赋不同的值或保持不变来实现。

音高的显示是通过不同的音符对应不同的点阵row和col的值来实现的。

歌曲号是通过音符计数器的值来得出并送到数码管显示的。

播放、暂停、顺序、随机这些的显示是通过对状态和模式变量的判别进而送到LED显示的。

2)总体框图50M3)分块设计共分为9个模块。

Div1,div2,div3都是用来分频的,分别是将50mhz变为1mhz,将1mhz变为4hz,将1mhz变为2hz。

Rand模块用来产生随机数,用于随机播放模式。

Keycontrol是核心模块,用来实现顺序播放、随机播放、播放/暂停、上一首、下一首、本首重放、复位、显示顺序或随机播放状态、显示播放/暂停态。

Melody模块是将音符计数器的每一个值与一个音高相对应,即记录曲谱。

Index模块是用melody模块传来的音高信号通过查表得到它所对应的音高的分频数,然后将这个分频数送给speaker模块,以发出不同的音,另外对应不同的音它还对点阵进行不同的输出,进而显示出音高。

音乐播放器

音乐播放器

数字电路与逻辑设计综合设计实验报告实验名称:简易音乐播放器姓名:班级:071班内序号:一、摘要本实验主要在理论分析和具体的软硬件实现上,完成一个简易的音乐播放器,可以完成上一曲,下一曲,顺序播放,停止,暂停和液晶显示,同时还增加了单曲循环播放功能。

在理论分析的基础上,用VHDL语言编写源代码,再配合具体电路连接,实现对蜂鸣器振动的控制,以及对各项显示功能的切换控制等。

关键字:频率蜂鸣器显示二、设计任务要求n设计制作一个简易乐曲播放器。

1.播放器内预存3首乐曲;2.播放模式:顺序播放、随机播放,并用数码管或LED显示当前播放模式;3.顺序播放:按内部给定的顺序依次播放3首乐曲;4.随机播放:随机产生一个顺序播放3首乐曲;5.用数码管显示当前播放乐曲的顺序号;6.设置开始/暂停键,乐曲播放过程中按该键则暂停播放,再按则继续播放;7.设置Next和Previous键,按Next键可以听下一首,按Previous键回到本首开始;8.选做:用户可以自行设定播放顺序,设置完成后,播放器按该顺序依次播放乐曲;9.选做:自拟其它功能。

三、设计思路和总体设计框图1.分频器讲1MHz的时钟频率分成4Hz,便于输出每个音符2.切换控制器接收到上曲和下曲信号后,自动切换输出时钟;如当正在播放曲1时,收到上曲信号后,自动切换到向曲2提供时钟,中断曲1的时钟;3.每首曲目结束后,自动输出一个单脉冲给复位模块,如果此时是顺序播放模式时,复位模块向控制器输出复位信号;如果此时是单曲重复播放模式时,复位模块屏蔽接收的单脉冲,不向控制器输出信号。

4.曲目向数控分频器依次输入各个音符,在数控分频器中与2047相减后,迫使蜂鸣器振动,由于各个音符的频率不同,振动的频率自然不同,蜂鸣器发出的声音也完全不同。

5.当输入暂停信号时,暂停模块用高电平与时钟相或,从而产生中断时钟的效果;当输入停止信号时,原理同上,只是多输出一个复位信号给切换控制器。

音乐播放器的实验报告

音乐播放器的实验报告

音乐播放器的实验报告音乐播放器的实验报告引言:音乐是人们生活中不可或缺的一部分,而音乐播放器作为传播音乐的工具,在现代社会中扮演着重要的角色。

本次实验的目的是研究音乐播放器的功能和性能,以及对音乐播放器的使用体验进行评估。

一、功能分析音乐播放器的功能主要包括音频播放、音频格式支持、播放列表管理、音量控制、音效调节等。

通过实验测试,我们发现该音乐播放器在这些方面表现出色。

首先,它支持多种音频格式,包括MP3、WAV、FLAC等,能够满足用户对不同音频格式的需求。

其次,播放器具备良好的播放列表管理功能,用户可以根据自己的喜好创建、编辑和删除播放列表,方便快捷地管理自己的音乐。

此外,音乐播放器还提供了音量控制和音效调节功能,用户可以根据自己的需求来调整音量大小和音频效果,提升音乐的听感。

二、性能测试为了评估音乐播放器的性能,我们进行了多项测试。

首先是音频播放质量测试,我们选择了不同类型的音频文件进行播放,并对比了不同音频播放器的音质表现。

结果显示,该音乐播放器在音频播放质量方面表现出众,音质清晰、细腻,能够还原音频本身的特点。

其次是播放稳定性测试,我们将大量音频文件添加到播放列表中,并进行循环播放测试。

结果显示,音乐播放器在长时间播放过程中没有出现卡顿、崩溃等问题,表现稳定可靠。

最后是资源占用测试,我们对音乐播放器的内存占用和CPU占用进行了测试。

结果显示,该音乐播放器在资源占用方面表现较好,占用资源较少,对设备性能的影响较小。

三、用户体验评估除了功能和性能,用户体验也是评价音乐播放器的重要指标之一。

为了评估用户体验,我们进行了用户调研和使用测试。

调研结果显示,用户对该音乐播放器的界面设计和操作方式较为满意,认为界面简洁、直观,操作便捷。

在使用测试中,用户对音乐播放器的播放速度、响应速度和界面切换速度进行了评估,结果显示,音乐播放器在这些方面表现良好,能够满足用户对流畅使用的需求。

此外,用户还对音乐播放器的搜索功能、歌词显示和背景音乐设置等进行了评价,认为这些功能丰富了用户体验,提升了音乐播放的乐趣。

音乐播放器实验报告

音乐播放器实验报告
通过控制单片机定时器的定时时间产生不同频率的音频脉冲使 得蜂鸣器发出不同音节的声音,即声调。用软件延时来控制发音时 间的长短,控制节拍。把乐谱中的音符和相应的节拍变换为定时常 数和延时常数,作为数据表格存放在存储器中,由程序查表得到定 时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该 音频脉冲的持续时间。
b 功能结构图: Key1 负责切换播放歌曲,共两首。分别是祝你生日快乐和寂寞 沙洲冷;Key2 负责切换 LED 显示花样,共 3 种:顺序显示,由两 边向中间移动然后向两边移动,循环显示。
三、 实验器材 Windows7 操作系统 Proteus 仿真软件 keil4 软件 AT89C51 单片机 共阴极数码管 开关 电容 晶振 电阻 发光二极管 蜂鸣器
(2) 系统要求有选择上一首、下一曲功能; (3) 两个按键,可在播放和显示花样中进行切换; (4) 用一个键控制花样类型的显示功能; (5)用 LED 灯闪烁“伴奏”。 五、 实训基本原理(附原理图、源程序清单) 1 硬件设计 ①LED 显示电路设计与原理
LED 显示电路是由 8 个 LED 发光二极管组成,连接方式是共阳 极,LED 接到单片机的 P1 口,若是低电平,可使 LED 亮。发光二 极管的亮灭是由内部程序控制的,8 个 LED 发光二极管分别对应不 同的音阶,所以 LED 会随着音阶的变化按规律亮灭。
一定的物理实件(扬声器),就产生了一定频率的声音。若改变输出 方波的频率,产生的声音随之改变。通过控制输出方波的时间长短, 声音的长短也可以得到控制,因此,根据乐谱,以类似的音及同样 的节拍,单片机就可以产生电子音乐。音乐的播放模式及选择可以 通过按键的输入得以实现。在本次设计中将蜂鸣器连接到 AT89C52 的 P3^7 接口处。

电子技术试验之音乐播放器实验报告

电子技术试验之音乐播放器实验报告

电子技术试验之音乐播放器实验报告一、实验目的1、熟练使用MAX+PLUSII软件平台。

2、了解音阶发生原理,学会用硬件描述语言(AHDL)建立音阶发生器模块,并最终编成乐曲,使其可以播放乐曲。

3、下载到JDEE-10试验箱上进行调试和验证音乐播放器的功能。

二、预期功能1、播放一首乐曲。

2、用任意微动开关的按动来控制音乐的播放与停止。

3、数码管两位显示正在播放的音符简谱。

4、点阵模拟五线谱,用十字灯标出正在播放的音符在音阶中的位置。

三、方案设计顶层设计图:模块说明:FREQ**:不同的音高发生器FREQDIVIDER:将高音一分为二产生低音的分频器KEYFORSTOP+stopsign:控制音乐播放与停止的输入端,stopsign为计数器,输出停止与播放的信号counter1:作为音乐节奏的分频器NEW_WORLD:乐曲播放器,曲名为《来自新世界》ED27SEGMENT:数码管控制器,输出显示简谱与高低音counter_disp+DISP:点阵控制器及其输入的扫描时钟信号分频器下面将介绍以上模块的具体实现及功能。

1、分频①音频分频音名与频率的关系:音乐上的十二平均律规定:每两个八度音之间的频率相差一倍。

在这两个八度音之间,分成十二个半音,每两个相领半音的频率比为12√2。

另外还规定,音名A(简谱低音6)的频率为 440Hz。

音名 B 到 C 之间、E 到 F 之间为半音,其余为全音。

这样,可计算得从低音5到高音3之间的每个音名的频率为:(*l表示低音,*h表示高音)∶g:1567.98Hzgl783.99Hzal:880Hz a:1760Hzbl:987.76Hz b:1975.53Hz->2024.77c:1046.50Hz ch:2093Hz->1911.13d:1174.66Hz dh:2349.32Hz->1702.62e:1318.51Hz eh:2637.02Hz->1516.86f:1396.92Hz这些低频信号由高频信号经过分频而得,时钟频率4MHz,而音频ah为1760Hz,则4M/1760=2272,由此设计一个2272进制的计数器,其时钟信号为4MHz,进位信号就是1760Hz。

播放器实验报告(3篇)

播放器实验报告(3篇)

第1篇一、实验目的1. 熟悉播放器的基本原理和功能模块。

2. 掌握音频、视频文件的解码与播放技术。

3. 提高编程能力和项目实践能力。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 常用库:FFmpeg三、实验内容1. 播放器界面设计2. 音频、视频文件解码3. 音频、视频同步播放4. 控制功能实现四、实验步骤1. 播放器界面设计(1)创建项目,添加所需控件(2)设置控件属性,包括大小、位置、颜色等(3)添加播放按钮、暂停按钮、停止按钮等控制按钮2. 音频、视频文件解码(1)引入FFmpeg库(2)加载音频、视频文件(3)解码音频、视频数据3. 音频、视频同步播放(1)创建音频、视频播放线程(2)实现音频、视频数据同步(3)调整播放进度4. 控制功能实现(1)添加播放按钮、暂停按钮、停止按钮等事件处理函数(2)实现播放、暂停、停止等功能五、实验结果与分析1. 播放器界面设计本实验成功实现了播放器界面设计,包括播放区域、控制按钮、进度条等。

界面简洁美观,用户操作方便。

2. 音频、视频文件解码通过引入FFmpeg库,成功实现了音频、视频文件的解码。

在解码过程中,我们提取了音频、视频的采样率、码率、帧率等关键信息,为后续同步播放提供了依据。

3. 音频、视频同步播放在实现音频、视频同步播放时,我们采用了线程同步技术。

通过创建音频、视频播放线程,分别处理音频、视频数据的播放,确保了音频、视频播放的同步性。

同时,我们还实现了播放进度调整功能,方便用户实时查看和调整播放进度。

4. 控制功能实现本实验成功实现了播放、暂停、停止等功能。

用户可以通过控制按钮,轻松实现播放器的控制操作。

六、实验总结通过本次实验,我们掌握了播放器的基本原理和功能模块,熟悉了音频、视频文件的解码与播放技术。

同时,我们还提高了编程能力和项目实践能力。

以下为实验过程中总结的一些心得体会:1. 熟练掌握FFmpeg库的使用,能够实现音频、视频文件的解码与播放。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验项目名称基于单片机的音乐播放器二、实验目的Ⅰ设计方案设计一个基于AT89C51系列单片机的音乐盒,利用按键控制切换演奏出不同的音乐。

蜂鸣器发出某个音调,与之对应的LED灯亮起。

使用两个按键,一个用来切换歌曲,另一个切换LED的变化花样。

Ⅱ研究内容①电路有两种模式:演奏音乐模式和花样灯模式A 演奏音乐模式:演奏完整的一首歌曲,LED随着音乐变化;B 花样灯模式:LED变化出各种花样,蜂鸣器随着发出“滴滴”声;②按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲;按下按键2进入花样灯模式,再按切换LED花样,共三种花样。

Ⅲ总体方案图a组成框图:音乐盒的系统结构以AT89C51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。

单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。

系统组成框图如下所示:b功能结构图:Key1负责切换播放歌曲,共两首。

分别是祝你生日快乐和寂寞沙洲冷;Key2负责切换LED显示花样,共3种:顺序显示,由两边向中间移动然后向两边移动,循环显示。

三、实验器材Windows7 操作系统Proteus仿真软件keil4软件AT89C51单片机共阴极数码管开关电容晶振电阻发光二极管蜂鸣器四、实验要求(1)以单片机为主控处理器,用蜂鸣器播放歌曲;(2)系统要求有选择上一首、下一曲功能;(3)两个按键,可在播放和显示花样中进行切换;(4)用一个键控制花样类型的显示功能;(5)用LED灯闪烁“伴奏”。

五、实训基本原理(附原理图、源程序清单)1 硬件设计①LED显示电路设计与原理LED显示电路是由8个LED发光二极管组成,连接方式是共阳极,LED接到单片机的P1口,若是低电平,可使LED亮。

发光二极管的亮灭是由内部程序控制的,8个LED发光二极管分别对应不同的音阶,所以LED会随着音阶的变化按规律亮灭。

②硬件电路图及其功能介绍1)电路中用P3.2、P3.3 控制键;2)P1.0~P1.7控制LED;3)P2.3控制蜂鸣器;4)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。

③时钟振荡电路AT89C51中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入和输出端。

④蜂鸣器播放声音是通过振动产生的。

单片机对某一引脚以一定的频率循环置1置0,该引脚便产生一定频率的方波,方波通过放大,作用于一定的物理实件(扬声器),就产生了一定频率的声音。

若改变输出方波的频率,产生的声音随之改变。

通过控制输出方波的时间长短,声音的长短也可以得到控制,因此,根据乐谱,以类似的音及同样的节拍,单片机就可以产生电子音乐。

音乐的播放模式及选择可以通过按键的输入得以实现。

在本次设计中将蜂鸣器连接到AT89C52的P3^7接口处。

通过控制单片机定时器的定时时间产生不同频率的音频脉冲使得蜂鸣器发出不同音节的声音,即声调。

用软件延时来控制发音时间的长短,控制节拍。

把乐谱中的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出该音频脉冲的持续时间。

2 软件设计①在本程序中设置了两个标志:count1和count2,分别初始化为1和0。

按键1使得count1在1和2之间切换,按键2使得count 2在1~4之间切换。

程序检测count1的值,count等于1时播放第一首歌曲,2时播放第二首。

同时根据count2的值来切换LED的花样。

count1和count2的值是互斥的,设置count1等于1、2时,count2同时设置为0;设置count2等于1~4时,count1也同时设置为0。

②音调的确定1)要产生音频脉冲,只要计算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用定时器计时这半个周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。

2)可利用AT89C51的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0和TL0产生不同频率的方法。

3)C调各音符频率与计数值T的对照表频率T 参数中音频率T 参数高音频率T 参数低音Do 262 1908 229 Do 523 956 115 Do 1046 57 57 Do﹟277 1805 217 Do﹟554 903 108 Do﹟1109 54 54 Re 294 1701 204 Re 587 852 102 Re 1175 51 51 Re﹟311 1608 193 Re﹟622 804 97 Re﹟1245 48 48Mi 330 1515 182 Mi 659 759 91 Mi 1318 45 45 Fa 349 1433 172 Fa 698 716 86 Fa 1397 43 43 Fa﹟370 1351 162 Fa﹟740 676 81 Fa﹟1480 41 41 So 392 1276 153 So 784 638 77 So 1568 38 38 So﹟415 1205 145 So﹟831 602 72 So﹟1661 36 36 La 440 1136 136 La 880 568 68 La 1760 34 34 La﹟464 1078 129 La﹟932 536 64 La﹟1865 32 32Si 494 1012 121 Si 988 506 61 Si 1976 30 30③节拍的确定音乐是由许多不同的音符组成,而每个音符对应着不同频率,这样就可以利用不同的频率组合,加以与拍数对应的延时,构成音乐。

④编码do re mi fa so la si分别编码为1~7,重音do编为8,重音re 编为9,停顿编为0。

播放长度以十六分音符为单位(在本程序中为165ms),一拍即四分音符等于4个十六分音符,编为4,其它的播放时间以此类推。

音调作为编码的高4位,而播放时间作为低4位,如此音调和节拍就构成了一个编码。

以0xff作为曲谱的结束标志。

歌曲播放的设计。

先将歌曲的简谱进行编码,储存在一个数据类型为unsigned char 的数组中。

程序从数组中取出一个数,然后分离出高4位得到音调,接着找出相应的值赋给定时器0,使之定时操作蜂鸣器,得出相应的音调;接着分离出该数的低4位,得到延时时间,接着调用软件延时。

⑤程序流程图及代码:主程序流程图主程序代码:void main (){ uchar x;count1=0;//流水灯无花样count2=1;//唱第一首歌P34=0;//选取矩阵键盘的一列EA=1;//开总中断EX0=1;//开外部中断0IT0=1;//外部中断0下降沿触发方式EX1=1;//开外部中断1IT1=1;//外部中断1下降沿触发方式TMOD=0x01;//定时器0工作在方式1TH0=0;TL0=0;ET0=1;while(1){if(count1!=0) //音乐停止,花样灯开始按照花样闪烁{switch(count1){case 1:for(x=0;x<14;x++){duan=1;P1=huayang1[x];beep();delay1(300);duan=0;if(count1!=1)break;}break;case 2:for(x=0;x<14;x++){duan=1;P1=huayang2[x];beep();delay1(300);duan=0;if(count1!=2)break;}break;case 3:for(x=0;x<16;x++){duan=1;P1=huayang3[x];beep();delay1(300);duan=0;if(count1!=3)break;}break;}}else{song();delay1(1000);}}}⑥播放音乐子程序流程图:播放音乐子程序代码:void song(){uint temp;uchar jp;//jp是简谱i=0;while(1){ if(count2==0){break;}if(count2==1) //选曲temp=qnzl[i]; // 播放千年之恋if(count2==2)temp=jmszl[i]; // 播放寂寞沙洲冷if(temp==0xff) //结束标志break;jp=temp/16; //取数的高4位duan=1;P1=yinyue[jp];duan=0;if(jp!=0){timeh=cuzhi[jp*2];timel=cuzhi[jp*2+1];}else{TR0=0;fm=1;//关蜂鸣器}delay(temp%16); //取数的低4位TR0=0; //唱完一个音停10MSfm=1;delay1(10);TR0=1;i++;}TR0=0;fm=1;}延时程序代码:void delay(uint z) //延时165MS,即十六分音符{ uint x,y;for(x=z;x>0;x--)for(y=19000;y>0;y--);}void delay1(uint z) //延时1MS{ uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--);}六、实验步骤1. 建立一个新工程单击Project菜单,在弹出的下拉菜单中选中New Project选项然后选择你要保存的路径,输入工程文件的名字,然后点击保存。

同时弹出一个对话框,要求选择单片机的型号,你可以根据你使用的单片机选择AT89C52, ,选择完后右边栏是对这个单片机的基本的说明,点击确定。

2. 单击“File”菜单,再在下拉菜单中单击“New”选项此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

用C语言编写程序,则扩展名为(.c)。

然后,单击“保存”按钮。

3. 回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,在弹出的菜单中单击“Add File to Group ‘Source Group 1’”选中Test.c,然后单击“Add ”之后请输入C语言源程序。

4. 单击“Project”菜单,再在下拉菜单中单击“Built Target”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/Stop Debug Session”(或者使用快捷键Ctrl+F5)5. 调试程序:单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“Stop Running”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“Serial Windows #1”选项,就可以看到程序运行后的结果。

相关文档
最新文档