智能手机全键盘控制器及其编程与设计

发布者:HeavenlyMelody最新更新时间:2009-09-07 来源: 电子设计工程关键字:智能手机  QWERTY键盘  编程  数字按键  输入速度  手机上网 手机看文章 扫描二维码
随时随地手机看文章

  1 引言

  随着智能手机逐步普及,3G服务不断完善,利用手机上网、收发电子邮件已逐步成为一种时尚,而常见的手机键盘仅有简单的功能和数字按键,而输入复杂的汉字、符号时需繁琐切换,输入速度减缓,因此,高端手机迫切需要一种便捷的输入界面。QWERTY键盘的推出解决了这个问题,它以其齐全的按键分布能够让使用者轻易直接输入想要的内容,为此这种手机键盘大受欢迎。QWERTY键盘又称为全功能键盘,其按键分布与PC键盘基本相同,主要包括26个英文字母、数字O~9、方向控制、回车、Ctrl、Alt和符号键等,完全可实现PC键盘的输人和操作。QWERTY凭借其独特的外观、出色的商务功能、另类的 QWERTY键盘,以及本身的智能性、娱乐性、前卫性,目前已在手机世界占有重要地位。新一代以Gphone为代表的智能手机均配备了QWERTY键盘。随着手机市场的不断深化,已有很多品牌涉足其中,其中不乏诺基亚、三星、摩托罗拉等国际知名大品牌。

  由于键盘扫描需占用大量GPIO,而手机中无论是基带控制器还是应用处理器受到器件引脚数的限制,因此能够提供的GPIO数目十分有限,通常需要外扩 GPIO来实现键盘扫描,这会占用大量软件资源并增加许多功耗。因此,Maxim公司针对这一问题先后推出两代全键盘控制器MAX7349和 MAX7359。

  2 MAX7349和MAX7359编程

  MAX7349和MAX7359均可管理多达64个按键,采用Maxim专有的低电压、低EMI静态按键扫描技术,并将去抖后的扫描结果编成键值,依据按键的键序将键值消息存放在FIFO中,手机处理器在适当的时候读取FIFO中的键值消息,即使处理器没有及时处理按键事件,按键消息也不会丢失,这对通常采用非实时操作系统的智能手机来说非常重要。与MAX7349相比,MAX7359增加了按键释放检测功能,即每次按下和释放按键都会生成一个键值消息,可更简便实现多键同时输入及组合键功能。另外,该系列器件优化了控制寄存器并增加存储键值消息的FIFO空间,即由MAX7349的存储8次按键增加到存储16次按键。

  MAX7359还具有自动休眠和自动唤醒功能,以使器件的功耗最低。一个休眠周期后,自动休眠功能将器件置于低功耗状态(典型值1μA)。发生按键事件时,自动唤醒功能设置MAX7359返回至正常工作模式。

  这两款器件对于硬件设计而言较简单,但在编写驱动软件时需稍加注意。以下是MAX7349的编程建议:

  (1)建议避免使用0行0列的0号按键。

  (2)MAX7349初始化,假设MAX7349设置I2C地址的AD0引脚接地,将MAX7349的I2C读/写地址设为0x71/0x70,其过程如下:

/*MAX7349初始化开始*/
I2C_Write(0x70,0x04,0x01,); //关断
I2C_Write (0x70,0x01,0); //9 ms去抖
I2C_Write(0x70,0x02,0);  //禁止Autorepeat功能
I2C_Wirte(0x70,0x03,0x01);   //使能硬件中断
I2C_Write(0x70,0x05,0);  //防止意外输出,可省略
I2C_Write(0x70,0x04,0x81);   //启动器件正常功能
/*MAX7349初始化结束*/

  (3)每次收到硬件中断后,连续读FIFO寄存器(I2C_Write(0x70,0x00);I2C_Read(0x71,变量)。注意此读操作是一次用于写FIFO寄存器地址0x00的写操作和一次读操作构成;如果连续读FIFO,则只需开始时进行一次写操作I2C_Write(0x70,0x00) 即可,FIFO寄存器地址不会自动递增),一直读到0x00的值全为0为止(建议避免使用0号按键),设一个最大读取次数(256次),如果来一次中断读取256次FIFO中还有非0值,就直接重启一次器件,执行如下操作:
I2C_Write(0x70,0x04,0x01); //关断
12C_Write(0x70,0x04,0x81); //启动器件正常功能

  (4)关于按键释放检测,由于MAX7349无按键释放检测,对于组合键,长短键等特殊按键需求,需要软件配合来实现。实现方法如下:

  每次收到硬件中断后通过I2C将FIFO读空,50 ms后将MAX7349重启,执行以下操作:

I2C_Write(0x70,0x04,0x01,); //关断
I2C_Write(0x70,0x04,0x81);//启动器件正常功能

   若随后未收到中断,或收到中断后一直读空FIFO,也未有与上一次相同的按键信息,则认为上次按键释放,向上层软件发一个按键释放信息。如果收到中断后读FIFO中有与上次相同的按键信息,则继续重复“读空FIFO,等50 ms重启器件”的步骤。

  实际上,只要检测到硬件中断就要连续重复“读空FIF0,等50 ms后重启器件”的步骤,直到器件重启后没有新的硬件中断为止。

  (5)根据经验,在I2C总线工作不正常时尝试通过设置0x04寄存器的D0位使能或禁止总线超时功能。MAX7359南于增加了按键释放检测功能,即按下和释放按键都产成一个键值信息,所以要比MAX7349的软件处理更简单,关于MAX7359的编程建议如下:

  ①避免使用的按键 MAX7359修改按键信息FIFO(寄存器地址为:0x00)为空时的缺省值,由MAX7349的0x00改成MAX7359的0x3f。所以如果设计使用新的MAX7359,应尽量避免使用第63号键(Co17和Row7交叉处的键)和62号键(Co17和Row6交叉处的键),这是因为软件在处理这两个按键的键值时会复杂一些。

  ②MAX7359初始化MAX7359初始化过程如下(假设MAX7359设置I2C地址的AD0引脚接地,将MAX7359的I2C读/写地址设为Ox71/0x70);

/*MAX7359初始化开始*/
I2C_Write(0x70,0x01,0x08); //关断,开始初始化
I2C_Write(0x70,0x02,0x01); //10 ms去抖,可调
I2C_Write(0x70,0x03,0x01); //按键消息FIFO非空则触发中断
I2C_Wirte(0x70,0x04,0); //防止错误触发GPIO
I2C_Write(0x70,0x05,0); //关闭自动重复功能
I2C_Write(0x70,0x06,0); //关闭自动关断功能,可根据需要打开自动关断功能,关断前的等待时间可设。
I2C_Write(0x70,0x01,0x88); //启动器件正常功能
/*MAX7359初始化结束*/

  3 读取按键消息

  3.1 设置FIFO寄存器

  收到硬件中断后,先通过一次写操作设置FIFO寄存器地址:0x00。

  I2C_Write(0x70,0x00)://如果写一次FIFO地址之后没有对MAX7359其他控制寄存器的读写,则下次读FIFO寄存器,可不用再写FIFO地址。

I2C_Read(0x71,字节变量);
…… //重复读FIFO直至读到代表

  FIFO为空的0x3f,可以没一个最大次数,如256次,如果一次中断后读了256次FIFO里还有没读到0x3f,则软重启软重启过程如下:

I2C_Write(0x70,0x0 1,0x08);
I2C_Write(0x70,0x01,0x88);

  3.2 FIFO消息的处理

  处理读到的FIFO字节变量(假设变量名为:FIFO_BYTE)后,软件处理方法如下:

  (1)将从FIFO收到的非0x3f的字节变量FIFO_BYTE和0x3f取与(AND 0x3f),结果值为按键值(即0至63号键中某一个被按下或释放)。

  (2)再将该FIFO_BYTE和0x40取与(AND 0x40),结果为0则说明按键被按下,结果非0则说明按键被释放。如果硬件布线时使用了63号和62号键,FIFO_BYTE处理复杂,请软件设计工程师参考MAX7359编程指南的62号和63号键处理方法。

  3.3 长按键处理

  通常需要起一个定时器,定时检查还未收到键盘释放信息的键盘按下信息都是何时发生的,如果是当前时间减去按键按下的时间满足长按键时间,就可向上层软件发长按键消息。

关键字:智能手机  QWERTY键盘  编程  数字按键  输入速度  手机上网 引用地址:智能手机全键盘控制器及其编程与设计

上一篇:基于HBS协议的智能家庭控制网络设计
下一篇:谷歌和苹果关系紧张 七大战场各显神通

推荐阅读最新更新时间:2024-05-02 20:52

Semblant与三家中国智能手机制造商签署防水技术协议
加利福尼亚州斯科茨谷 - 2017 年 3月 7 日——电子设备液体损伤纳米技术市场领导者 Semblant 今日宣布,已与三家领先中国智能手机制造商就其已获专利的 MobileShield™ 防水技术签署生产资质协议。 不同于市面上应用于完全组装手机外壳的超薄保护膜,Semblant 的纳米技术解决方案可在制造过程中应用于每个器件的内部电路。该专利方法确保内部印刷电路板组件 (PCBA) 具有均匀的防水层,保护下层电子器件免受所有形式的液体损伤以及灰尘和颗粒损坏。该技术已通过防护等级 (IP) 方案,防护等级代码高达 IPX8,工作电压达到 30V,符合高级显示屏和快速充电功能要求。 “我们在与多家客户量产部署的主要目标
[手机便携]
FPGA 可编程应用的引爆点即将到来
      25年前,赛灵思(Xilinx)公司发明了FPGA(现场可编程门阵列)。如今,以FPGA为代表的可编程芯片应用已经成为势不可挡的发展趋势,尤其在ASSP和传统ASIC之间出现的市场缺口上,FPGA将开辟出新的领域,而目前席卷全球的金融危机更是成为FPGA迅速发展的催化剂。   可编程技术势在必行   可编程应用正当时,主要有三个原因:首先是来自市场的驱动力。由于现在不断变化、细分和更加专业化的市场,导致产品的生命周期越来越短,这就要求产品的上市时间不断缩短,因此迫使产品的开发周期加速,并且能满足市场的灵活性。FPGA等可编程芯片平台具有灵活和开发速度快的特点,符合了当今潮流。              
