- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
音乐播放器按键控制模块
4.2.1 键盘的实现
凌阳SPCE061A单片机精简开发板自身带有4个按键,分别为S1、S2、S3、S4,其中S4用于对单片机进行复位,因此还有S1、S2、S3三个按键可用。在SPCE061A中,S1、S2、S3都在内部与IOA0~IOA2相连接,因此可以通过控制IOA口低八位控制这几个键,在程序中,S1、S2、S3相当于一个1×3的键盘,通过读写IOA口低八位,得到端口数据,通过移位运算等,即可得到键值,并将键值存放于变量KeyCode中。
为实现通过IOA口控制1×3的键盘,需要将IOA口低八位设置为输入模式,只有这样才能确保能够读取IOA口的状态;同时,将IRQ6中断作为键盘的中断,每当IRQ6中断到来,系统自动调用键扫描程序Key_Scan(),扫描键盘,通过检测按键的抬起状态和抬起时间,判断是否有键按下。程序中,IRQ6中断由按键扫描初始化程序启动,在初始化程序中,首先完成对IO口的输入以及变量的初始化,然后开启IRQ6中断。之后,没每当有键按下,便会产生一个IRQ6中断,并进入中断服务子程序,在进入该程序以后,调用键扫描程序扫描键盘,读取键值并存储。
在键盘实现中,定义3个全局变量KeyCode、ScanCnt、KeyUp分别用来保存得到的键值、按键持续时间、按键抬起标志,当本次扫描有键按下时,KeyUp置0,若本次得到的键值与上次键值相等时,则ScanCnt加1,否则保存新键值并将ScanCnt置1;当本次扫描无键按下,则KeyUp置1。当按键持续时间ScanCnt小于4时,则认为没有发生按键;当按键持续时间ScanCnt等于64则认为有发生一次按键;若ScanCnt介于4于64之间且按键抬起标志KeyUp为1时,则认为发生一次按键。
键盘的实现,主要是完成四个函数,即键盘初始化程序Key_Init()、键扫描程序Key_Scan()、取键值程序Key_Get()以及中断服务程序。由于这些程序面向硬件进行操作,因此使用汇编语言进行编写。
键盘初始化程序的流程图如图4.3所示,初始化操作主要包含寄存器数据的保存、变量的初始化、IOA口读写方式的设置以及IRQ6(128HZ)中断的开启等。
图4.3 键盘初始化程序流程图
键扫描程序的流程图如图4.4所示,键盘扫描程序事实上是一个去抖程序,先判断是否有键按下,如果有的话,判断键值和上次扫描到的键值是否相同,如果相同,按键持续时间加1,也就是延时;如果不同,按键持续时间赋1,保存键值以便和下次扫描键值比较;如果没有键按下,认为键盘已经抬起。
图4.4 键扫描程序流程图
取键值程序如图4.5所示,由于扫描键盘是在中断中进行的,所以取键值时要先关中断,是否延时到设定时间,即是否扫描了四次键值都相等,如果是,比较按键的时间间隔是否小于0.5s(ScanCnt64),比较时间间隔主要是为了设定按键时间间隔,如果按键时间间隔小于0.5s而且键盘确认抬起,则表示发生一次按键,将键值保存在变量KeyCode中;否则,键值为0;开中断后,返回键值。
图4.5 键值获取程序流程图
图4.6所示为IRQ6中断服务程序的流程图。
图4.6 IRQ6中断服务程序
4.2.2 音频控制的实现
凌阳SPCE061具有强大的语音处理功能,其提供了许多S480音频播放控制的函数,通过调用这些函数,可方便我们实现对S480音频播放的控制,在该系统中,需要通过按键来控制音频播放,实现其上一曲、下一曲、播放和暂停的功能,由于设计的键盘是1×3的键盘,而现在需要实现4个功能,因此考虑将播放和暂停功能合并到一个按键,即在播放时按下该键则暂停播放,若某音频在被暂停以后按下该键则继续播放。
为了能够实现上一曲以及下一曲之间的切换,则需要将音频文件进行编号,SPCE061A IDE开发中,Resourse.asm文件中定义了音频文件的相关信息,T_SACM_S480_SpeechTable定义了资源文件的序号,默认从0开始,如下所示:
.PUBLIC T_SACM_S480_SpeechTable
T_SACM_S480_SpeechTable:
.DW _RES_48_48K_SA
.DW _RES_72_72K_SA
.DW _RES_K72_72K_SA
由于程序中,调用SACM_S480_Play()来播放音频,因此在对音频文件进行编号以后,要实现上一曲及下一曲间的切换则转变为改变音频序号的问题,切换至上一曲时,应减小序号,切换至下一曲时应增加序号。在本设计中,以全局变量SnIndex代表音频的序号,以全局常量MaxIndex代表音频资源的总数。
在不考虑按键的情况下,要实现S480压缩格式音频文件的持续播放,需要利用如下的代码实现:
while((SACM_S480_Status() 0x
您可能关注的文档
- 需求采集文档模板.doc
- 需要了解的18个喷墨打印机术语.docx
- 需要买的东西和登机入关事项.doc
- 需要了解的自动锁螺丝机的常见疑问.doc
- 需要佩戴防尘口罩的几大行业.doc
- 需要用到我们无线路由器的桥接.doc
- 需要注意的雅思口语流程.docx
- 需要背诵的托福阅读词汇.docx
- 需设防火门的部位.doc
- 震动光缆与红外对射的异同点.doc
- 关于传承红色基因争做强国少年范文5篇.pdf
- 商业计划书优秀模板参考2篇.pdf
- 2024学年小学安全无小事防范先行班会教学设计.docx
- 2024学年小学助人为快乐之本远离校园恶性竞争班会教学设计.docx
- 2024学年小学培养良好习惯建设人品优秀校园班会教学设计.docx
- 2024学年小学安全和谐快乐让我们共建一个美好的校园班会教学设计.docx
- 2024学年小学安全防范让校园更美丽班会教学设计.docx
- 2024学年小学对校园安全文化的内涵理解班会教学设计.docx
- 2024学年小学控制自我情绪不再成为校园动手党班会教学设计.docx
- 2024学年小学危险前的预判和判断班会教学设计.docx
文档评论(0)