I2C总线键盘电路以及驱动程序设计

发布者:轻松自在最新更新时间:2014-01-17 来源: elecfans关键字:I2C总线  键盘电路  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

  一、概述

  本文介绍一种采用MAX7348 的串行I2C 总线的键盘电路以及驱动程序的设计。

  I2C 需要连线少,仅需一条串行时钟线和一条串行数据线。允许多主机控制,具有裁决和同步功能,可随意添加或摘除总线上的子器件等诸多优点,所以已经被广泛应用。

  二、MAX7348

  MAX7348 是美国MAXIM 公司生产的2 线接口、低EMI 键盘开关和发声控制器,可监控多达40 个按键,可对按键去抖并保存在FIFO 中,去抖时间用户可在9 ~ 40ms 之间任意设置,MAX7348 自带的音调发生器在控制器的作用下可自动发出按键声和报警声,在发声期间,输出还可以设置为高电平或低电平,以驱动电子发声器、继电器或指示灯。

  芯片采用400Kps,5.5V 容限2 线串行接口,工作电压2.4 ~ 3.6V,4 个I2C 地址选择。与MAX7348同系列的还有MAX7347 和MAX7349 等。

  1. 引脚图

  如图1 所示,SDA 、SCL 分别是兼容I2C 串行总线的数据、时钟接口,使用时通常需要接一个典型值为4.7kΩ 的上拉电阻;ROW0 ~ ROW8 为键盘矩阵行输入端口,不用时开路;COL0 ~ COL4为键盘矩阵列输出端口;SOUNDER 为发声器输出端口,该输出为推挽结构,通常与地之间接一个压电陶瓷片或其他发声设备;INT 为中断输出端口;ADO 为地址输入端口,用来设置器件的从地址,该引脚接GND、V+、SDA、SCL 可形成4 种逻辑组合构成MAX7348 的4 个可选的I2C 地址,如表1 ;GND 为接地端,V+ 接电源(2.4 ~ 3.6V)。

  

  表1 2线接口地址分配表

  

  2. 主要内部寄存器

  (1) 按键FIFO 寄存器(00H) 该寄存器包含与按键FIFO 状态有关的信息,以及那些经过去抖的事件信息,该寄存器的D0 ~ D5 位表示按键中的那些键已去抖,D6 指明当前去抖按键是否是FIFO 中的最后一个;D7 位是溢出标志,它表示按键FIFO 是否溢出。读按键扫描FIFO 将清除中断信号,但是只有通过执行足够次数的读操作清空FIFO后才能再次产生中断(INT)信号。

  (2)去抖寄存器( 01H) 该寄存器用来设置每一个去抖周期的时间,以及使能和禁用GPO 端口,其中D0 ~ D4 位用来在9 ~ 40ms 范围内设置去抖时间,步长1ms,D5 ~ D7 用来设置使能那一个GPO 端口(表2)。

  表2 去抖寄存器设置

  

  (3)自动重复寄存器( 02H)该寄存器用来设置自动重复频率及其延时。当按键按下且没有释放时,自动重复功能允许连续触发按键事件。自动重复延时规定了第一次按下按键与开始重复之间的时间(如果按键没有释放)。自动重复频率规定了自动重复开始后按键事件连续触发的速度。D0 ~ D3设定自动重复延时,范围从8 个去抖周期到128 个去抖周期。D4 ~ D6 位规定重复频率,范围是4 到32 个去抖周期,D7 位是自动重复功能使能位(如表3 所示)。[page]

  表3 自动重复寄存器

  

  (4) 中断寄存器( 03H) 该寄存器包含与中断请求功能设置有关的信息,以及INT 输出的状态,INT 输出也可配置为GPO.中断寄存器是只读寄存器,向该寄存器写入数据无效。

  (5)配置寄存器(04H)该寄存器反映发声器的状态、控制I2C 总线超时、使能报警输入中断、使能发声器对报警输入和按键去抖时间做出响应,以及控制器件关断等。该寄存器结构如表4 所示,除D1、D2 设定发声器输出状态外,其余每一位对应一个控制状态,用户可根据需要使能(置“1”)或禁止(置“0”)。

  表4 配置寄存器结构

  

  (6)按键发声寄存器( 06H) 如果配置寄存器(04H)中使能按键发声,那么当一个键或一组键去抖后,发声控制器将发出声音,并由按键发声寄存器设定发声的时间和频率。

  除以上几个主要寄存器外还有端口寄存器、报警声寄存器、发声器寄存器等多个寄存器,这些寄存器主要用于控制发声器和扩展GPO 端口,在此不做详细叙述,感兴趣的读者可以自行查阅有关MAX7348 的技术资料。

  三、电路设计

  图2 是笔者设计的MAX7348 应用电路,该电路以凌阳(SPCE061A)单片机为主控制器,结合MAX7348 构成了一个具有40 个按键的键盘电路,通过程序可以设置按键发声、自动连续按键、中断输出等功能。MAX7348 的SDA、SCL、INT 分别与SPCE061A 单片机的IOB0、IOB1、IOB2(注:SPCE061A 单片机的IOB2 为外部中断1 的输入口)连接,由于I2C 总线允许挂接多个从机,所以在实际使用中,可以将多个不同从机地址的设备挂接在同一总线上,为单片机节约大量的硬件资源。

  
[page]

  四、软件编写

  在图2 所示的键盘电路中,由于MAX7348 只具有兼容的I2C 接口,而SPCE061A 单片机本身不具备I2C 接口,要实现二者之间的数据传输,通常采用通用IO 口软件模拟I2C 的方式来实现。图3 是MAX7348 的总线时序。

  

  由图3 所示的时序图可以看出,用软件模拟I2C 总线的传输时序,大致要经历构造开始条件、发送从机地址(含读写标志位)、等待从机响应、发送(或读取)1 个字节数据(或命令)、源程序请从www.ele169.com 下载。

  笔者编写的模拟I2C 总线驱动程序,经过多次调试,程序符合I2C 总线传输时序要求,与I2C总线设备通讯可靠,但需要注意的一点是:以上代码是在SPCE061A 单片机默认时钟频率(24M)的情况下编写的,如果采用较高的系统时钟,需要在部分代码中间添加一些延时程序,否则会出现数据丢失,造成通讯错误。

  五、小结

  本文介绍的MAX7348 与单片机的接口具有电路简单,易于实现,节省了单片机的IO 口,提高了键盘电路的稳定性和可靠性,在笔者制作的5 层电梯模型中工作稳定,性能可靠,是一种值得推广的键盘扩展方案,可应用在工业控制、PDA、医疗器械等多个领域。

关键字:I2C总线  键盘电路  驱动程序 引用地址:I2C总线键盘电路以及驱动程序设计

上一篇:便携式PXI总线数字电路板测试诊断系统
下一篇:常见的数字接口的简化示意图

推荐阅读最新更新时间:2024-05-02 22:56

I2C总线与串口
I2C总线与串口 I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL.在 I2C总线上传送的一个数据字节由八位组成.总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位.数据传送首先传送最高位(MSB).首先由主机发出启动信号“S”(SDA在SCL高电平期间由高电平跳变为低电平),然后由主机发送一个字节的数据.启动信号后的第一个字节数据具有特殊含义:高七位是从机的地址,第八位是传送方向位,0表示主机发送数据(写),1表示主机接收数据(读).被寻址到的从机设备按传送方向位设置为对应工作方式.标准I2C总线的设备都有一个七位地址,所有连接在I2C总线上的设备都接收启动信号后的第一个字节
[单片机]
基于ARM平台的远程视频监控系统的研究
  引言   视频监控系统是安全防范系统的组成部分,它是一种防范能力较强的综合系统。现今监控系统已经步入了数字化、网络化时代,即视频从前端图像采集设备输出时即为数字信号,并以网络为传输媒介,基于TCP/IP协议,采用流媒体技术实现视频在网上的多路复用传输。使用嵌入式系统实现远程视频监控技术,符合网络化数字化的特点,对公安、安防等行业有着重要的现实意义。   视频监控系统一般采用基于PC机平台+视频采集卡的形式,该方案系统体积大、成本高,在远距离、多点系统中实现困难。本设计采用三星公司的S3C2440 硬件平台(CPU芯片含有视频采集接口),软件平台是Linux-2.4.20操作系统内核,由于Linux操作系统的开放特性、
[单片机]
基于ARM平台的远程视频监控系统的研究
基于ARM+WinCE项目开发过程中动态加载GPIO端口驱动程序的设计方法
  本文针对采用基于流接口驱动方式进行GPIO端口驱动开发所存在的困难和不足,提出了采用动态方式加载(卸载)端口驱动的思路,给出了该思路下GPIO端口驱动设计方法的步骤和关键代码并进行了验证,为其他类似的驱动设计与实现提供参考。   WinCE下GPIO端口驱动大多采用流接口驱动的方式进行开发,在实现上主要依托Platform Builder编译环境将驱动程序编译成动态链接库,并整合到WinCE内核中。但在实际项目的开发中,Platform Builder在驱动程序的开发和涮试上不够便捷,且在整合动态链接库和WinCE内核时,需要进行繁琐的参数配置,整个过程较为复杂。笔者以飞凌S3C2440开发板为例,给出在VisualStudi
[单片机]
基于ARM+WinCE项目开发过程中动态加载GPIO端口<font color='red'>驱动程序</font>的设计方法
光传感器ISL29004在智能照明控制系统中的应用
    随着人们生活水平的提高,人们对照明控制的要求越来越高,如营造舒适的照明环境、节约电能、提高光源寿命等。为了提高工作环境的舒适性,照明控制系统采取光传感器,根据当前环境的照度自动控制照明设备,从而使照度控制在舒适的范围内。     在传统的照明控制系统中,往往采用普通光传感器结合A/D转换器(ADC)的方案。一方面由于光传感器检测到的光信号既包含可见光成分又有红外光成分,在设计中要考虑滤除红外光对光传感器检测结果的影响,并且由于采用了分离的器件,因此导致设计比较复杂;另一方面,对照度的检测范围比较局限,不利于实现多路照度检测从而对同一场所内多个照明设备实施分区域控制。在此提出了基于ISL29004的多路照度检测方案,以简化系
[嵌入式]
基于嵌入式Linux的步进电机驱动程序设计
  1.引言   随着嵌入式技术的飞速发展,基于嵌入式系统的新一代工业控制器也日益增多。同以往的控制器不同,新的仪器大多以32位嵌入式处理器为核心,并且安装有嵌入式操作系统,从而大幅度提高了处理能力,方便了设计开发。在各种嵌入式操作系统中,嵌入式Linux是免费的自由软件,其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此越来越多的研究人员开始在用Linux平台来开发自己的产品 。   嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素更多,实现过程更为复杂。本文以Samsung公司S3C2410X CPU为
[工业控制]
DS12887(时钟日历芯片) c语言驱动程序
****************DS12887 时钟日历芯片调试******************/ 管脚配置: MOT: 接地 CS: 接地 地址:0xFF00 AS: 接单片机 ALE R/W: 接 RW DS: 接 RD RESET: 接高 IRQ: 空 SQW: 空 */ #i nclude REG51.h #i nclude absacc.h /*************************/ #define TM_SEC XBYTE #define TM_MIN XBYTE #define TM_HOU XBYTE #define DAY XBYTE #define DATE XBYT
[单片机]
基于WinCE的II2C驱动程序设计
引言   随着以计算机技术、通信技术和软件技术为核心的信息技术的迅速发展,嵌入式系统在各行业得到了广泛的应用,极大地推动了行业的渗透性应用。嵌入式系统是“以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统”,由嵌入式硬件和嵌入式软件两部分组成。嵌入式软件包括嵌入式操作系统和嵌入式应用软件。Microsoft的桌面操作系统已经为人们熟悉和使用,嵌入式的操作系统 Windows CE.net也日益风行。Windows CE.net是Microsoft推出的功能强大的紧凑、高效、可伸缩的32位嵌入式操作系统,主要面对各种各样的嵌入式系统和产品。该系统所具有的多线程、多
[嵌入式]
用P89C664实现I2C总线大批量数据的自动存储
摘要:结合Flash Magic软件对PhilipsP89C664单片机ISP功能进行详细介绍,同时详细叙述利用P89C664硬件I2C接口接收数据并转发到电脑,实现I2C总线大批量数据的自动保存技术,并附有完事的源泉程序清单及必要的注释。 关键词:Flash Magic ISP I2C P89C664 引言 在实际工作中,有些情况下可能需要对一些I2C接口发出的数据进行分析,如果数据较少则比较容易解决。比如可以直接把数据保存到单片机的RAM中,然后通过LED显示出来,但如果数据量很大,这种方法就很河取了。在这种情况下,想办法把大量的数据保存到电脑里是一个比较好的方法这样不但可以解决大批量数据的存储问题,同时也易于编辑、分
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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