- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何用 Linux c 编写矩阵键盘扫描程序 通常,矩阵键盘的工作方式有三种,即:程序查询、定时查 询和键盘中断扫描。键盘工作方式的选取应根据实际应用系 统中 CPU 工作的忙、闲情况而定。 此次矩阵键盘的应用场合是数字电桥系统。一者,电桥系统 对按键的响应速度、准确性都有较高的要求。二者,按键相 关代码嵌入在 linux 系统中, linux 系统中的其它程序(如 LCD 显 示)对 CPU 的占用量相对较大,基本排除程序查询方式的使用 。若采用中断扫描方式在组合按键时有一定的局限性,即不 能组合同列的按键,否则无法响应中断。 相比以上两种方式,定时扫描在嵌入式系统中的应用最为广 范。 l 设备驱动层:将底层的硬件输入转化为统一事件形式,向输入核心层 ( Input Core )汇报。 l 输入子系统核心:承上启下。为驱动层提供输入设备注册与操作接口 ,如: input_register_device; 通知事件处理层对事件进行处理;在 /Proc 下产生相应的设备信息等。 l 事件处理层:主要是和用户空间交互。( Linux 中在用户空间将所有 的设备都当做文件来处理,由于在一般的驱动程序中都有提供 fops 接 口,以及在 /dev 下生成相应的设备文件 nod ,这些操作在输入子系统中 由事件处理层完成)。 l 用户空间:一般包括 C 程序实现的应用程序和 Qt 程序。 从框图可以 看出驱动程 序员所要完 成的是硬件 相关部分( 具体是输入 设备驱动程 序模块)。 设备驱动程 序主要完成 键盘的扫描 ,如果有按 键按下或弹 起,则通过 input core 完 成两件事件 :报告事件 传递键码 本电路采用 6*7 矩阵键盘,共 39 个按键。其中行包括 KEY_LINE[1 : 6] ,分别连接 GPB5~GPB10 作为电平 输出引脚。列包括 KEY_ROW[1 : 7] ,分别连接 GPG5~GPG7 , GPG11~GPG14 作为电平输入脚,且使用内 部上拉置高。 ? 系统初始化时将列设为输入,弱上拉;第 1 行输出低电平,其余行输出高电平(假设扫描顺序按标 号由低到高);启动内核定时器。 ? 定时间隔到,查询各列输入电平情况,从而确定第 1 行上各个按键状态与上次扫描时本行各按键状 态比较。若有按键状态变化,此时的按键坐标为 button ( line ( 1 ), row ( x )),将按键键码,状 态等信息保存,报告事件到 input core 层(也可将每次扫描结果全部汇报,由应用程序决定按键状 态是否改变)。同时将第 2 行输出低电平,其余行输出高电平。 ? 定时间隔到,查询各列输入电平情况,从而确定第 2 行上各个按键状态与上次扫描时本行各按键状 态比较。若有按键变化,此时的按键坐标为 button ( line ( 2 ), row ( x )),将按键键码,状态等 信息保存,报告事件到 input core 层。同时将第 3 行输出低电平,其余行输出高电平。 ? 如此周期循环进行,即可方便将所有按键变化扫描到,并向 input core 层汇报,键码转换后供用户 程序调用。 ? 说明:为什么不在定时间隔到的时候一次性将 6 行都扫描了? ? 因为在定时间隔到来时,按上面方法一次将 6 行扫描,很可能会出现硬件不能及时响应指令,而造 成扫描不到按键变化的现象(特别是在系统时钟较高的情况)。比如:第 1 行扫描完成后,将第 2 行 置高,其余行置低来扫描低二行,这句话就两条 C 语言指令:拉低第 1 行,置高低 2 行。接下来马上 扫描列的电平,但其实在上面两条指令结束时,硬件上并不一定完成这两条指令预期的动作。即第 1 行线路真的已经为 0 ,第 2 行线路真的为 1 码?如果有键按着,此时列的数据寄存器里的值已经根据 行电平的变化而变化了吗?其实这些是难以保证的,按键的阻抗, GPIO 的阻性、容性都会滞后电平 变化。所以难以保证一次性将所有行扫描完成这种方式的准确性和稳定性 。 ? #include <stdio.h> ? #include <stdlib.h> ? #include <unistd.h> ? #include <linux/input.h> ? #include <sys/fcntl.h> ? int main(int argc, char *argv[]) ? { ? int fd = -1; ? int num; ? size_t rb; ? int version; ? char name[20]; ? st
您可能关注的文档
- 最新-科学教学中如何合理开发新的教学资源——学生精品.doc
- 最新-科学教学中探究性学习激活学生创新潜能精品.doc
- 最新-科学八年级下知识点精品.doc
- 最新-科学方法科学假设专题二十五中精品.doc
- 最新-科学探究:杠杆的平衡条件优质课比赛精品.doc
- 最新-科学教学中应加强建模能力的培养精品.doc
- 最新-科学第三册提纲精品.doc
- 最新-科学教学中探究式学习习惯培养的实践与体会精品.doc
- 最新-稳定电流单元练习精品.doc
- 最新-稳恒电流测试二精品.doc
- 地理-内蒙古锡林郭勒盟2023~2024学年第一学期高三年级全盟统考试题和答案.docx
- 历史|湖北元月调考暨湖北省部分市州元月高三期末联考历史试卷及答案.docx
- 历史-内蒙古锡林郭勒盟2023~2024学年第一学期高三年级全盟统考试题和答案.docx
- 数学(理科)-内蒙古锡林郭勒盟2023~2024学年第一学期高三年级全盟统考试题和答案.docx
- 历史丨金太阳24~239C湖北省十堰市2024届高三上学期1月调研考试历史试卷及答案.docx
- 青岛某高层办公楼地下防水施工方案(sbs卷材).docx
- 土木工程实习报告表格.doc
- 工程流体力学教学课件ppt作者闻建龙工程流体力学习题答案部分.doc
- 围手术期管理制度(1)_0.doc
- 2023年公务员多省联考《申论》题(内蒙古旗县卷)及参考答案.doc
1亿VIP精品文档
相关文档
最近下载
- 智能电表改造施工方案.docx
- 超星网课《生命安全与救援》超星尔雅答案2023章节测验答案.doc
- 人教部编版语文三年级下册《剃头大师》说课稿(附教学反思、板书)课件.pptx
- 年处理再生资源建筑废弃物100万立方米建设项目环评环境影响报告表(新版环评).pdf
- 广东省城乡居(村)民最低生活保障金申请表.doc
- 乌鲁木齐市城乡居民养老保险现状及问题研究.docx
- 项目碎石场投标书.docx
- 水平一至水平三(1-6年级)体育与健康大单元教学计划(合集).doc
- 光伏电站知识题库及答案.docx VIP
- 专题06 完形填空10篇(15空题)(名校最新期中真题)-2021-2022学年八年级英语下学期期中复习查缺补漏冲刺满分(人教版).docx
文档评论(0)