飞思卡尔单片机电子琴课程设计.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文档。上传文档
查看更多
飞思卡尔单片机电子琴课程设计

单片机课程设计报告 电子琴设计 学 院 信息工程学院 专 业 信息工程 (电子信息工程方向) 年级班别 学 号 学生姓名 指导教师 申柏华 20 年 6 月 设计要求: 设计一个电子琴,在实验箱上实现功能电子琴的功能。键盘符号定义如下: 1 2 3 4 5 6 7 L = H 按下1-7,实验箱上的蜂鸣器发出对应的音调(中音),当同时按下L和1-7时,蜂鸣器发出低音,同时按下H和1-7时,蜂鸣器发高音。只要按键没松开,蜂鸣器一直发声,直到松到按键。 蜂鸣器的电路见下图。 按键 L +1234567 1234567 H +1234567 音符 低 中 高 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 频率值 262 294 330 349 392 440 494 523 558 660 698 784 880 988 1046 1175 1318 1397 1568 1760 1976 设计思路 电子琴的设计主要分为两个部分,输入和输出。键盘输入得出所要的键值,通过判别,蜂鸣器输出对应的音符。 输入:采用的键盘扫描方法为线反转法,来辨别有无按键按下,以及是哪一个按键按下。 输出:由查资料就可以得出每个音符的的音频,则对应就可以求出每个音符信号的周期。因此,输出主要是利用延时,只要判断出对应的按键按下,则延时相对应音符的半个周期的时间,然后将接蜂鸣器的输出端口的电平翻转,再进行延时,然后翻转输出电平,直到按键松开。 为了能够发出高低音,要同时按下两个键,即当同时按下L和1-7时,蜂鸣器发出低音,同时按下H和1-7时,蜂鸣器发高音。则按键扫描必须能够识别两个按键,通过两个按键进行判断到底是要发出哪一个频率的声音。 解决重键问题的办法: 方案一:因为1~7和H,L分别在不同行上,所以分为两个扫描程序,第一个扫描程序只扫描1~7所在的3~4行,得出键值1~7而第二个扫描程序只扫描H和L所在的1~2行,判断此时应发的是高音,低音或是中音。 方案二:键盘扫描方法采用线反转法,这样单个键按下(中音)得到的键盘接口的八位二进制值就会与两个键同时按下(高音或低音)得出的键盘接口的八位二进制的值不同。那么只要根据键盘的接口值,就可以判断出此时应发的是高音,低音或是中音的1~7 设计步骤 首先建立一个全新的工程,添加必要的头文件,如键盘程序的头文件keyboard.h,总头文件includes.h,接着其他的程序都可以在main.c中编写; 编写程序; 编译程序; 在板上调试; 修改,编译,直到成功。 程序流程(含流程图及详细步骤解释) 方案一: 方案二: 方案一详细步骤解析: 对芯片进行初始化,设置总线时钟信号,分频,清标志位等。 采用方案一的键盘扫描程序,具体为:先设置键盘的接口为高四位输入,低四位输出,输出接键盘的行,输入接键盘的列。从第一行开始,逐行输入0,接收到列的值,如果列值不全为1,则说明此行有按键按下,并可知道按键的位置,若全为1,则此行没有按键按下,那么就用同样的方法扫描下一行,判断有无按键按下,知道将所有的行扫描完毕。为了防止键盘的抖动问题,每次都要键盘进行多次的扫描才能确定键值。 为了能够发出高低音,要同时按下两个键,则按键扫描必须能够识别两个按键,通过两个按键进行判断到底是要发出哪一个频率的声音。解决重键问题的办法是:编写两个扫描程序,第一个扫描程序scan1( )只扫描1~7所在的3~4行,得出键值1~7而第二个扫描程序scan2( )只扫描H和L所在的1~2行,判断此时应发的是高音,低音或是中音。 判断声音应该发出的频率。首先需要从第二个扫描程序中得出是否有按下H或是L键,如果有按下H键,则发出的是高音的1 ~7,如果有按下L键,则发出的是低音的1~7,否则,就发出中音的1~7。接着从第二个扫描程序中可以得出键值1~7。通过这两层判断,就可得出相应声音的频率值。 用公式t=1000000(μS)/(F*2),得出每个声音信号半个周期的时间。 判断按键是否还在按下的状态,如果是,则不断地将输出信号延时半个周期后翻转电平,这样就可以得出所要声音的频率,如果判断出按键松开了,则跳出循环,电平不再翻转,这样就会停止发声。 重复的进行键盘扫描,按键识别,设置延时时间,翻转电平,根据按键是否按下来持续发声,这几个步

文档评论(0)

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

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

1亿VIP精品文档

相关文档