C语言电子设.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言简易电子琴程序设计 王永平 2011-3-22 简介:这是一个用C语言写的简易电子琴程序。里面写了五首曲子,分别是《东方红》、《挥剑问情》、 《祝你生日快乐》、《回梦游仙》和《蝶恋》。可自己弹奏。程序可发ABCDEFG调,低中高音共147个音。本程序经TurboC2.0调试通过,确认无任何问题,现将源码公布。对于内置的五首曲子及8255发声频率表,可访问网址复制: /xuanyiaijie/blog/item/82cae9c3ce7991.html 其他部分不可复制,不可修改,所以不要幻想直接copy这些程序。思维是最重要的,事实上,当你自己一字一字敲下这些代码进行调试时,你会体会更深,比如“;”的重要性,什么时候用1,什么时候用0,等等。 一、简易电子琴 先来看看要做的简易电子琴是个什么样子~ 1、右下角,生成的电子琴EXE文件 2、双击打开,出现主界面 3、按数字键1-5可以播放预置的音乐 4、播放音乐时可以按数字键0随时退出播放,按0后出现: 5、按数字键6,自己弹奏下~首先提示选择什么音调(按数字键0可以取消选择,回到主界面) 6、然后提示选择节拍(按数字键0可以取消选择,回到主界面) 7、选好节拍开始弹奏~ 8、按数字键8退出程序,先显示“Thanks for using!”,延时2s后退出程序 9、若是不能正确发音,可以按7调节~ 二、设计分析 1、要做出这个简易电子琴,首先要解决发音问题。 1)用什么发声。 调用系统主板8255发声。 2)发音程序。 C语言里有sound()函数,sound(Frequency)可发频率为Frequency的音。发出一个音后,它不能一直存在,为此需要控制发音持续多长时间。这就需要延时程序。C语言里带的延时程序有sleep(s);delay(ms);显然不能用sleep(s);函数,因为这个程序最少都会延时1秒,至少每秒才发一个音的歌也太难听了。执行延时程序后,还需调用一个函数nosound();否则它还是会一直发原来那个音停不下来。这样要发一个音,需要的程序为: sound(Frequency); delay(ms); nosound(); 3)延时程序。 大家都知道delay();这个函数很不精确,不精确到什么程度呢,delay(10000)原理上说它应该延时10秒,事实上,在绝大多数电脑上,这个延时程序不用1秒就运行完了。因而不可能用系统自带的delay()函数来延时。C语言里有实现精确延时的方法,但总觉得有点麻烦。怎么办?只好自己写个延时程序了。电脑运行速度很快,要让它实现延时,比较简单的就是让电脑做加减法。下面是我写的一个延时子程序,针对这个电子琴编的。 它是一个三重循环,a,b,c都是变量。num为要实现的延时时间,单位是ms,比如200ms。 对不同电脑,执行这个程序的时间是不同的,需要调节一下b,c的上限值来实现精确定时。 在这个电子琴程序里,按键7退出时设置是延时2秒再退出,可以通过对照标准时间来改变b,c上限值,让这个延时程序变精确。 void Delay(int num) { int a,b,c; for(a=0;anum;a++) for(b=0;b1000;b++) for(c=0;c440;c++); } 4)适应不同电脑。 刚刚说了,不同电脑的运算速度不一样,因而程序还需要增加一个调音的功能,实际上就是改变b,c的上限值。 调音程序: 核心思想,通过按键改变bmax,cmax的值。 延时程序是个三重循环,bmax可以用作粗调,cmax可以用作微调。 这几句就是对怎么控制bmax,cmax的说明。 printf( Time Adjust!\n); printf( Press a to accelerate time,d to slow down. \n); printf( Press 1-5 to Rough adjustment,or q-t to Fine adjustment.\n); printf( Rough:1- 1;2- 2;3- 5;4- 10;5- 100;6- 1000\n); printf( Fine: q- 1;w- 2;e- 5;r- 10;t- 100;\n); 这样延时程序需要写成: void Delay(int num) { int a,b,c; for(a=0;anum;a++) for(b=0;bbmax;b++) for(c=0;ccmax;c++); } 至此,发音程序就完成了。 2、如何完整弹奏一首歌曲。 一首歌,有音调,有节拍 用两个数组,一个存音调,一个存节拍,然后再循环播放即可实现 那么,如何判断一首歌播完? 用一个特

文档评论(0)

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

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

1亿VIP精品文档

相关文档