- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android 按键
android 物理按键关键词:android???按键? 矩阵按键 AD按键?平台信息:内核:linux2.6/linux3.0系统:android/android4.0平台:S5PV310(samsung exynos4210)一、硬件部分:1、矩阵按键、IO按键、AD按键??? 这个知识相对来说比较简单,不过上次真有一个网友不太清楚这个。所以这个基础部分我们在这里也说一下。(1)、矩阵按键记得上大学时学单片机时,这个矩阵按键还是个重点呢,上面的图还是AT89S52的片子,工作原理比较简单,通过行、列来确定是那个按键按下,比如说上图标号为1的键按下,IO(P1.7,P1.3)有电平变化,程序可以通过这里来判断是那一个键按下的,同理标号为2的按键按下IO(P1.4,P1.0)有电平变化。????这样做程序上要从两个IO来判断是那个键按下,多了一个步骤,但是在硬件上有一个优势,就是如果按键比较多的时候比较节省IO口,比如说上面4x4 = 16,8个IO可以做16个按键,8x8=64,16个IO可以做64个按键。优点:可以用少的IO来做多个按键,判断按键比较准确;缺点:程序上相对IO按键来说多了一步。(2)、IO按键??????? 这个就比较简单了,用一个IO口的高低电平来判断按键是否按下。优点:程序、硬件电路都比较简单,判断按键比较准确;缺点:IO有限、按键多时不太合适。比如矩阵按键16个IO可以表示64个按键,IO的话只有16个。(3)、AD按键??????? 这个在之前在做电视的时候用的比较多一点。??????? AD按键就是通过一个ADC接口,如下图所示,给一个VCC电压,比如说S1接地时AD接口得到的模拟电压值为ADC=0;当S2按下时,ADC= VCC/(R1+R2)*R2;这样就可以得到不同的ADC值,程序中在这里判断是那个按键按下。优点:程序、硬件电路都比较简单,一个IO可以做多个按键;缺点:AD按键有时候判断不准确,所以在程序中要多加检测AD值的次数。2、S5PV310的矩阵按键硬件原理图如下:硬件接口说明:vol+,vol-,back,home,menu为1*5的矩阵键盘,芯片接口信息如下:行XGNSS_GPIO_3/KP_COL3XGNSS_GPIO_4/KP_COL4XGNSS_GPIO_5/KP_COL5XGNSS_GPIO_6/KP_COL6XGNSS_GPIO_7/KP_COL7列XEINT17/KP_ROW1我们这里1*5= 5也没有节省多少IO呀?情况是这样的,我们的原理图是从三星开发板上参考过来的,开发板上按键本来多一点,可是我们用不了那么多,人家那样做比较合理。可是我们“偷懒”,硬件上不用改,软件上也不用改,从这一点也可以看出我们国内做技术这个行业的有点……不太深入呀,整天老板在催,可是我们在细节上做不太好呀。三星在IO矩阵也有专用接口,所以就“奢侈”一次,用1*5的矩阵来实现5个按键。3、S5PV310的矩阵按键接口看一下芯片上的专用接口,如下图,全用的话有点多。关于专用接口的寄存器,这些寄存器我们后面要用得到的,按键的行、列信息会在这里面暂存的。以S5PV310为例,驱动代码:samsung-keypad.c软件部分:总体流程图如下,这个是在触摸屏基础上改过来的,感觉流程都是这个样子的。中断触发,中断处理。一、矩阵键行、列设定,和上报键值设定在android-kernel-samsung-dev/arch/arm/mach-exynos/mach-smdkv310.c中[cpp]?view plaincopystatic?uint32_t?smdkv310_keymap[]?__initdata?=?{??????/*?KEY(row,?col,?keycode)?*/??????KEY(0,?3,?KEY_1),?KEY(0,?4,?KEY_2),?KEY(0,?5,?KEY_3),??????KEY(0,?6,?KEY_4),?KEY(0,?7,?KEY_5),??????KEY(1,?3,?KEY_A),?KEY(1,?4,?KEY_C),?KEY(1,?5,?KEY_E),??????KEY(1,?6,?KEY_B),?KEY(1,?7,?KEY_D)//(1)、键值初始化;??};????static?struct?matrix_keymap_data?smdkv310_keymap_data?__initdata?=?{??????.keymap?????=?smdkv310_keymap,??????.keymap_size????=?ARRAY_SIZE(smdkv310_keymap),??};??static?struct?samsung_keypad_platdat
文档评论(0)