用户中心

资讯 > 嵌入式系统

如何用MiniGUI设计小键盘输入

www.cechina.cn2008.03.27阅读 4586

  摘要 MiniGUI一种轻量级的针对嵌入式操作平台的图形用户界面支持系统,广泛应用于基于ARM、MIPS等主流嵌入式开发平台的项目及产品中。本文详细介绍嵌入式系统中机交互常用输入设备(4×4数字小键盘)在MiniGUI中的实现方法,包括相关的底层按键扫描驱动程序,键盘输入引擎的编写,以及如何在MiniGUI中添加新输入引擎的方法等;最后针对调试过程中的典型问题提出一些调试建议。

  关键词 MiniGUI输入抽象层 输入引擎数字键盘

  嵌入式系统通常拥有特定的输入设备。输入设备用于实现数据输入和人机交互,其种类繁多,并且不同的设备依赖不同的硬件实现。为了减弱系统的硬件相关性和提高可移植性,MiniGUI提供了统一的输入抽象层IAL(Input Abstract Layer)接口来支持不同的输入设备,减小了开发输入设备的难度。下面以开发4×4小键盘输入为例,介绍在MiniGUI中开发和实现特定键盘输入设备输入的方法。

  1 MiniGUI对键盘输入的处理方式

  MiniGUI对键盘输入的处理方式如图1所示。键盘设备驱动程序从键盘接收原始的输入事件和数据,并把它转换为MiniGUI抽象的键盘事件和数据。相关的底层事件处理例程把些键盘事件转换为上层的击键消息,放到相应的消息队列中。应用程序通过消息循环获取这些消息www.cechina.cn,交由窗口过程处理。

如何用MiniGUI设计小键盘输入如图

  开发特定的键盘输入,主要完成底层的两部分工作:键盘驱动程序设计和键盘输入引擎开发。前者负责从键盘接收原始输入事件和数据,后者负责把原始的输入事件和数据转抉成MiniGUI抽象的键盘事件和数据。至于抽象键盘事件和数据转换成上层的击键消息等工作,则是由MiniGUI提供的底层事件处理例程自己完成,无需用户设计,这正是MiniGUI提供输入抽象层接口(IAL)所带来的好处。下面具体介绍小键盘输入的开发过程与实现方法,主要介绍重要接口函数的实现。

  2 键盘驱动程序设计

  该设备驱动要实现的主要功能是进行小键盘行列扫描www.cechina.cn,接收原始键盘输入事件和数据,如有无键按下、按下某键或释放某键。返回的字符型按键信息(小键盘扫描码)由两部分组成:"高位"代表键盘输入事件,即按下(高位为O)或释放(高位为1);"低7位"代表键盘输入数据,即按下或释放的按键值。

  2.1 键盘按键值的获取

  当按下某个键时,和该键所在行列相连的两路通用外设I/O引脚就会导通,其电平就会相同,因此驱动中只需要轮询各路I/O引脚就可以知道按键值。比如,使各行线输入低电平,各列线都通过上拉电阻接高电平,此时检测各列,如果某一列电平为低,则说明该列所在的键盘已经按下www.cechina.cn,使该列与行导通变为低电平,这样就可以确定按键所在列号(j);同理,将各列置低电平,再依次查询各行,就可以确定按键的行号(i)。若定义一个键值映射数组key_arrow[5][5]表示所有键盘按键值:Key_arrow[5][5]={{0控制工程网版权所有,O,O,O,0控制工程网版权所有,0},{0控制工程网版权所有,'7','8','9','A'},{0控制工程网版权所有,'4','5','6','B'},{0控制工程网版权所有,'1','2','3','C'},{0控制工程网版权所有,'D','O','.','E'}},则按键值就为key_arrow[i][j]。初始化时行列号均为0控制工程网版权所有,因此当小键盘无键按下时,返回按键值为0(即字符NULL)。

  需要注意的是,要保证驱动正常工作,设置好行列线的输入输出模式后,需要一定时间延时以后才能开始进行行(列)查询。这是因为行列线进行输入输出模式切换时存在硬件延迟。

  2.2 键盘扫描码的获取

  为了判断键盘事件是按下还是释放,定义两个无符号型字符变量last和key。前者是静态变量控制工程网版权所有,存放等待释放的键的按键值,即前一次扫描读到的按键值;后者存放当前键盘扫描码。当键盘事件为按下时,它的值和键盘按键值相同;当键盘事件为释放时,它的值等于last高位置l后的值。

  2.3 功能实现流程

  我们用驱动程序read接口函数实现这些功能。当应用程序凋用read函数后,该函数先进行行列扫描,得到键盘按键值key_arrow[i][j]后进行判断。著其非零,即有键按下,则直接将此按键值作为键盘的扫描码(key=key_arrow[i][j]),并将其赋给字符变量last,表示该键等待释放。如果key_arrow[i][j]为零,即无键按下,则判断是否有需要释放的键:若没有(即last为O),就直接将按键值(key=0)作为键盘扫描码;若有键需要释放(1ast非零),就把1ast高位置1作为键盘扫描码(key=last 10x80),表示释放刚按下的键,然后last清零,表示已没有按键等待释放。read函数最后发送键盘扫描码(key)到用户缓冲区后返回。

  3 键盘输入引擎的设计

  第2部分要开发的是

版权声明:版权归控制工程网所有,转载请注明出处!
继续阅读

频道推荐

关于我们

控制工程网 & CONTROL ENGINEERING China 全球工业控制、自动化和仪器仪表领域的先锋媒体

CE全球

联系我们

商务及广告合作
任小姐(北京)                 夏小姐(上海)
电话:010-82053688      电话:18616877918
rendongxue@cechina.cn      xiashuxian@cechina.cn
新闻投稿:王小姐

关注我们的微信

关于我们 | 网站地图 | 联系我们
© 2003-2020    经营许可编号:京ICP证120335号
公安机关备案号:110102002318  服务热线:010-82053688