实验4人机交互任务设计.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文档。上传文档
查看更多
实验4 人机交互任务的设计 1.实验目的 (1)理解键盘模块和LED模块在μC/OS-II下的工作原理。 (2)掌握任务间通信机制——信号量。 (3)掌握在μC/OS-II下的MCU中键盘模块和LED模块的C编程方法。 (4)进一步体会基于实时操作系统的程序与前后台程序的不同之处。 2.实验任务 (1)通过本实验掌握键盘模块以及LED模块在μC/OS-II下的工作原理。 (2)根据实验提示,使用键盘与LED模块实现一个简单的人机交互任务。 在μC/OS-II下按下矩阵键盘上相应按键,其键值在LED上显示出来,同时发送给PC机。 3.预习要求 1.充分了解键盘的硬件电路以及识别键盘时存在的问题。在本次实验中大家应首先回顾一下矩阵式键盘结构,同时要熟悉RTOS下键盘模块的相关代码。可参考《嵌入式系统构件》第3章的键盘章节。 在RTOS下编写程序,对任务的管理主要是通过 OSStartHighRdy(), OSCtxSw(),OSIntCtxSw(), OSTickISR(),OSTaskStkInit()这五个函数实现的。大家首先要理解这些函数的工作原理。以及任务间的通信机制如信号量、邮箱、队列等概念和原理。 本实验在任务间通信时采用的是信号量,此内容可参考《嵌入式实时操作系统UC/OS-II》的第七章信号量管理。 2.实验之前需要查阅相关资料掌握一些有关LED数码管的基本知识,①首先需要熟悉一下LED模块的硬件结构,LED简称发光二极管,是可发光的半导体设备,一般门槛电压在1.6V~2.0V之间, LED数码管分共阳极与共阴极两种,其工作特点是,共阳极接高电平,使用低电平点亮数码管;共阴极接低电平,使用高电平点亮数码管。针对具体硬件看看共阴极与共阳极有什么区别。②熟悉七段数码显示器多路复用技术的特点,看看七段与通常所说的八段有什么不一样?③数码管主要是由段码与位码控制的,在电路图中什么是段码,什么是位码?同时请思考段码与位码是如何工作的?是如何控制LED的? 4.实验提示 1.本次实验使用的矩阵式键盘的电路图如下图4.1所示: 图4.1矩阵式键盘的电路图 采用4*4键盘,因此将键盘的行、列共8条线连接到PTA口上,其中行1-4连接到PTA0-3上,列1-4连接到PTA4-7上。即“行”对应XS128端口A的高四位。“列”对应端口A的低四位。按下相应的键会将按键的相应值输出到LED指示灯显示。如按下键A,将会把十六进制0xA的二进制编码的反码显示在指示灯上,即0101,因为LED指示灯为低电平时显示亮的状态,故将0xA的值取反会更直观。 键盘需要解决的核心问题包括扫描和去抖。之前学习的键盘扫描有行扫描法和反转法两种。在此不累述。下面主要分析一下去抖机制(状态机原理)。 键盘扫描任务还要解决按键抖动的问题。为了方便理解,先在一个完整的按键过程中定义几个状态。第N次采样时无键按下,此时键处于初态;N+1次采样时第一次采到有键按下,键进入次态,此时按键尚不稳定;N+2 采样时为连续第二次采到有键按下,键进入初稳态,次态之后初稳态之前的这段20ms的时间称为去抖周期; N+3次采样时为连续第三次采到,键进入持续稳定态,第N+I+1 次采样时为抬键后第一次被采到,此时键又回到了初态。因此把键态分为四种情况:初态,次态,初稳,稳定态; 为了使程序根据键态进行相应的处理,键盘扫描程序应为每一个按键设置状态单元,根据每个扫描周期采样到的键的即时状态是开或是关,再结合原来的键态得到现在的键态。可以建立一个状态机来扫描键盘。如图4.2所示状态机在每个扫描周期执行一次。 初态 初态 次态 初稳态 稳态 无键按下 键没有按下 将按下键的代码放入缓冲区 键仍按下 键仍然按下,找出被按下键并将代码放入缓冲区 键按下 键仍然按下,此时需要找出哪 一键,将键代码放入缓冲区 键不再按下 键未按下 初始化 图4.2矩阵键盘状态机 有上述分析得:我们可用一个单独的任务KeyScanTask()来扫描键盘。当应用程序调用了KeyInit()时,KeyScanTask()将被创建。一旦被创建后,KeyScanTask()将每KEY_SCAN_TASK_DLY毫秒执行一次。KEY_SCAN_TASK_DLY应该被设置为产一个范围在的10~30Hz的扫描频率之间(即33~100ms之间) 。在键盘扫描模块中,KeyScanTask ()函数发挥着相当重要的作用,它负责扫描任务,通过keyInitport()函数、读取列状(KeyGetCol)、写行状态(KeySelRow)函数与硬件打交道来扫描相应的行和列。 键盘扫描任务并不解决所有的问题,它所做的工作包括扫描键盘、去除抖动、按盘编码等,当然最终要把按键编码送入缓冲区keyBuf[],应用程序可以透过接口函数从该缓冲区得到键

文档评论(0)

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

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

1亿VIP精品文档

相关文档