第6章 人机交互接口设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在嵌入式系统的软件部分,要做的就是把前面的硬件电路驱 动起来,为它们写一个驱动程序,下面就以一个实例进行说 明如何编写键盘驱动程序。 本节的实例针对Intel x86体系结构,参照标准键盘的驱动 程序,这个实例使用IRQ1中断,从0x64h读入键盘状态,从 0x60h读入键盘扫描码,这样就跟系统自带的键盘驱动程序 发生冲突了,这时的新添程序是无法捕捉按键中断的。
•
3
6.1.1 键盘工作原理
按键开关电路
按键开关电路是指通过外力使电路瞬时接通的开关,在 许多场合都有应用。比如大多数处理器的RESET电路都用到 了按键开关,它通过按键产生一个瞬时的低电压,CPU感知 这个低电压后重启。
Vcc
至微处理器
图6.1
按键开关电路示意图
4
6.1.1 键盘工作原理
抖动问题
9
6.1.2 常用键盘接口
(1)检测当前是否有按键被按下。检测的方法是B4~B7输出全 “0”,读取B0~B3的状态,若B0~B3全为“1”,则无键 闭合,否则为0的那一列有键闭合。 (2)去除键抖动。当检测到有键按下后,延时一段时间再作下 一步的检测判断。 (3)若有键被按下,应识别出是哪一个键闭合。方法是对键盘 的行线进行扫描。B4~B7按下述4种组合依次输出: P7 P5 P4 1 1 0 1 0 1 1 1 1 0 1 1
如果要编写一个帧缓冲设备的驱动程序,所要做的主要工 作包括: (1)编写初始化函数 (2)编写成员函数
20
6.2.2 在嵌入式Linux中驱动LCD
通过/dev/fb,对显示设备的操作主要有以下几种:
(1)读写(read/write) /dev/fb; (2)映射(map)操作;
(3)I/O控制。
Vcc Vcc
P1.0 P1.1 P1.2
P1.0 P1.1 P1.2
INT0 微控制器
&
(a)中断式
INT0 微控制器 (b)查询式
7
6.1.2 常用键盘接口
行列式按键接口
如下图所示,行列式按键接口适用于按键数量较多,又 不方便使用专用键盘芯片的场合。这种方式的按键接口由行 线和列线组成,按键位于行、列的交叉点上。
6
6.1.2 常用键盘接口
常用按键接口可分为独立式按键接口、行列式按键接口 和专用芯片式按键接口等。
独立式按键接口
独立式按键接口设计优点是电路配置灵活,软件实现简 单。但缺点是每个按键需占用一根口线,若按键数量较多, 资源浪费将比较严重,电路结构很复杂。因此本方法主要用 于按键较少或对操作速度要求较高的场合。如下图所示。
S3C44B0X中内置的LCD控制器可支持灰度LCD和彩色LCD。
寄存器控制 信号产生电路 VCLK VLINE VFRAME VM VD[3:0] VD[7:4]
32
DMA传送控制
32 32
数据控制
图6.5
S3C44B0X的LCD控制器逻辑图
图6.5为S3C44B0X中内置的LCD控制器逻辑框图,它用于传 输显示数据并产生必要的控制信号。
21
6.2.3 LCD接口电路
1.S3C4510B LCD显示接口电路
LCD显示模块选用北京精电蓬远MDLS40466显示 模块,该显示模块的控制芯片为日立公司的HD44780。 模块接口信号定义如表6.1所示。
22
6.2.3 LCD接口电路
23
6.2.3 LCD接口电路
本系统中LCD模块与S3C4510B连接如下图所示。
如图6.1所示的按键开关电路是最简单的,由于按键 是机械触点,当机械触点断开、闭合时,会产生抖动。 这种抖动用户感觉不到,但对计算机来说,则是完全可 以感应的。计算机处理的速度在微秒级,而机械抖动的 时间至少是毫秒级。假如利用按键开关产生中断可能就 会产生一个问题,就是说按键有时灵,有时不灵,其实 就是这个原因。有可能只按了一次按键,可是计算机却 已执行了多次中断的操作。
由于系统自带的驱动程序和要写的驱动代码不能共存,所以 首先必须使系统自带的键盘驱动释放中断。但因为在内核源 文件(drivers /char/keyboard.c)里它是作为一个静态符 号被定义的,所以没有办法恢复它,只能重新启动,才能恢 复原来的中断。
13
6.1.3 键盘驱动程序实例
本节这段代码是把它自动绑定到IRQ1上,在Intel结构下 这是键盘控制的IRQ。这时,当它连接到一个键盘中断时, 将读出键盘的状态(这是inb(0x64)的目的)和由键盘返回 的扫描码。随后只要内核认为可以时,它将运行got_char给 出键的编码(扫描码的前7位)和是否被按下的信息(如果 第8位是0则表示按下,是1表示释放)。
P7 P6 P5 P4 P3 P2 P1 P0
8
6.1.2 常用键盘接口
如何确定行列式键盘上哪个键被按下,这里介绍一种“ 行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是 一种最常用的按键识别方法。扫描过程分为以下两步: (1)判断键盘中有无键按下。 (2)判断闭合键所在的位置。
举例说明
例如在图6.3中,CPU的低8位用作键盘I/O口,键盘的列 线连接到I/O口的低4位,键盘的行线连接到I/O口的高4位。 列线B0~B3分别连接有4个上拉电阻到正电源+5V,并把列线 设置为输入线,行线B4~B7设置为输出线,4根行线和4根列 线形成16个相交点。如果进行键盘扫描,再加上去除抖动的 功能,要执行如下操作:
去除抖动的方法
为使CPU能正确地读出按键的状态,对每一次按键只作 一次响应,就必须考虑如何去除抖动。常用的去除抖动方 法有软件方式和硬件方式两种。
5
6.1.1 键盘工作原理
软件方法
对于简单的按键电路,可采用软件方法去除抖动。软件方法 就是在程序获得外接端口为低的信息后,不是立即认定按键已被 按下,而是延时10毫秒或者更长一段时间后再次检测外部端口, 如果仍为低,说明按键的确按下了,这实际上是避开了按键按下 时的抖动时间。同理,在检测到按键释放后再延时5~10毫秒, 消除后沿的抖动,然后再对键值处理。
14
LCD显示接口简介
在ARM嵌入式系统中,人机接口不但包括可以输入的键盘 ,还有用于传送信息给用户的输出设备。液晶显示器LCD具 有显示信息多、质量高、无电磁辐射、可视面积大、应用范 围广、画面效果好、数字式接口、体积小、功耗低等特点, 在基于微处理器的嵌入式系统终端显示、人机接口中受到普 遍欢迎,极大地提高了嵌入式系统的易用性和操作的直观性 。
嵌入式系统原理与设计
第六章 人机交互接口设计
1
本章提要
1ቤተ መጻሕፍቲ ባይዱ
键盘输入接口
2 LCD显示接口
3 触摸屏交互接口
2
键盘输入接口简介
• 在ARM嵌入式系统应用中,键盘是人机交互对话最通 用的方法之一。操作者通过键盘向系统发送各种指令或 置入必要的数据信息。键盘模块设计的好坏,直接关系 到系统的可靠性和稳定性。 在ARM应用系统中,键盘扫描只是ARM的工作内容之一, ARM在忙于各项工作任务的同时,如何兼顾键盘的输入, 则取决于键盘的工作方式。键盘工作方式的选取原则是 既要保证能及时响应按键操作,又要不过多占用ARM的 工作时间。
硬件方法
有时用软件方式并不能很好地解决按键抖动问题,这时就需 要使用硬件方法。硬件方法其实就是一个去除抖动电路,用于去 除按下和释放按键时的波形抖动,读者可以查找相关去抖电路。 对于比较复杂的矩阵键盘而言,通常使用专用芯片去除抖动,例 如键盘接口芯片8279、MAX6816、MAX6817、MAX6818等。
11
6.1.2 常用键盘接口
专用芯片式按键接口
专用键盘处理芯片一般功能较完善,芯片本身能完成对 按键的编码、扫描、消抖和重键等问题的处理,甚至还集成 了显示接口功能。 优点:可靠性高,接口简单,使用方便,适合处理按键较 多的情况。但在很多应用场合,考虑成本因素,可能并不是 最佳选择。
12
6.1.3 键盘驱动程序实例
19
6.2.2 在嵌入式Linux中驱动LCD
帧缓冲 FrameBuffer是出现在Linux2.2.xx及其以后版本内核当 中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲 区。 帧缓冲设备对应的设备文件是/dev/fb*,如果系统有多 个显卡,Linux还支持多个帧缓冲设备,最多可以有32个, 分别为/dev/fb0、/dev/fb1…/dev/fb31。
15
6.2.1 LCD简介
显示原理
液晶显示器的显像原理,是将液晶置于两片导电玻璃之 间,靠两个电极间电场的驱动,引起液晶分子扭曲向列的电 场效应,以控制光源透射或遮蔽功能,在电源开/关之间产 生明暗而将影像显示出来。
16
6.2.1 LCD简介
LCD显示器的分类
LCD显示器
(1)按显示功能的强弱
27
6.2.4 uClinux下开发LCD应用程序
uClinux系统提供了—系列的图形界面接口函数API。它们 仿照Win32API的接口,使用户能够以最短的时间熟悉并使用 它们。 下面分析这些API是如何通过LCD驱动程序操作LCD的。
28
触摸屏交互接口简介
触摸屏提供了一种简单、方便的人机交互方式,赋予了 多媒体以崭新的面貌,在计算机和嵌入式系统中都有非常广 泛的应用。 触摸屏由触摸检测部件和触摸屏控制器组成,前者安装 在显示器屏幕前面,用于检测用户触摸的位置并将其送给后 者,从而将触摸点位置转换成坐标参数送给处理器,同时接 收处理器发来的命令并执行。
25
6.2.3 LCD接口电路
TIMEGEN包含可编程的逻辑,产生VFRAME、VLINE、VCLK和 VM等信号。表6.2给出了LCD控制器外部接口信号的含义。
表6.2
LCD控制器外部接口信号
26
6.2.3 LCD接口电路
LCDCDMA对应于先入先出(FIFO,First Input First Output)寄存器。当FIFO变空或部分空的时候,LCDCDMA请 求从帧内存中用突发传输模式预取数据,这种传输请求被内 存控制器的总线仲裁器接收时,就把4个连续的字从系统内 存传输到内部FIFO。 S3C44B0X中内置的LCD控制器可通过一系列的寄存器进 行控制。
P6 1 1 0 1
(4)在每组行输出时读取P0~P3,若全为“1”,则表示设为 “0”的这一行没有键闭合,否则有键闭合。由此得到闭合 键的行值和列值,通常是一个扫描码,然后可采用计算法 或查表法将闭合键的行值和列值转换成所定义的键值。
10
6.1.2 常用键盘接口
通过以上步骤就可得到被按下键的扫描码了,通常把扫 描码放到一个缓冲区内,直到应用程序处理按键为止。 一般来说,都是把缓冲区作为一个环行队列来管理。使 用两个指针,一个指向第一个空位,一个指向第一个扫描码 。当一个按键被按下时,扫描码将被放置在环形队列的空指 针指向的位置。而应用程序则是通过指向第一个扫描码的指 针去读取扫描码。若缓冲区已满,则任何下一个按键都将被 丢弃。
在应用程序中,操作/dev/fb的一般步骤如下:
(1)打开/dev/fb设备文件。 (2)用ioctl()取得当前显示屏幕的参数,如屏幕的分辨率 、每个像素的比特数等,根据屏幕参数可以计算出屏幕缓冲 区的大小。 (3)将屏幕缓冲区映射到用户空间。映射之后就可以直接对 屏幕缓冲区进行读写、绘图和显示图片了。
段位式LCD 字符式LCD 点阵式LCD
(2)按照液晶显示器的使用场合
LCD显示器
数显液晶模块
点阵式液晶 字符模块
点阵式 图形液晶模块
17
6.2.1 LCD简介
点阵式图形液晶模块又可以分为以下几类:
1) 行、列驱动型
2) 行、列控制型 3) 行列驱动—控制型
18
6.2.1 LCD简介
显示汉字
一般英文为8×8点阵,因而显示一个英文字符只需要8 个字节,而每一个汉字要占4个英文字体,因此显示一个汉 字需要32个字节。汉字字库表为一张数据表,每个汉字在数 据表中通常由32个字节组成一个点阵图形。在应用时,连续 取32个字节送到LCD的相应位置,就能正确显示汉字后的图 形符号。
4510B LCD DA[0-7]
XDATA[0-7]
ADDR[0-1]
AD[0-1]
nRCS0
CS
由于S3C4510B没有内置LCD控制器,当需要LCD显示的 时候必须外接控制及驱动芯片,步骤繁琐。
24
6.2.3 LCD接口电路 2. S3C44B0X与LCD显示模块的接口
S3C44B0X中有内置的LCD控制器,它的功能就是把显示缓 存中的图像数据传输到外部LCD驱动电路中。