首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
||||||||||||||
isp1016实现机载导航系统的键盘控制 | ||||||||||||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:33:12 点击数:[] ![]() |
||||||||||||||
[本篇论文由上帝论文网为您收集整理,上帝论文网http://paper.5var.com将为您整理更多优秀的免费论文,谢谢您的支持] 关键词:键盘控制器 在线可编程 扫描线 isp1016 1 键盘控制器的外部接口信号 无论在任何计算机系统中,键盘都是最重要的输入设备,但是普通键盘不能满足机载要求。笔者在新一代电子航空图导航系统中,用Lattice公司的ispLSI1016设计了一个4×5键盘控制器(以下简称KBC),经实际应用,该键盘控制器通用性较强。图1是其键盘和显示器外观示意图。 *Reset:复位,低有效。该信号有效时将异步复位内部所有寄存器,以对KBC进行初始化; *CLK:工作时钟,频率为100kHz; *CS:片选,低有效; *RD:读信号,低有效; *A0:片内地址,用于区分片内寄存器; *INT:中断请求,高有效。当键盘控制器检测到有效按键时,该脚为高,当CPU读走按键编码时,KBC自动撤销中断请求; *D4~D0:三态数据线; *SL3~SL0:扫描输出,按键盘矩阵的列线; *RL4~RL0:回复线,接键盘矩阵的行线。 实际上,大部分矩阵键盘的行列是可对换的。 2 KBC接口寄存器定义及驱动程序 KBC针对CPU接口设计有2个只读寄存器,即数据寄存器(Dreg)和状态寄存器(Sreg)。数据寄存器用于保持有效按键的编码值,该编码值就是按键所在的行列;而状态寄存器则用于保持按键的状态信息,以供CPU查询。当CPU访问KBC时(即CS和RD同时有效),adk A0=0,则访问数据寄存器,否则访问状态寄存器。表1、表2分别是数据寄存器和状态寄存器的定义。
表2 状态寄存器定义
显然,KBC的编程可以有2种模式,一种是软件查询,另一种是中断驱动。由于本系统采用WindowNT为运行环境,KBC对应用程序透明,所以,将INT请求直接和CPU的某一空闲中断(IRQ9)相连接,以便使驱动程序能将KBC作为一个设备打开。在初始化加载时,应将对应中断触发设置为电平敏感。其VC核心代码如下: #define SReg 0x401 //键盘状态寄存器地址 #define DReg 0x400 //键盘数据寄存器地址 … BYTE SR,Key,Row,Col; … SR=inp(SReg)&0x1f; //读数据寄存器,低6位有效 Col=Key>>3; //右移3位,提取按键列值 Row=Key & 0x07;//提取按键行值 } 至此,就可根据Row和Col的值将它翻译为某一标准键,并存入NT键盘缓冲区。 3 KBC内部逻辑设计 内部控制逻辑设计的关键是掌握按键识别原理。图3所示是其键盘识别原理图。设计时,可将按键设置在行线、列线的交点上。行线通过上拉电阻接到VCC(+5V),无按键时处于高电平。有按键时行线电平状态由列线决定。所有列线均为高则行线高,任一列线为低则行线低。KBC处理的核心就在于确认某一行线为低时,能定位出对应的列线。 3.1 输出扫描线(SL3..SL0) 在设计输出扫描线时,可以使用一个2-Bit状态机Q5[L1..0]来依次轮流使扫描线输出为低电平。驱动时钟的周期为640ms,亦即每即扫描线持续640ms的低电平。将状态机的状态编码值和当前周期为低电平的扫描线序号对应起来,即可简化后续处理。图4是扫描线输出波形。注意,无论何种按键组合,在任一状态,有且仅有一个扫描线为低电平,否则后续处理将无法正确识别。 处理回复线(RL4..RL0)时,应该对其中为低电平的行线进行编码。5个行线需要3-Bit寄存器,记为[RQ5..RQ0],其真值表如下: [RL4..RL0] ->[RQ2..0] ---------------- [H,H,H,H,L] ->[0,0,0];0 [H,H,H,L,H] ->[0,0,1];1 [H,H,L,H,H] ->[0,1,0];2 [H,L,H,H,H] ->[0,1,1];3 [L,H,H,H,H] ->[1,0,0];4 当KBC确认是有效按键后,应把行列编码值放入缓冲,以供CPU读取,其逻辑表达如下: 式中,[KSL1,KSL0]是记录有效按键的扫描线编码,即当时的[QSL1..0]状态。 3.3 CPU的读操作 CPU读状态寄存器时,系统把中断请求寄存器INT的值送出,而读数据寄存器时,它将把FIFO缓冲的按键值送出,处理CPU读操作的表达式如下: [D4..D0].oe=!CS & !RD; //寄存器由三态控制 [D4..D0]=(!A0 & [FIFO4..FIFO0])# //A0=0:送按键数据 (A0 & [L,L,L,L,INT]); //A0=1;送状态 INT.ar=!Reset #(!CS&!RD & !A0);//读数据寄存器时应撤销中断 3.4 键盘处理状态机 该状态处理机是KBC处理的核心。图5是其状态转移图,其驱动时钟应该比扫描周期快而且应该是它的整数倍。此处采用的80ms时钟周期是扫描周期的8倍。下面讨论其状态转移条件。 1.记录当前扫描周期 2.if若有低电平的回复线then S1 else S0; S1: 1. 启动延时(去抖)计数器,延时10.24ms 2. 无条件进入下一状态S2 S2:去抖状态 if去抖正确then S3 else S0 S3:确认状态 1. 将有效键值打入FIFO缓冲 2. 设置 4 改进建议 上述KBC完全可以满足一般系统对键盘的要求,但仍然可以改进以使之更加智能化。例如使CPU能够对KBC的读操作和写入控制字进行适当控制、使KBC可处理组合按键和按键连击、增加KBC多字节的缓冲等。上述功能完全可以根据设计者系统和应用程序的要求进行改进。本设计源代码使用的是ABLE硬件描述语言,对此感兴趣的同志可以和作者进行联系。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |