1、第七章 ADC和触摸屏接口,本章提要,1,3,2,键盘输入接口,LCD显示接口,触摸屏交互接口,7.1键盘输入接口简介,在ARM嵌入式系统应用中,键盘是人机交互对话最通用的方法之一。操作者通过键盘向系统发送各种指令或置入必要的数据信息。键盘模块设计的好坏,直接关系到系统的可靠性和稳定性。在ARM应用系统中,键盘扫描只是ARM的工作内容之一,ARM在忙于各项工作任务的同时,如何兼顾键盘的输入,则取决于键盘的工作方式。键盘工作方式的选取原则是既要保证能及时响应按键操作,又要不过多占用ARM的工作时间。,按键开关电路按键开关电路是指通过外力使电路瞬时接通的开关,在许多场合都有应用。比如大多数处理器的
2、RESET电路都用到了按键开关,它通过按键产生一个瞬时的低电压,CPU感知这个低电压后重启。,7.1.1 键盘工作原理,图7.1 按键开关电路示意图,抖动问题如图7.1所示的按键开关电路是最简单的,由于按键是机械触点,当机械触点断开、闭合时,会产生抖动。这种抖动用户感觉不到,但对计算机来说,则是完全可以感应的。计算机处理的速度在微秒级,而机械抖动的时间至少是毫秒级。假如利用按键开关产生中断可能就会产生一个问题,就是说按键有时灵,有时不灵,其实就是这个原因。有可能只按了一次按键,可是计算机却已执行了多次中断的操作。 去除抖动的方法为使CPU能正确地读出按键的状态,对每一次按键只作一次响应,就必须
3、考虑如何去除抖动。常用的去除抖动方法有软件方式和硬件方式两种。,7.1.1 键盘工作原理,软件方法对于简单的按键电路,可采用软件方法去除抖动。软件方法就是在程序获得外接端口为低的信息后,不是立即认定按键已被按下,而是延时10毫秒或者更长一段时间后再次检测外部端口,如果仍为低,说明按键的确按下了,这实际上是避开了按键按下时的抖动时间。同理,在检测到按键释放后再延时510毫秒,消除后沿的抖动,然后再对键值处理。硬件方法有时用软件方式并不能很好地解决按键抖动问题,这时就需要使用硬件方法。硬件方法其实就是一个去除抖动电路,用于去除按下和释放按键时的波形抖动,读者可以查找相关去抖电路。对于比较复杂的矩阵
4、键盘而言,通常使用专用芯片去除抖动,例如键盘接口芯片8279、MAX6816、MAX6817、MAX6818等。,7.1.1 键盘工作原理,7.1.2 常用键盘接口,常用按键接口可分为独立式按键接口、行列式按键接口和专用芯片式按键接口等。独立式按键接口独立式按键接口设计优点是电路配置灵活,软件实现简单。但缺点是每个按键需占用一根口线,若按键数量较多,资源浪费将比较严重,电路结构很复杂。因此本方法主要用于按键较少或对操作速度要求较高的场合。如下图所示。,7.1.2 常用键盘接口,行列式按键接口如下图所示,行列式按键接口适用于按键数量较多,又不方便使用专用键盘芯片的场合。这种方式的按键接口由行线和
5、列线组成,按键位于行、列的交叉点上。,7.1.2 常用键盘接口,如何确定行列式键盘上哪个键被按下,这里介绍一种“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。扫描过程分为以下两步:(1)判断键盘中有无键按下。(2)判断闭合键所在的位置。 举例说明例如在上图中,CPU的低8位用作键盘I/O口,键盘的列线连接到I/O口的低4位,键盘的行线连接到I/O口的高4位。列线B0B3分别连接有4个上拉电阻到正电源+5V,并把列线设置为输入线,行线B4B7设置为输出线,4根行线和4根列线形成16个相交点。如果进行键盘扫描,再加上去除抖动的功能,要执行如下操作:,7.1.2 常用
6、键盘接口,(1)检测当前是否有按键被按下。检测的方法是B4B7输出全“0”,读取B0B3的状态,若B0B3全为“1”,则无键闭合,否则为0的那一列有键闭合。 (2)去除键抖动。当检测到有键按下后,延时一段时间再作下一步的检测判断。 (3)若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。B4B7按下述4种组合依次输出:P7 1 1 1 0P6 1 1 0 1P5 1 0 1 1P4 0 1 1 1 (4)在每组行输出时读取P0P3,若全为“1”,则表示设为“0”的这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,通常是一个扫描码,然后可采用计算法或查表法将闭合键的行值
7、和列值转换成所定义的键值。,7.1.2 常用键盘接口,通过以上步骤就可得到被按下键的扫描码了,通常把扫描码放到一个缓冲区内,直到应用程序处理按键为止。一般来说,都是把缓冲区作为一个环行队列来管理。使用两个指针,一个指向第一个空位,一个指向第一个扫描码。当一个按键被按下时,扫描码将被放置在环形队列的空指针指向的位置。而应用程序则是通过指向第一个扫描码的指针去读取扫描码。若缓冲区已满,则任何下一个按键都将被丢弃。,7.1.2 常用键盘接口,专用芯片式按键接口专用键盘处理芯片一般功能较完善,芯片本身能完成对按键的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示接口功能。优点:可靠性高,接口简单,
8、使用方便,适合处理按键较多的情况。但在很多应用场合,考虑成本因素,可能并不是最佳选择。,7.1.3 键盘驱动程序实例,在嵌入式系统的软件部分,要做的就是把前面的硬件电路驱动起来,为它们写一个驱动程序,下面就以一个实例进行说明如何编写键盘驱动程序。 本节的实例针对Intel x86体系结构,参照标准键盘的驱动程序,这个实例使用IRQ1中断,从0x64h读入键盘状态,从0x60h读入键盘扫描码,这样就跟系统自带的键盘驱动程序发生冲突了,这时的新添程序是无法捕捉按键中断的。 由于系统自带的驱动程序和要写的驱动代码不能共存,所以首先必须使系统自带的键盘驱动释放中断。但因为在内核源文件(drivers
9、/char/keyboard.c)里它是作为一个静态符号被定义的,所以没有办法恢复它,只能重新启动,才能恢复原来的中断。,6.1.3 键盘驱动程序实例,本节这段代码是把它自动绑定到IRQ1上,在Intel结构下这是键盘控制的IRQ。这时,当它连接到一个键盘中断时,将读出键盘的状态(这是inb(0x64)的目的)和由键盘返回的扫描码。随后只要内核认为可以时,它将运行got_char给出键的编码(扫描码的前7位)和是否被按下的信息(如果第8位是0则表示按下,是1表示释放)。,7.2 LCD显示接口简介,在ARM嵌入式系统中,人机接口不但包括可以输入的键盘,还有用于传送信息给用户的输出设备。液晶显示
10、器LCD具有显示信息多、质量高、无电磁辐射、可视面积大、应用范围广、画面效果好、数字式接口、体积小、功耗低等特点,在基于微处理器的嵌入式系统终端显示、人机接口中受到普遍欢迎,极大地提高了嵌入式系统的易用性和操作的直观性。,7.2.1 LCD简介,显示原理 液晶显示器的显像原理,是将液晶置于两片导电玻璃之间,靠两个电极间电场的驱动,引起液晶分子扭曲向列的电场效应,以控制光源透射或遮蔽功能,在电源开/关之间产生明暗而将影像显示出来。,7.2.1 LCD简介,LCD显示器的分类(1)按显示功能的强弱(2)按照液晶显示器的使用场合,7.2.1 LCD简介,点阵式图形液晶模块又可以分为以下几类: 1)
11、行、列驱动型2) 行、列控制型3) 行列驱动控制型,7.2.1 LCD简介,显示汉字一般英文为88点阵,因而显示一个英文字符只需要8个字节,而每一个汉字要占4个英文字体,因此显示一个汉字需要32个字节。汉字字库表为一张数据表,每个汉字在数据表中通常由32个字节组成一个点阵图形。在应用时,连续取32个字节送到LCD的相应位置,就能正确显示汉字后的图形符号。,7.2.2 在嵌入式Linux中驱动LCD,帧缓冲FrameBuffer是出现在Linux2.2.xx及其以后版本内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。帧缓冲设备对应的设备文件是/dev/fb*,如果系统有多个显卡,L
12、inux还支持多个帧缓冲设备,最多可以有32个,分别为/dev/fb0、/dev/fb1/dev/fb31。如果要编写一个帧缓冲设备的驱动程序,所要做的主要工作包括:(1)编写初始化函数 (2)编写成员函数,7.2.2 在嵌入式Linux中驱动LCD,通过/dev/fb,对显示设备的操作主要有以下几种:(1)读写(read/write) /dev/fb;(2)映射(map)操作;(3)I/O控制。 在应用程序中,操作/dev/fb的一般步骤如下:(1)打开/dev/fb设备文件。(2)用ioctl()取得当前显示屏幕的参数,如屏幕的分辨率、每个像素的比特数等,根据屏幕参数可以计算出屏幕缓冲区的
13、大小。 (3)将屏幕缓冲区映射到用户空间。映射之后就可以直接对屏幕缓冲区进行读写、绘图和显示图片了。,7.2.3 LCD接口电路,1.S3C4510B LCD显示接口电路,LCD显示模块选用北京精电蓬远MDLS40466显示模块,该显示模块的控制芯片为日立公司的HD44780。模块接口信号定义如表7.1所示。,7.2.3 LCD接口电路,7.2.3 LCD接口电路,本系统中LCD模块与S3C4510B连接如下图所示。,由于S3C4510B没有内置LCD控制器,当需要LCD显示的时候必须外接控制及驱动芯片,步骤繁琐。,7.2.3 LCD接口电路,2. S3C44B0X与LCD显示模块的接口S3C
14、44B0X中有内置的LCD控制器,它的功能就是把显示缓存中的图像数据传输到外部LCD驱动电路中。S3C44B0X中内置的LCD控制器可支持灰度LCD和彩色LCD。图7.2为S3C44B0X中内置的LCD控制器逻辑框图,它用于传输显示数据并产生必要的控制信号。,图7.2 S3C44B0X的LCD控制器逻辑图,7.2.3 LCD接口电路,TIMEGEN包含可编程的逻辑,产生VFRAME、VLINE、VCLK和VM等信号。表7.2给出了LCD控制器外部接口信号的含义。,表7.2 LCD控制器外部接口信号,7.2.3 LCD接口电路,LCDCDMA对应于先入先出(FIFO,First Input Fi
15、rst Output)寄存器。当FIFO变空或部分空的时候,LCDCDMA请求从帧内存中用突发传输模式预取数据,这种传输请求被内存控制器的总线仲裁器接收时,就把4个连续的字从系统内存传输到内部FIFO。S3C44B0X中内置的LCD控制器可通过一系列的寄存器进行控制。,7.2.4 uClinux下开发LCD应用程序,uClinux系统提供了系列的图形界面接口函数API。它们仿照Win32API的接口,使用户能够以最短的时间熟悉并使用它们。下面分析这些API是如何通过LCD驱动程序操作LCD的。,7.3 触摸屏交互接口简介,触摸屏提供了一种简单、方便的人机交互方式,赋予了多媒体以崭新的面貌,在计
16、算机和嵌入式系统中都有非常广泛的应用。触摸屏由触摸检测部件和触摸屏控制器组成,前者安装在显示器屏幕前面,用于检测用户触摸的位置并将其送给后者,从而将触摸点位置转换成坐标参数送给处理器,同时接收处理器发来的命令并执行。,7.3.1 触摸屏的基本原理,电阻式触摸屏是最常用的触摸屏类型,利用压力感应来进行控制。它的主要部分是一块与显示器表面非常配合的电阻薄膜屏。,7.3 电阻式触摸屏剖面示意图,7.3.1 触摸屏的基本原理,把电阻式触摸屏看作是一种传感器,它将矩形区域中触摸点(X,Y)的物理位置转换为代表X坐标和Y坐标的电压。所有的电阻式触摸屏都采用分压器原理来产生代表X坐标和Y坐标的电压。,7.4
17、 等效电路分压器电路,7.3.1 触摸屏的基本原理,为了在电阻式触摸屏上的特定方向测量一个坐标,需要对阻性层加一个偏置,也就是将它的一边接 VREF而另一边接地,同时,将未加偏置的那一层连接到一个模数转换器(ADC,Analog-to-Digital Converter)的高阻抗输入端。,7.3.1 触摸屏的基本原理,四线触摸屏包含两个阻性层,其中一层在屏幕的左右边缘各有一条垂直总线,另一层在屏幕的上、下边缘各有一条水平总线,如图7.5所示。,图7.5 四线触摸屏,7.3.1 触摸屏的基本原理,为了在X轴方向进行测量,将左侧总线偏置接到0V,右侧总线偏置接到VREF,将上侧或下侧总线连接到AD
18、C,当顶层和底层相接触时即可进行一次测量。为了在Y轴方向进行测量,将上侧总线偏置接到VREF,下侧总线偏置接到0V,将ADC输入端接左侧总线或右侧总线,当上层与下层相接触时即可对电压进行测量。对于四线触摸屏,最理想的连接方法是将偏置为VREF的总线接ADC的正参考输入端,而将设置为0V的总线接ADC的负参考输入端,图7.5给出了四线触摸屏的等效电路。,7.3.1 触摸屏的基本原理,对于四线触摸屏,最理想的连接方法是将偏置为VREF的总线接ADC的正参考输入端,而将设置为0V的总线接ADC的负参考输入端。,四线触摸屏等效电路,7.3.1 触摸屏的基本原理,五线触摸屏使用了一个阻性层和一个导电层。
19、导电层有一个触点,通常在其一侧的边缘位置,而阻性层的4个角上各有一个触点。这种测量算法的优点在于它使左上角和右下角的电压保持不变。但如果采用栅格坐标,X轴和Y轴需要反向。,7.3.1 触摸屏的基本原理,电容式触摸屏电容式触摸屏的构造主要是在玻璃屏幕上镀一层透明的薄膜体层,再在导体层外加上一块保护玻璃,双玻璃设计能彻底保护导体层及感应器。 电容式触摸屏在触摸屏四边均镀上狭长的电极,在导电体内形成一个低电压交流电场。在触摸屏幕时,由于人体电场,手指与导体层间会形成一个耦合电容,四边电极发出的电流会流向触点,而电流强弱与手指到电极的距离成正比,位于触摸屏幕后的控制器便会计算电流的比例及强弱,准确算出
20、触摸点的位置。电容触摸屏的双玻璃不但能保护导体及感应器,更有效地防止外在环境因素对触摸屏造成影响,就算屏幕沾有污秽、尘埃或油渍,电容式触摸屏依然能准确算出触摸位置。,7.3.2 触摸屏的输入系统,触摸屏输入系统由触摸屏、触摸屏控制器和微控制器3部分组成。图给出了一个实际的触摸屏输入系统的组成,其中,触摸屏采用四线电阻式,控制器采用ADS7846芯片。,触摸屏输入系统的组成,7.3.2 触摸屏的输入系统,ADS7846内部有一个由多个模拟开关组成的供电测量电路网络和12位的ADC,其功能框图如图所示。,ADS7846功能框图,7.3.2 触摸屏的输入系统,ADS7846芯片通过SIO接口同CPU
21、进行通信。S3C44B0X的SIO接口可以连接各种需要串行数据传输的外部设备,SIO模块能够以相应的控制寄存器设置所确定的频率收发8比特串行数据。为了保证灵活的数据传输比特率,用户可以选择内部或外部时钟源。,7.3.3 S3C44B0X触摸屏应用程序举例,当有触摸屏事件发生的,将产生一个中断并执行中断处理程序,得到触摸屏被按下位置的坐标和进行相应的处理。具体实验可以采用中断或轮询方式,可以在用户态对实际硬件地址直接读/写,工作流程图如图7.6所示。,图7.6 触摸屏应用程序工作流程,7.3.3 S3C44B0X触摸屏应用程序举例,通过对代码的阅读,可以看到,触摸屏应用程序其实很简单,即获得触点坐标,进行判断,然后执行相应的操作。在编写其他程序时,同样可以使用初始化触摸屏函数init_handpad()和获得触点坐标的函数get_handpad(unsigned short *x,unsigned short *y)。,