电子琴C程序.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电子琴C程序

华南师范大学实验报告 学生姓名?钟文东?????????学????号??????????? 专????业电子信息科学与技术?年级、班级??电师三班???????? 课程名称?单片机实验???实验项目???电子琴??? 实验类型???验证??设计??综合?实验时间?????年????月????日 实验指导老师???秦笛???????实验评分????????????????????? 电子琴实验 一、实验目的 1.通过实验进一步掌握51单片机的定时/计数器的应用。 2.掌握51单片机的外断原理及应用。 3. 学习系统应用程序的设计和调试方法 实验设备 PC机一台 、 实验教学板一块。 实验原理 实验线路见图4-1,通过定时器的定时,产生一定频率的信号,经P2.5输出,驱动蜂鸣器,便可发出某一频率的音调,若按一支乐曲规定的音调和节拍改变输出的变化,即可演奏一首乐曲。 图4-1 音乐输出线路 实验内容 1.电子琴功能 用实验板上K1~K7作为电子琴的7个按键,每个按键对应一个音符,规定频率如表1: 音符 频率 T值 音符 频率 T值 SI 494 61443 5 So 740 62767 1 DO 523 61387 6 La 880 63070 2 Re 587 61839 7 Si 989 63340 3 Mi 659 62243 DO 1109 63461 4 Fa 698 62427 RE 1175 63689 要求当按下其中一个按键,就通过P2.5口输出对应频率信号使蜂鸣器发出特定音符声音。 2.乐曲演奏 若按下K8键,完成自动弹奏“送别”歌曲。(乐谱见教材258页) 其原理为:乐曲的弹奏的旋律,除了用声音的大小来表现外,主要是用音符和节拍来控制。不同的音符表示不同的发出不同的高低音,声音的频率也就不同。单片机产生音符的输出控制是由定时器来完成,不同的定时值产生不同的输出频率,使蜂鸣器发生对应的音调声音,表1给出了音符与频率之间的关系。节拍据是表示当前音符输出时间长短,每一个节拍的时间长短表示了乐曲的旋律的快慢。对于节拍控制单片机可以用延时子程序来完成,方法是以乐曲1/4拍为单位,进行延时控制,单位延时时间的长短代表了乐曲不同的演奏的速度。若要实现1/2节拍的时间控制,则用2个延时单位来完成,假定1/4拍是延时0.125秒,1/2拍则延时0.25秒,1拍为延时0.5秒,其余依此类推。每首歌将其最小节拍作为一个延时基准单位。 程序设计时应先将乐曲音符和节拍转换成数据表,存于计算机的ROM中。 数据表的设计方法如下: (1)表中的一个字节代表乐曲的中一位简谱的音符与该音符的节拍。高4位用于表示音符,数字与音符的关系如表2;低4位用于表示节拍,数字与节拍及延时时间关系如表3. (2)按乐曲中乐谱顺序将所有的音符和节拍进行编码,得出数据表,最后以00H作为音乐结束标志。 表2: 表3: 四、实验要求 1.按实验题目要求设计好硬件电路,画出电路原理图。 2. 要求画出主程序、子程序、中断服务程序流程图,设计出相应程序并给程序加上较详细的注释。 3. 在Keil C51编译环境下完成程序编译。 4. 通过下载线和下载软件STC-ISP V39将编译后的程序下载到单片机。 5. 运行程序,用实验结果验证程序的正确性。若不能达到要求,分析原因、查找错误,修改源程序,再次汇编、连接,重新下载、运行,直至达到题目的要求。 六、思考题 1、结合实验板上的电路,设计一个可以任意选曲播放的电子音乐盒。 答:只需将任意歌曲的简谱存放在一个数组里面,则可以利用本程序将其弹凑出来。 2、总结矩阵键盘的识别方法。 答:我的做法是直接先将一列的列线置0,然后扫描高位是否有0出现,有0出现,则代表这列有键按下,记录此时的IO口的值,并break跳出。如果没有键按下,则键下列的列线置0,重复上面的过程,直至所有列都已经扫完。从IO的值我们便可以查表得出对应的键值是多少了。 参考流程图 六 实验程序 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit P2_5=P2^5; uchar code key_buf[8]={0x18,0x28,0x48,0x88,0x14,0x24,0x44,0x84};//线反转法键盘扫描 uchar code table[10]={0xc0,0xf9,0xa4,0x

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档