《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > I2C总线在指纹识别系统键盘显示中的应用

I2C总线在指纹识别系统键盘显示中的应用

2009-09-24
作者:罗焕发,李见为,杨先周

  摘 要:针对大多数嵌入式系统键盘显示电路复杂、不灵活、维护困难等问题,结合指纹识别系统在汽车安全领域的应用,介绍了基于I2C总线的数码管显示驱动和键盘扫描控制芯片CH452S以及扩展口器件PCF8574AP在指纹识别系统键盘显示接口中的应用,包括硬件电路连接和软件程序设计。采用I2C总线,不仅占用端口资源少,电路结构简单,而且易于电路扩展与系统升级。
  关键词: I2C总线; 单片机; PCF8574AP; LCD; CH452S

 

  本文介绍的指纹识别系统采用单片机与DSP协同工作,实现用户服务。为此,必须提供一个与用户进行对话的接口,即键盘显示人机接口。指纹识别系统框图如图1所示。嵌入式系统开发过程中,键盘显示一般采用微控制器直接与专用集成电路连接,如HD7279A、KS0108等,其所需引脚多、空间大,不利于产品小型化,而且成本高。由于本系统被控对象较多,包括DSP的HPI口、键盘显示、GSM短信报警以及汽车控制接口,端口供需矛盾尤其突出。I2C总线是近年来嵌入式系统开发所广泛采用的总线标准,仅需2根线即可简单、方便、有效地实现I/O口扩展。本文主要介绍利用单片机普通I/O口模拟I2C总线操作,控制CH452S实现按键操作的捕获,并控制PCF8574AP扩展的并行口生成LCD 读写控制所需时序,完成指纹识别系统信息显示。

 

1 I2C总线简述
  Inter-Integrated Circuit Bus简称I2C总线,是由Philips公司开发的两线串行总线,长度可达25英尺。I2C总线实现系统功能简单有效,占用空间小,所需芯片管脚数量少,只须使用2根线即可方便构成多机系统与扩展系统,便于系统维护与升级。这2根线一根是数据线SDA,另一根是时钟线SCL,2条线都必须通过一个上拉电阻连接到正的电源电压,其数据只有在总线空闲时才可传送[1]。SDA线上的数据必须在时钟线SCL高电平期间保持稳定,否则将被视为起始条件或停止条件。当SCL为高电平时,SDA由高电平切换为低电平,则为起始条件;当SCL为高电平时,SDA由低电平切换为高电平,则为停止条件,如图2所示,其中S为起始条件,P为停止条件。

 


  I2C总线上可以同时有多个I2C器件,每个器件都有唯一的地址识别,而且每个器件可作为主机,也可作为从机,可以是发送器,也可以是接收器,这主要取决于器件所要完成的功能。数据传送格式是以主机发送启动信号开始,接着发送第一个字节,此字节的高7位为从设备地址,最低位为读写控制位。该位为0表示主机向从机发送数据,为1表示主机从从机读取数据。总线每次传送的字节数没有限制,但是各字节之间必须插入一个应答位,数据字节从最高位开始发送,全部数据发送完后,就发送停止信号完成一次数据传送。其中,应答位是在发送每个字节之后主机发出第9个时钟脉冲的高电平期间,发送器释放SDA线(高),接收器拉低SDA线。如果传输中存在主机-接收器,则在最后一个字节不产生响应,通知从机-发送器数据传输结束,其传输格式如图3所示。

 


2 硬件电路设计
  在指纹识别系统中,单片机负责管理系统级事务,监控键盘的按键操作和LCD的显示。键盘用于完成用户操作指令的输入,使得用户可以借助键盘输入指令实现指纹识别系统的操作,而LCD用于显示系统操作菜单以及系统反馈的提示信息和处理结果。
  单片机采用Philips的P89C58,该款单片机基于80C51内核,具有32 KB非易失性只读程序存储器、256B内部数据存储器RAM、32个双向I/O口、3个16位定时/计数器、6个中断源[2]
  键盘控制采用南京沁恒电子公司的CH452S,CH452S是数码管显示驱动和键盘扫描控制芯片,内置时钟振荡电路,可以驱动8位数码管并进行64键键盘扫描[3],具有4线接口和2线接口,其中2线接口支持I2C总线。
  显示采用小尺寸的LCD,带有仅写入的SPI接口,由扩展口芯片PCF8574AP的并行口控制。PCF8574AP是Philips公司推出的一款带有I2C总线硬件接口的扩展口芯片,具有8位I/O口,且每一位都可独立作为输入输出线。I/O口带输出锁存,具有大电流驱动,可直接驱动LED[4]
  由于该单片机P89C58不带I2C硬件接口,因此,利用单片机的2个I/O口模拟I2C总线,总线的数据线接单片机的外部中断1端口P3.3,时钟线接单片机的P3.4端口,电路连接如图4所示。

 


  在应用中,CH452S采用标准2线接口,串行数据时钟输入线SCL和串行数据输入、输出线SDA,按键中断输出方式为低电平脉冲。在扫描键盘期间,DIG7~DIG0引脚用于列扫描输出,SEG7~SEG0引脚都带有内部下拉电阻,用于行扫描输入。键盘扫描是由CH452S自动完成的,当检测到有效按键时,会以中断的方式通知单片机进行处理。根据本系统需要,设计了4×4的键盘矩阵。用户通过操作键盘对系统进行控制和使用,键盘按扭的功能定义如下:(1)数字键:输入数字0~9;(2)确定键:确认当前操作;(3)取消键:取消当前操作;(4)注册键:进入用户指纹注册界面;(5)登录键:进入用户指纹登录界面;(6)删除键:进入用户指纹删除界面;(7)模式键:进入模式功能选择界面。由于CH452S不支持组合键,如果有多个键同时按下,那么按键代码小的为有效按键。
  单片机对LCD显示的控制是通过I2C总线读写PCF8574AP扩展口,生成LCD读写时序实现的,数据传输格式如图3所示。对于PCF8574AP器件来说,从机地址为0x70。由于LCD仅采用写入的SPI接口方式,所以无须用到对PCF8574AP读操作,但在实际应用中,PCF8574AP作为输入时应置口锁存器为高电平,即在读PCF8574AP前需要将PCF8574AP扩展口全部置为1状态。
3  软件程序设计
  指纹识别系统的主控程序是由单片机来完成的,监控键盘和LCD显示是其中的一部分。由于单片机不带硬件I2C接口,所以I2C协议通过模拟实现,此协议比较简单,主要包括启动总线、结束总线、发送数据、读取数据、获取响应、发送响应。键盘控制芯片CH452S定义了空操作、复位、设定系统参数、读取按键代码、进入睡眠状态等23条操作命令,单片机通过I/O口模拟I2C总线发送操作命令。LCD采用SPI接口,包括复位、片选、数据/命令、串行数据、时钟5条线,分别由PCF8574AP扩展的5个I/O口控制,改变状态只须往PCF8574AP写相应的数据即可。系统共设有16个按键,当CH452检测到有效按键时,将等到SCL和SDA空闲后从SDA输出几个微秒宽度的低电平脉冲作为键盘的中断信号。单片机响应键盘中断请求后,向CH452S发送读取按键代码命令,CH452S将从SDA线输出按键代码。为了提高系统运行效率、减少中断处理时间,中断服务程序只设置键盘的中断标志(此中断标志为自设变量),将读取按键代码子程序放在中断外主控程序执行,程序流程图如图5所示。

 


  系统在上电后,主控程序首先对系统进行初始化,包括单片机初始化、CH452S初始化、LCD显示初始化、I2C总线初始化等,然后进入死循环。在循环中,程序等待中断。当有中断发生后,在中断服务程序置位相应的中断标志位,然后退出中断等待,进入中断查询,看是哪种类型的中断。如果是键盘中断,则单片机通过I2C总线向CH452S发送读取按键代码命令;如果是其他中断,则处理其他信息。最后进行按键处理和更新LCD显示,供用户进一步操作。随后又回到等待中断循环中,如此不停地循环反复。
  本文介绍了采用I2C总线实现对指纹识别系统键盘及LCD显示的控制,经过实践证明,此方案构建的键盘显示人机接口可实现正常的按键捕获和信息显示,是一种简单实用、稳定可靠的设计方案。该方案节约了单片机端口引脚资源,降低了系统复杂度,软硬件实现容易,成本低廉,而且易于系统功能扩展。本文介绍的方法,只须经过简单适当修改,即可应用于其他嵌入式系统场合,很值得推广使用。


参考文献
[1] I2C总线规范[EB/OL]. http://www.zlgmcu.com/philips/iic/xuanxing/.2008.
[2] P89C58手册[EB/OL]. http://www.zlgmcu.com/philips/80c51/shouce/p89c5x/.2008.
[3] 数码管驱动及键盘控制芯片CH452中文手册[EB/OL]. http://wch.cn/.2008.
[4] PCF8574AP手册[EB/OL]. http://www.zlgmcu.com/philips/iic/ePDF/.2008.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。