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