minigui 怎么实现底层引擎
发布网友
发布时间:2023-09-23 03:39
我来回答
共1个回答
热心网友
时间:2024-12-05 04:17
嵌入式系统通常拥有特定的输入设备.输入设备用于实现数据输入和人机交互,其种 类繁多, 并且不同的设备依赖不同的硬件实现. 为了减弱系统的硬件相关性和提高可移植性, MiniGUI 提供了统一的输入抽象层 IAL(Input Abstract Layer)接口来支持不同的输入设 备,减小了开发输入设备的难度.下面以开发 4×4 小键盘输入为例,介绍在MiniGUI 中开 发和实现特定键盘输入设备输入的方法.
1 MiniGUI 对键盘输入的处理方式 MiniGUI 对键盘输入的处理方式如图 1 所示.键盘设备驱动程序从键盘接收原始的输入事件 和数据, 并把它转换为 MiniGUI 抽象的键盘事件和数据. 相关的底层事件处理例程把这些键 盘事件转换为上层的击键消息, 放到相应的消息队列中. 应用程序通过消息循环获取这些消 息,交由窗口过程处理. 开发特定的键盘输入, 主要完成底层的两部分工作: 键盘驱动程序设计和键盘输入引擎开发. 前者负责从键盘接收原始输入事件和数据, 后者负责把原始的输入事件和数据转抉成 MiniG UI 抽象的键盘事件和数据.至于抽象键盘事件和数据转换成上层的击键消息等工作,则是 由 MiniGUI 提供的底层事件处理例程自己完成, 无需用户设计, 这正是 MiniGUI提供输入抽 象层接口(IAL)所带来的好处.下面具体介绍小键盘输入的开发过程与实现方法,主要介绍 重要接口函数的实现.
2 键盘驱动程序设计 该设备驱动要实现的主要功能是进行小键盘行列扫描, 接收原始键盘输入事件和数据, 如有 无键按下, 按下某键或释放某键. 返回的字符型按键信息(小键盘扫描码)由两部分组成: "高 位"代表键盘输入事件,即按下(高位为 O)或释放(高位为 1);"低 7 位"代表键盘输入数 据,即按下或释放的按键值.
键盘按键值的获取 当按下某个键时,和该键所在行列相连的两路通用外设 I/O 引脚就会导通,其电平就会相 同,因此驱动中只需要轮询各路 I/O 引脚就可以知道按键值.比如,使各行线输入低电平, 各列线都通过上拉电阻接高电平,此时检测各列,如果某一列电平为低,则说明该列所在的 键盘已经按下,使该列与行导通变为低电平,这样就可以确定按键所在列号(j);同理,将 各列置低电平,再依次查询各行,就可以确定按键的行号(i).若定义一个键值映射数组 ke y_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). 需要注意的是,要保证驱动正常工作,设置好行列线的输入输出模式后,需要一定时间延时 以后才能开始进行行(列)查询.这是因为行列线进行输入输出模式切换时存在硬件延迟.