[嵌入式]
AD9833型高精度可编程波形发生器及其应用
1 引言 AD9833是ADI公司生产的一款低功耗,可编程波形发生器,能够产生正弦波、三角波、方波输出。波形发生器广泛应用于各种测量、激励和时域响应领域,AD9833无需外接元件,输出频率和相位都可通过软件编程,易于调节,频率寄存器是28位的,主频时钟为25MHz时,精度为0.1Hz,主频时钟为1MHz时,精度可以达到0.004Hz。 可以通过3个串行接口将数据写入AD9833,这3个串口的最高工作频率可以达到40MHz,易于与DSP和各种主流微控制器兼容。AD9833的工作电压范围为2.3V-5.5V。 AD9833还具有休眠功能,可使没被使用的部分休眠,减少该部分的电流损耗,例如,若利用AD9833输出作为时钟源,就可
[应用]
基于智能手机与PC机的智能家居系统设计
1 引言 在信息化时代,不管是手机还是家电产品都逐渐融入网络中,信息家电是将现代网络通信技术融入到传统的家用电器,使之成为具有信息访问、获取、存储、处理、联网等功能的消费类电子产品。信息家电的出现改变了传统的家电控制方式,不仅可在本地对其进行控制,而且还可通过Internet网络控制家庭内部联网家电设备。由于手机和PC机的普及,采用现有的互联网使智能家居成为可能。 2 智能家居控制系统总体方案设计 智能家居系统总体结构框图如图1所示,该系统由两大部分组成:以PC为核心的家庭主监控中心及分散于各监控点的,以单片机为从控制中心的智能家电和监控设备前端系统;以移动电话作为远程控制器,利用互联网作为桥梁实现远程异地控制。
[单片机]
基于<font color='red'>智能手机</font>与PC机的智能家居系统设计
PIC C语言编程_PICC中断函数的实现
PICC可以实现C语言的中断服务程序。中断服务程序有一个特殊的定义方法: voidinterruptISR(void); 其中的函数名“ISR”可以改成任意合法的字母或数字组合,但其入口参数和返回参数类型必须是“void”型,亦即没有入口参数和返回参数,且中间必须有一个关键词“interrupt”。 中断函数可以被放置在原程序的任意位置。因为已有关键词“interrupt”声明,PICC在最后进行代码连接时会自动将其定位到0x0004中断入口处,实现中断服务响应。编译器也会实现中断函数的返回指令“retfie”。一个简单的中断服务示范函数如下: voidinterruptISR(void)//中断服务程序 {
[单片机]
智能手机触控新风潮 嵌入式首度超越外挂
集微网消息,专业市调机构IHS指出,2016年智能手机采用嵌入式触控模组达8.2亿支,占手机触控解决方案的50%以上,首度超越采用外挂式触控面板手机的比重。 IHS表示,嵌入式触控模组出货量上升,象征一个重要的里程碑,代表触控技术和供应链的显著变化,即显示面板制造商能够领先仅生产外挂触控面板厂。 显示面板制造商、外挂式触控模组制造商已竞争了很长时间,但潮流已开始转变,只因两个最大的智能手机品牌支持嵌入式触控解决方案。 IHS分析,嵌入式触控解决广泛应用于资讯电子(IT),及消费电子产品,显示器市场的竞争态势正在变化。随着市场倾向于嵌入式解决方案,外挂式触摸模组制造商,不得不重置他们与面板厂商的关系,从竞争对手变成为合作伙伴,并在这
[手机便携]
STM32 ISL1208编程
view plain copy //ISL1208.h #ifndef _ISL1208_H_ #define _ISL1208_H_ #include stm32f10x.h typedef struct My_Time { u8 _year; u8 _month; u8 _day; u8 _hour; u8 _min; u8 _sec; u8 _week; } MY_TIME,*pMY_TIME; extern MY_TIME sMyTime; void ISL128Init(void); void Set
[单片机]
如何实现C51和汇编的混合编程
文中用到的编译器一律为keil 首先是一个范例,并从这个范例展开说明: ............ //C51 Code here #pragma ASM ............. //Here is the Assembler Code #pragma ENDASM ........... //C51 Code here 呵呵,其实C51和汇编的混合编程也就这么一回事。 但是我们还必须要做一些前提工作,首先在Project窗口中包含汇编代码(ASM)的C文件单击右键,选择“Options for ...”,然后点击“Generate Assembler SRC File”和“Assemble SRC File”
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved