ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:100.19KB ,
资源ID:5970855      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5970855.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(E7设计音乐发生器实验文档在线提供.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

E7设计音乐发生器实验文档在线提供.docx

1、E7设计音乐发生器实验文档在线提供 音乐发生器实验目 录1 前言 22 需求分析 221原理 222要求 223任务 224运行环境 225开发工具 23 概要设计 331系统流程图: 332音符文件读取程序流程图 333播放子程序 434延时子程序 44 详细设计 541歌曲编排 542分析和设计 543具体代码实现 85 课程设计的总结与体会 136 致谢 137 参考资料 131 前言编写一个程序来初始化8253定时/计数器和8255并行通信接口芯片。通过接口控制音乐发声器的播放和灯光的闪烁,实现通过运行在MFDI平台运行程序对硬件电路的控制。2 需求分析21 原理编写程序对8253和8

2、255芯片进行初始化,按照音符来设定频率和8253定时/计数器的延时时间。对8255芯片pc0和pc6口的置0和1来控制扬声器的开关,对pc4口的置0和1控制LED灯的闪烁。22 要求(1)熟悉电路,理解各个元件之间的控制流程。(2)熟悉MFDI平台的运行环境。(3)熟练掌握C语言,调用中断子程序和端口函数对端口进行读写数据的操作。(4)理解乐谱知识,熟悉音频转换表和节拍的延长时间23 任务(1)曲谱转换(2)分析电路图(3)画出程序流程图(4)编写代码(5)程序分析与调试(6)测试24 运行环境(1)WINDOWS2000/XP系统(2)MFDI实验平台(3)VC编译环境25 开发工具C语言

3、3 概要设计31 系统流程图(如图3.1):图3.1 系统流程图32 音符文件读取程序流程图(如图3.2):图3.2 音符文件读取流程图33 播放子程序流程图(如图3.3): 图3.3 播放流程图34 延时子程序流程图(如图3.4):图3.4 延时流程图4 详细设计41 歌曲编排根据歌曲的音符来获取它的频率和延时时间,具体介绍请参考音乐发声器-音乐篇42 分析和设计在程序的开头部分是声明了四首歌曲的频率和延时时间然后分别定义了指向频率数组和延时数组的指针,void interrupt (*oldhandler)(_CPPARGS);void interrupt handler(_CPPARGS

4、) (*pTimeDelay) - ; / 延时点数减一 oldhandler(); / 调用原例程 这个函数表示的是调用的延时子程序。然后声明了4个Playing函数,来调用4首歌的播放子程序。下面是编写的4个read函数,分别是从文件里读出4首歌的音符。通过转换表转换成16进制的数字(如表4.1)。表4.1 音符灯光闪烁频率表音符1234567灯光闪烁频率0x10x30x70xf0x1f0x3f0x7f说明当音符为1时,相应的闪烁一个灯为0x1,音符为2时,相应的闪烁两个灯为0x3,依次规律类推。int * read(char *p) int i; FILE * fp; int aa300

5、,* pp; fp=fopen(p,r); while(aai= fgetc(fp)!=-1) switch(aai) case 1:bbi=0x1;break; case 2:bbi=0x3;break; case 3:bbi=0x7;break; case 4:bbi=0xf;break; case 5:bbi=0x1f;break; case 6:bbi=0x3f;break;case 7:bbi=0x7f;break;i+;pp = dd; return pp; 这个程序主要是从文件中读取音符,然后把读到的音符通过音符灯光闪烁频率表转化成相应的16进制。读完了后放到一个数组中,然后返回

6、一个数组指针。int Playing(void) oldhandler = getvect(INTR); / 保存原中断向量 setvect(INTR, handler); / 装载新中断向量 outportb( 0x303, 0x90); / 初始化8255 outportb( 0x303, 0x0c); / 置pc6=0 禁止8253通道2的gate引脚 outportb( 0x303, 0x00); / 置pc0=0 禁止7408 outportb( 0x307, 0xb6); / 初始化8253 pFreq = pf; / 取歌曲的第一个音频 pTimeDelay = pt; / 取歌

7、曲的第一个时延 while ( *pFreq & !kbhit() outportb( 0x306, (unsigned char)(CLK / *pFreq % 256); / 先送低字节 outportb( 0x306, (unsigned char)(CLK / *pFreq / 256); / 再送高字节 / 以上置8253通道2 的计数初值 outportb( 0x303, 0x01); outportb( 0x303, 0x0d); / 开扬声器 *pr = *pr; outportb(0x301,*pr); /printf(%x , *pr); while ( *pTimeDel

8、ay); /等待延时到 outportb(0x301,0xff); outportb( 0x303, 0x0c); outportb( 0x303, 0x00); / 关闭扬声器 pFreq+; / 获取下一个音频 pTimeDelay+; / 获取下一个延时 pr+; / 获取下一个音频灯闪烁的数目 / 歌曲结束或按了任意键 outportb( 0x303, 0x0c); outportb( 0x303, 0x00); / 再次关闭扬声器 setvect(INTR,oldhandler); / 恢复原中断向量 return 0;在Playing函数里面,首先做的是保存原中断向量,转载新的中断

9、向量。然后是就是初始化8255和8253,在通过一个while循环,把歌曲中的每个音符相应的频率取出来放到8253的计数器2中计数。然后开扬声器播放音乐,在播放音乐的时候,把从文件中读到的音符的闪烁频率送到8255的PB口中。实现闪烁效果。直到音乐结束,灯全灭。最后关闭扬声器,恢复中段向量。在main函数中,我们编写了一个界面,void main(void) char c; char s20; printf(now play music!n); printf(strike ESC to exitn); printf(music menu:n); printf(meijiujiakafei-1n

10、); printf(yifenqian-2n); printf(xiangshuiyoudu-3n); printf(tianheihei-4n); printf(exit-5n); printf(please choose the song you want to singn); while(c!=5) c = getchar(); if(c=1) s = “d:temp.txt”; pr = read(s); pf = nFreq1; pt = nTimeDelay1; Playing(); else if(c=2) s = “d:temp1.txt”; pr = read(s); pf

11、= nFreq2; pt = nTimeDelay2; Playing(); else if(c=3) s = “d:temp2.txt”; pr = read(s); pf = nFreq3; pt = nTimeDelay3; Playing(); else if(c=4) s = “d:temp3.txt”; pr = read(s); pf = nFreq4; pt = nTimeDelay4; Playing(); 按照输出来的提示信息,输入相应的歌曲的代号来收听你想听的音乐.比如输入一你就会听到动听的美酒加咖啡的美妙旋律,当你按下ESC键时,就是结束当前所听的歌曲,当按下5时则推出

12、程序43 具体代码实现#include /getvect(); setvect();#include /kbhit();#include /exit(0);#include /printf();#ifdef _cplusplus #define _CPPARGS .#else #define _CPPARGS#endifshort int nFreq1 = /声明歌曲“美酒加咖啡”的音乐频率 196,165,196,220,262,294,330,392,392,440,330,294,262,330,294,294,330,392,330,294,262,220,262,196,220,26

13、2,220,196,165,196,220,262,196,196,165,196,220,262,294,330,294,262,294,330,294,330,392,440,392,330,294,262,294,294,330,392,330,294,262,220,196,220,262,294,330,392,294,196,330,294,262,262,294,330,392,294,196,330,294,262,0;short int nTimeDelay1 = /声明歌曲“美酒加咖啡”的音乐延时 12,4,4,4,4,4,32,8,4,4,4,4,4,4,32,12,4,

14、8,8,4,4,2,2,4,16,8,4,4,4,4,4,4,32,8,4,4,8,8,4,2,2,4,4,16,4,4,4,4,4,4,4,4,32,12,4,8,8,4,4,4,4,16,4,4,4,4,4,4,4,4,32,4,4,4,4,4,4,4,4,32;short int nFreq2 = /声明歌曲“一分钱”的音乐频率 392,523,440,523,392,330,392,294,330,392,330,392,440,523,392,440,392,330,392,262,330,294,330,294,262,294,330,440,392,330,392,440,392

15、,523,440,392,330,392,294,392,294,330,294,262,0;short int nTimeDelay2 =/声明歌曲“一分钱”的音乐延时 8,8,4,4,8,4,4,4,4,16,4,4,4,4,4,4,4,4,4,8,4,16,4,4,4,4,16,4,4,4,4,16,4,4,4,4,4,4,8,4,4,4,4,16;short int nFreq3 = /声明歌曲“香水有毒”的音乐频率 196,220,262,262,262,294,330,330,294,262,220,262,196,220,262,262,262,294,330,440,392,3

16、30,392,392,330,392,440,440,523,440,392,392,330,294,330,294,294,262,220,220,330,294,294,196,220,262,262,262,294,330,330,294,262,220,262,196,220,262,262,262,294,330,440,392,330,392,392,330,392,440,440,523,440,392,392,330,294,330,294,294,262,220,220,294,262,262,392,440,440,440,330,440,392,392,330,294,2

17、62,262,220,262,392,330,330,330,294,262,262,262,262,220,196,392,440,294,392,330,330,440,440,440,440,440,440,392,392,523,588,784,784,784,660,660,523,588,588,588,984,984,984,984,984,392,392,523,523,523,440,523,523,523,440,880,784,523,523,523,523,523,523,523,440,588,523,588,784,784,784,660,660,523,588,5

18、88,588,984,984,984,984,984,392,392,523,523,523,440,523,523,523,440,880,784,523,440,523,523,660,660,440,523,588,523,523,523,0;short int nTimeDelay3 = /声明歌曲“香水有毒”的音乐延时 4,4,4,4,4,4,4,4,4,4,4,12,4,4,4,4,4,4,8,6,2,4,12,8,4,4,12,4,8,8,4,4,8,8,8,4,8,4,4,4,4,4,16,4,4,4,4,4,4,4,4,4,4,4,12,4,4,4,4,4,4,8,6,2,4

19、,12,8,4,4,12,4,8,8,4,4,8,8,8,4,8,4,4,4,4,4,8,4,4,4,12,4,4,4,16,4,4,4,8,4,4,8,4,16,4,4,4,8,4,4,4,4,4,4,4,4,12,4,4,4,4,4,8,4,16,16,4,4,4,4,4,4,8,4,4,16,16,4,4,4,4,4,4,4,4,16,16,4,8,4,8,8,8,4,4,16,4,4,4,4,8,8,16,4,4,4,4,4,4,8,4,4,16,16,4,4,4,4,4,4,4,4,16,16,4,8,4,8,8,8,8,16,4,12,16,4,8,8,4,4,8,16,16;sh

20、ort int nFreq4 = /声明歌曲“天黑黑”的音乐频率 330,349,392,392,392,330,349,392,440,349,330,349,294,330,349,349,392,349,330,294,330,196,330,349,392,392,392,330,349,392,440,349,330,349,294,330,349,330,349,392,196,294,262,440,392,440,440,294,249,440,392,440,392,440,330,349,392,392,392,330,349,392,440,349,330,349,294

21、,330,349,349,392,349,330,294,330,196,330,349,392,392,392,330,349,392,440,349,330,349,294,330,349,330,349,392,196,294,262,440,392,440,440,294,249,440,392,440,392,440,392,588,524,494,524,588,524,494,392,330,294,330,392,392,588,524,494,524,588,524,494,392,330,294,330,440,392,392,440,524,440,524,524,524

22、,440,524,440,524,392,392,440,588,524,588,524,588,524,588,524,660,588,392,588,524,494,524,588,524,494,392,330,294,330,392,392,588,524,494,524,588,524,494,392,330,294,330,524,392,392,440,524,440,524,524,440,524,440,524,440,524,392,392,440,588,524,588,524,588,524,588,524,588,330,349,392,392,392,330,349

23、,392,440,349,330,349,294,330,349,349,392,349,330,294,330,392,330,349,392,392,392,524,392,440,392,349,349,330,349,294,330,349,330,349,392,247,294,262,294,330,349,330,349,392,247,294,262,294,330,349,330,349,392,247,262,440,392,440,440,294,349,440,392,440,392,440,0;short int nTimeDelay4 = /声明歌曲“天黑黑”的音乐

24、延时 4,4,8,8,8,4,4,4,4,4,4,8,4,4,8,8,4,4,4,4,8,8,4,4,8,8,8,4,4,4,4,4,4,8,4,4,8,4,4,8,8,8,8,8,8,16,8,8,16,8,8,16,8,16,4,4,8,8,8,4,4,4,4,4,4,8,4,4,8,8,4,4,4,4,8,8,4,4,8,8,8,4,4,4,4,4,4,8,4,4,8,4,4,8,8,8,8,8,8,16,8,8,16,8,8,16,8,16,4,4,4,4,4,4,4,4,4,4,4,8,8,4,4,4,4,4,4,4,4,4,4,4,8,8,4,4,4,8,4,4,8,4,4,8,4

25、,4,4,4,4,4,4,4,4,4,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,4,4,4,4,4,4,4,4,4,4,4,8,8,4,4,4,4,4,8,4,4,4,4,8,4,4,4,4,4,4,4,4,4,4,4,8,4,12,4,4,8,8,8,4,4,4,4,4,4,8,4,4,8,8,4,4,4,4,8,8,4,4,4,8,4,4,8,4,4,4,4,4,8,4,4,8,4,4,8,8,8,8,4,4,8,4,4,8,8,8,8,4,4,8,4,4,8,8,16,8,8,16,8,8,16,8,8,16,8,16;const unsigned long

26、 CLK = 1193180; / 声明时钟频率const unsigned char INTR = 0X1C; / 声明中断号short int *pf; / 声明指向歌曲频率的指针short int *pt; / 声明指向歌曲延时的指针short int *pFreq; / 声明音频指针short int *pTimeDelay; / 声明延时指针int bb300,*pr; / 声明灯光数目数组与指针void interrupt (*oldhandler)(_CPPARGS);void interrupt handler(_CPPARGS) (*pTimeDelay) - ; / 延时点

27、数减一 oldhandler(); / 调用原例程int Playing(void);int * read(char *p) int i; FILE * fp; int aa300,* pp; fp=fopen(p,r); while(aai= fgetc(fp)!=-1) switch(aai) case 1:bbi=0x1;break; case 2:bbi=0x3;break; case 3:bbi=0x7;break; case 4:bbi=0xf;break; case 5:bbi=0x1f;break; case 6:bbi=0x3f;break; case 7:bbi=0x7f;break; i+; pp = dd; return pp; void main(void) char c; char s20; printf(now play music!n); printf(strike ESC to exitn); printf(music menu:n); printf(meijiujiakafei-1n); printf(yifenqian-2n); printf(xiangshuiyoudu-3n); printf(tianheihei-4n); printf(exit-5n); printf(please choose the song you want to

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1