微机与接口技术课程设计音乐发生器实验.docVIP

微机与接口技术课程设计音乐发生器实验.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微机与接口技术课程设计音乐发生器实验.doc

音乐发生器实验 目 录 1 前言 2 2 需求分析 2 2.1原理 2 2.2要求 2 2.3任务 2 2.4运行环境 2 2.5开发工具 2 3 概要设计 3 3.1系统流程图: 3 3.2音符文件读取程序流程图 3 3.3播放子程序 4 3.4延时子程序 4 4 详细设计 5 4.1歌曲编排 5 4.2分析和设计 5 4.3具体代码实现 8 5 课程设计的总结与体会 13 6 致谢 13 7 参考资料 13 前言 编写一个程序来初始化8253定时/计数器和8255并行通信接口芯片。通过接口控制音乐发声器的播放和灯光的闪烁,实现通过运行在MFDI平台运行程序对硬件电路的控制。 需求分析 2.1 原理 编写程序对8253和8255芯片进行初始化,按照音符来设定频率和8253定时/计数器的延时时间。对8255芯片pc0和pc6口的置0和1来控制扬声器的开关,对pc4口的置0和1控制LED灯的闪烁。 2.2 要求 (1)熟悉电路,理解各个元件之间的控制流程。 (2)熟悉MFDI平台的运行环境。 (3)熟练掌握C语言,调用中断子程序和端口函数对端口进行读写数据的操作。 (4)理解乐谱知识,熟悉音频转换表和节拍的延长时间 2.3 任务 (1)曲谱转换 (2)分析电路图 (3)画出程序流程图 (4)编写代码 (5)程序分析与调试 (6)测试 2.4 运行环境 (1)WINDOWS2000/XP系统 (2)MFDI实验平台 (3)VC编译环境 2.5 开发工具 C语言 概要设计 3.1 系统流程图(如图3.1): 图3.1 系统流程图 3.2 音符文件读取程序流程图(如图3.2): 图3.2 音符文件读取流程图 3.3 播放子程序流程图(如图3.3): 图3.3 播放流程图 3.4 延时子程序流程图(如图3.4): 图3.4 延时流程图 详细设计 4.1 歌曲编排 根据歌曲的音符来获取它的频率和延时时间,具体介绍请参考《音乐发声器-音乐篇》 4.2 分析和设计 在程序的开头部分是声明了四首歌曲的频率和延时时间然后分别定义了指向频率数组和延时数组的指针, void interrupt (*oldhandler)(__CPPARGS); void interrupt handler(__CPPARGS) { (*pTimeDelay) -- ; // 延时点数减一 oldhandler(); // 调用原例程 音符 1 2 3 4 5 6 7 灯光闪烁频率 0x1 0x3 0x7 0xf 0x1f 0x3f 0x7f 说明当音符为‘1’时,相应的闪烁一个灯为0x1,音符为‘2’时,相应的闪烁两个灯为0x3,依次规律类推。 int * read(char *p) { int i; FILE * fp; int aa[300],* pp; fp=fopen(p,r); while((aa[i]= fgetc(fp))!=-1) { switch(aa[i]) { case 1:bb[i]=0x1;break; case 2:bb[i]=0x3;break; case 3:bb[i]=0x7;break; case 4:bb[i]=0xf;break; case 5:bb[i]=0x1f;break; case 6:bb[i]=0x3f;break; case 7:bb[i]=0x7f;break;} i++;} pp = dd; return pp; } 这个程序主要是从文件中读取音符,然后把读到的音符通过音符——灯光闪烁频率表转化成相应的16进制。读完了后放到一个数组中,然后返回一个数组指针。 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; // 取歌曲的第一个时延

文档评论(0)

docinpfd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5212202040000002

1亿VIP精品文档

相关文档