文档视界 最新最全的文档下载
当前位置:文档视界 › 有关USB外接日语键盘键位无法正确识别的研究

有关USB外接日语键盘键位无法正确识别的研究

有关USB外接日语键盘键位无法正确识别的研究
有关USB外接日语键盘键位无法正确识别的研究

有关USB外接日语键盘键位正确识别的研究

首先,描述一下问题,以及需求:

1.笔记本电脑内置键盘为标准英文键盘,外接USB键盘为日文键盘。

2.要求在外接日文键盘时,能够以正确的日文键位输入中文和日文。

3.要求在单独使用内置键盘时,能够以正确的英文键位输入中文和日文。

冲突:

相信在以往和日文键盘做过斗争的朋友们,一定都有过一段痛苦的经历,尤其是笔记本为标准键盘,而外接键盘是日文键盘,这个时候可以说是非常痛苦的……比如说我,本本的键盘很好用,带着出去的时候感觉不错,家里有一个相当好的USB日文IBM键盘,这个时候问题就来了:如果使用英文键位,那USB日文键盘乱了,使用日文键位,那笔记本内置键盘乱了……

解决问题的思路:

既然统一设置不能满足需求,不如自己动手,为不同的键位设置不同的输入法和键盘布局。

其实步骤非常简单,这里使用Windows 7作为示例:

安装输入法,这里我使用了Google拼音和Google日语输入法。

首先,更新外置键盘的驱动,这个步骤我在这里就不再详细写了,相信搜索过日文键盘键位修改的朋友都读过了,所以请自行Google搜索一下……

之后,打开记事本,在里面粘贴以下内容(其中最后五行是比较重要的):

============不包含此分割线============

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\i8042prt\Parameters] "PollingIterations"=dword:00002ee0

"PollingIterationsMaximum"=dword:00002ee0

"ResendIterations"=dword:00000003

"LayerDriver JPN"="kbd106.dll"

"LayerDriver KOR"="kbd101a.dll"

"OverrideKeyboardType"=dword:00000007

"OverrideKeyboardSubtype"=dword:00000002 "OverrideKeyboardIdentifier"="PCAT_106KEY"

============不包含此分割线============

下一步,导出两个输入法在注册表中的键值。路径在:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layouts\

注意:不是HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Keyboard Layout\(最后

相差一个字母S)

找到以804(这个是中文输入法)和411(这个是日语输入法)为结尾的两个键值,导出,然后编辑:

将中文输入法导出项目中的804改为411,kbdus.dll改为kbdjpn.dll,保存。

将日文输入法导出项目中的411改为804,kbdjpn.dll改为kbdus.dll,保存。

再次导入。之后应该有804和411为结尾的注册表键值各两个:即在日语键位下,有中文

和日文输入法各一个,在英语(汉语)键位下也有中文和日语输入法各一个,总共四个输入法。

操作成功的话,注册表里大概应该是这个样子的,804对应两种输入法,键位是kbdus.dll;411对应两种输入法,键位是kbdjpn.dll。

之后再控制面板里,进入区域与语言选项:

在日语键位中添加中文输入法,在中文键位中添加日语输入法。

最后应该是这个样子:

这样一来,就完成了,当插入USB日文键盘时,将默认输入法改成“日本語 (日本) –谷歌拼音输入法”即可,当拔下USB键盘以后,想使用本本自带标准键盘的时候,只要将默认输入法改为“中国语(简体字、中国)-谷歌拼音输入法”即可,需要输入日语也很简单,在各自的键盘布局下,和平时一样,按Ctrl+Shift即可在正确的键位下切换对应的日语输入法。

以上内容一言以蔽之:为不同的键盘布局添加相同的输入法,需要切换不同的键盘布局时,只需要修改默认输入法就可以达到不用重启而快速切换的目的。

小键盘按键识别(微机原理课程设计)

微机原理与接口技术课程设计报告 专业: 班级: 姓名: 学号: 小键盘按键识别

一.课题任务与要求 实验箱上有一个24键小键盘,出厂时按键接点已经按图所示连接。小键盘有8根横向引出线。实验前将8根横向引出线与PA0~PA7相连,3根纵向引出线与PB0~PB2相连,再从“I/O口地址译码器”选择一个译码器输出连接到8255的片选端,做好上述连接之后,就构成了以8255为核心的键盘输入电路要求: 在实际的自动控制系统中,键盘输入电路的作用是输入数据(0~9,A~F)或者输入控制信号(G,M,P,R,W,X,Y,S)。实现上述功能的核心程序是“按键识别”。 本实验要求设计按键识别程序,当按下小键盘上某一个键的时候,主机屏幕显示闭合键的键名,按下小键盘“R”键之后停止演示。 二.完成任务的方法或方案简介 本程序显示数字0到9,刚刚开始提出两中解决方案一是用跳转法直接显示数值,二是用查找法间接显示数值,本程序是用第一种方案,虽然程序多了些,但直观容易理解,故采纳第一种方案。 DISPLAY函数用来将BUFFER中的键值显示在数码管上。 设定A口方式0输出,B口方式0输入。 GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。 设定如果是R则退出程序. CHANGE函数用来改变BUFFER中保存的键值,将BUFFER中的键值移位,最后一位加入AL中的新键值。 CLOSEALL此函数用在退出程序时将数码管关闭. 以上是主题函数,在设计过程中还碰到了一些细节问题,例数码管的显示才用延迟20MS的办法解决,具体方案在DISPLAY函数中。

小键盘按键识别(微机原理课程设计)

微机原理与接口技术 课程设计报告 专业: 班级: 姓名: 学号: 小键盘按键识别 一.课题任务与要求 实验箱上有一个24键小键盘,出厂时按键接点已经按图所示连接。小键盘有8根横向引出线。实验前将8根横向引出线与PA0~PA7相连,3根纵向引出线与PB0~PB2相连,再从“I/O口地址译码器”选择一个译码器输出连接到8255的片选端,做好上述连接之后,就构成了以8255为核心的键盘输入电路要求: 在实际的自动控制系统中,键盘输入电路的作用是输入数据(0~9,A~F)或者输入控制信号(G,M,P,R,W,X,Y,S)。实现上述功能的核心程序是“按键识别”。 本实验要求设计按键识别程序,当按下小键盘上某一个键的时候,主机屏幕显示闭合键的键名,按下小键盘“R”键之后停止演示。

二.完成任务的方法或方案简介 本程序显示数字0到9,刚刚开始提出两中解决方案一是用跳转法直接显示数值,二是用查找法间接显示数值,本程序是用第一种方案,虽然程序多了些,但直观容易理解,故采纳第一种方案。 DISPLAY函数用来将BUFFER中的键值显示在数码管上。 设定A口方式0输出,B口方式0输入。 GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。 设定如果是R则退出程序. CHANGE函数用来改变BUFFER中保存的键值,将BUFFER中的键值移位,最后一位加入AL中的新键值。 CLOSEALL此函数用在退出程序时将数码管关闭. 以上是主题函数,在设计过程中还碰到了一些细节问题,例数码管的显示才用延迟20MS的办法解决,具体方案在DISPLAY函数中。 三.实现系统 1、程序框图:

矩阵键盘识别

4 x 4矩阵键盘识别 发表日期:2008-6-5 在单片机应用系统中,键盘是人机对话不可缺少的组件之一。在按键比较少时,我们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵式键盘无疑是最好的选择。 4 x 4矩阵键盘是运用得最多的键盘形式,也是单片机入门必需掌握的一种键盘识别技术,下面我们就以实例来说明一下4 x 4矩阵键盘的识别方法。如下图所示,我们把按键接成矩阵的形式,这样用8个I/O口就可以对16个按键进行识别了,节省了I/O口资源。 我们的识别思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位输出高电平,即让P1口输出0xF0。扫描键盘的时候,我们读P1口,看P1是否还为0xF0,如果仍为0xF0,则表示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确认是否为0xF0,这是为了防止是抖动干扰造成错误识别,如果不是那就说明是真的有按键按下了,我们就可以读键码来识别到底是哪一个键按下了。 识别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出0x0F,即让P1口的低四位输出高电平,高四位输出低电平,然后读P1口的低四位,最后我们把高四位读到的值与低四位读到的值做或运算就得到了该按键的键码。就可以知道是哪个键按下了。 以0键为例,初使化时P1输出0xF0,当0键按下时,我们读高四位的状态应为1110,即P1为0xE0,然后让P1输出0x0F,读低四位产状态应为0111,即P1为0x07,让两次读数相与得0xE7。 现在我们在P0口和P2口分别接一个共阳极的数码管,用来显示我们按下去的键的键值,P0口接的是个位,P2口接的是十位。如0键按下显示00,1键按下显示01,15键按下显示15……,实现的程序如下: #include unsigned char num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极LED 段码0~9 unsigned char k; /*************延时Xms*****************/ void Delay_nms(unsigned int n) //延时程序

矩阵键盘的工作原理和扫描确认方式

9.3.1 矩阵键盘的工作原理和扫描确认方式 来源:《AVR单片机嵌入式系统原理与应用实践》M16华东师范大学电子系马潮 当键盘中按键数量较多时,为了减少对I/O 口的占用,通常将按键排列成矩阵形式,也称为行列键盘,这是一种常见的连接方式。矩阵式键盘接口见图9-7 所示,它由行线和列线组成,按键位于行、列的交叉点上。当键被按下时,其交点的行线和列线接通,相应的行线或列线上的电平发生变化,MCU 通过检测行或列线上的电平变化可以确定哪个按键被按下。 图9-7 为一个 4 x 3 的行列结构,可以构成12 个键的键盘。如果使用 4 x 4 的行列结构,就能组成一个16 键的键盘。很明显,在按键数量多的场合,矩阵键盘与独立式按键键盘相比可以节省很多的I/O 口线。 矩阵键盘不仅在连接上比单独式按键复杂,它的按键识别方法也比单独式按键复杂。在矩阵键盘的软件接口程序中,常使用的按键识别方法有行扫描法和线反转法。这两种方法的基本思路是采用循环查循的方法,反复查询按键的状态,因此会大量占用MCU 的时间,所以较好的方式也是采用状态机的方法来设计,尽量减少键盘查询过程对MCU 的占用时间。 下面以图9-7 为例,介绍采用行扫描法对矩阵键盘进行判别的思路。图9-7 中,PD0、PD1、PD2 为3 根列线,作为键盘的输入口(工作于输入方式)。PD3、PD4、PD5、PD6 为4根行线,工作于输出方式,由MCU(扫描)控制其输出的电平值。行扫描法也称为逐行扫描查询法,其按键识别的过程如下。 √将全部行线PD3-PD6 置低电平输出,然后读PD0-PD2 三根输入列线中有无低电平出现。只要有低电平出现,则说明有键按下(实际编程时,还要考虑按键的消抖)。如读到的都是高电平,则表示无键按下。 √在确认有键按下后,需要进入确定具体哪一个键闭合的过程。其思路是:依

按键识别方法

《单片机原理及应用》大作业设计 学院班级: 姓名: 学号

按键识别方法 一.设计任务: 每按下一次开关SP1,计数值加1,通过AT89S51单片机的P1端口的P1.0到P1.3显示出其的二进制计数值。 二.电路原理图:

图1 三.系统板上硬件连线: 1.把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上; 2.把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0连接到L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。 四.程序设计方法: 其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而在按键按下的过程中,不要有干扰进来,因为,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时候

图2 要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用电容来滤除掉这些干扰信号,但实际上,会增加硬件成本及硬件电路的体积,这是我们不希望,总得有个办法解决这个问题,因此我们可以采用软件滤波的方法去除这些干扰。 信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号图如上图所示,从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU就认为是误触发信号而舍弃这次的按键识别过程。从而提高了系统的可靠性。由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。 对于按键识别的指令,我们依然选择如下指令JB BIT,REL指令是用来检测BIT是否为高电平,若BIT=1,则程序转向REL处执行程序,否则就继续向 下执行程序。或者是JNB BIT,REL指令是用来检测BIT是否为低电平,若BIT =0,则程序转向REL处执行程序,否则就继续向下执行程序。

按键控制键盘检测原理与应用

按键控制键盘检测原理与应用 一、任务目标: 认知目标 1、 掌握按键分类及工作原理 2、 掌握IF 条件选择结构和使用方法 3、 掌握循环结构和使用原理 4、 掌握独立按键子函数的编写原理及方法 1、独立键盘 在简单的单片机应用系统中,往往只需要几个功能键就能满足要求, 此时,可采用独立 式按键结构。 独立式按键是直接用 I/O 口线构成的单个按键电路,其特点是每个按键单独占用一根 I/O 口线,每个按键的工作不会影响其它 I/O 口线的状态。独立式按键的典型应用如图 1.2.1 所示。 独立式按键示意图 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根 I/O 口线,因此, 在按键较多时,I/O 口线浪费较大,不宜采用。 程序开始,检测按键是否被按下,若按下,则移动机器人启动,未被按下,继续检测。 这里将程序分成三个部分,分别是延时子函数、按键子函数、主函数。 延时子函数,通过参数 t 设置延时时间;按键模块子函数需用到延时函数,对按键进行 消抖;主函数主要调用按键检测程序,实现对移动机器人的控制。程序流程图如图 1.2.2所 示 xnu Lnu Jnu L] iu lu o 1 3 4 5 6 - IL I 」 IL IL IL IL IL IL- PPPPFFPP 3 S-I

程序示例: 在编写程序开始的部分,将系统头文件“STC89C52RC.H ”包含进来,对常用的变量类 型进行宏定义,规划各函数和变量,对变量进行定义和初始化,对自定义子函数进行声明并添加相应标注,程序开始部分如下 sbit IN仁P1A0; sbit IN2=P1A1; Void key(); 编写主函数,在主函数中就是调用按键检测函数。 Void mai n() { key(); } 编写key()按键检测函数,按键按下,输出低电平,通过if语句检测低电平,延时10ms 后,再次检测,若检测为高电平,则表示为机械抖动,若检测到低电平表示按键按下。 Void key() { if(IN1==0) { delay_ms(10); if(IN 仁=0) { while(IN 仁=0); IN2=~IN2 ; } } } 在上面的程序中,就只有一个检查按键扫描的函数key(),key()函数是检查有没有按键

单片机按键识别方法之一

单片机按键识别方法之一 1.实验任务 每按下一次开关SP1,计数值加1,通过AT89S51单片机的P1端口的P1.0到P1.3显示出其的二进制计数值。 2.电路原理图 图4.8.1 3.系统板上硬件连线 (1.把“单片机系统”区域中的P3.7/RD端口连接到“独立式键盘”区域中的SP1端口上;

(2.把“单片机系统”区域中的P1.0-P1.4端口用8芯排线连接到“八路发光二极管指示模块”区域中的“L1-L8”端口上;要求,P1.0连接到L1,P1.1连接到L2,P1.2连接到L3,P1.3连接到L4上。 4.程序设计方法 (1.其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说, 当我们按下一个按键 时,总希望某个命令只 执行一次,而在按键按 下的过程中,不要有干 扰进来,因为,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。 因此在按键按下的时候,图4.8.2 要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况 下,我们可以采用电容来滤除掉这些干扰信号,但实际上,会增加硬件成本及 硬件电路的体积,这是我们不希望,总得有个办法解决这个问题,因此我们可 以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候, 总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状 态。具体的一个按键从按下到释放的全过程的信号图如上图所示: 从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时5ms以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别过程。从而提高了系统的可靠性。 由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。

键盘矩阵的按键识别方法

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵键盘中每条水平线和垂直线在交叉处不直接相连,而是通过一个按键相连接,这样在由N条水平线和M条垂直线最多可以有N *M 个按键,大大的减少了对于芯片I/O的占用。 键盘矩阵的按键识别方法 图1 矩阵键盘的结构 方法一行扫描法 1、判断键盘中有无键按下将全部行线P1.4-P1.7置低电平,当然P1.0-P1.3为高电平(或许芯片内部已经将这些引脚它上拉),然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 方法 二 先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。 在I.MX27中keypad模块的实现

Keypad port 相关引脚说明: 在keypad模块中总共有16个引脚(8个行引脚 8个列引脚) KP_COL[7:0] 其中[5:0] 作为键盘模块的列引脚如果未使用也可以做为通常的GPIO口使用 [7:6]两引脚复用可以作为键盘模块的列引脚 7脚还可以用做串口2的UART2_CTS 引脚 6脚还可以当做串口2 的UART2_TXD脚使用 6脚有时还做为芯片内部的测试引脚 KP_ROW[5:0] 其中[5:0] 作为键盘模块的行引脚如果未使用也可以做为通常的GPIO口使用 [7:6]两引脚复用可以作为键盘模块的行引脚 7脚还可以用做串口2的UART2_RTS 引脚 6脚还可以当做串口2 的UART2_RXD脚使用 keypad port 相关的寄存器 KPCR 键盘控制寄存器

实验一矩阵键盘检测

一、实验目的: 1、学习非编码键盘的工作原理和键盘的扫描方式。 2、学习键盘的去抖方法和键盘应用程序的设计。 二、实验设备: 51/AVR实验板、USB连接线、电脑 三、实验原理: 键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。我们可以通过键盘输入数据或命令来实现简单的人机通信。 1、按键的分类 一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。 按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。 全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。 2、按键的输入原理 在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。当所设置的功能键或数字键按下时,计算机应

按键识别控制

XXXXX 大学单片机最小应用系统 设 计 报 告 指导老师:XXXXX 学生:XXXX 学号:XXXX XXXXX学院 XXX年XX月

单片机最小应用系统设计报告 一、设计题目 (1) 二、设计内容与要求 (1) 三、设计目的意义 (1) 3.1设计目的 (1) 3.2系统设计意义 (1) 四、系统硬件电路图 (2) 五、系统流程图与源程序 (3) 5.1 系统程序流程图 (3) 5.2 系统汇编源程序 (4) 六、系统功能分析与说明 (4) 6.1 MCS-51单片机结构和原理 (4) 6.2时钟电路 (7) 6.3复位电路 (8) 6.4键盘的工作原理 (9) 6.5独立式按键 (11) 6.6实训设备与元器件 (11) 6.7设计步骤 (12) 6.8电路板的制作 (12) 6.9系统连线说明 (13) 6.10系统PCB图设计 (14) 6.11系统功能分析与说明 (14) 七、设计体会 (15) 八、参考文献 (15)

一、设计题目 按键识别控制 二、设计内容与要求 用8031单片机控制用一键实现多功能按键识别。将开关SP1接P3.7,P1口接四个发光二极管。上电时,接P1.0 的发光二极管亮;按下开关SP1时,接P1.1 的发光二极管亮;再按下开关SP1时,接P1.2 的发光二极管亮;再按下开关SP1时,接P1.3 的发光二极管亮。再按下开关SP1时,接P1.0 的发光二极管亮,如此循环。 三、设计目的意义 3.1设计目的 (1)了解单片机的基本组成及功能 (2)通过最小应用系统实例了解单片机的基本工作过程 (3)掌握指令格式及表示方法 (4)掌握常用指令的功能及应用 (5)掌握汇编语言的基本结构 (6)了解汇编语言程序设计的基本方法和思路 (7)了解按键识别方法 3.2系统设计意义 (1)在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。 (2)完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。(3)完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。(4)进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。(5)通过单片机应用系统的设计将所学的知识融会贯通,锻炼独立设计、制作和调试单片机应用系统的能力;领会单片机应用系统的软、硬件调试方法和系统的研制开发过程,为进一步的科研实践活动打下坚实的基础。

实验5 小键盘按键识别实验

实验5 小键盘按键识别实验 实验目的: 掌握用软件方法识别行列式键盘的原理和方法 实验要求: 将小键盘的键号(S1-S16)用十六进制数0-F 在7段数码管上显示 分析实验设计思想; 我们如何确定小键盘上哪个键被按下了? 可以利用8255并行接口来进行确定,如果我们将8255的一个端口A 作为小键盘行值的输出端口,将8255的另一端口B 作为列值的输入端口。就可以完成对键盘按键的位置的确定了。原理如下: 键盘采用简单的线性结构,没有键闭合时,各位均处于高电平,当有一个键按下时,就使对应位接地而成为低电平,其他位仍为高电平。 程序清单及相关注释: .model small .386 data segment rowport dw 200h;以A 口作为行扫描线,应为输出 colport dw 201h;以B 口作为列检测线,应为输入 controlport dw 203h ;控制字写入端口地址 led_cs dw 210h ;led 灯片选地址 举例:如右图所示,如果开关0是闭合的,且第一列的电平为0,那么检测到第一行的端口状态就为低电平。如果4是闭合的,第一列的电平为0,那么第二行的端口状态就为0。就是采用此种方法来判定有那个按键被按下了。 扫描方法:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的。即在第0行接低电平时,看该列线是否为低电平。 然后依次给第1行,第2行,第3行赋低电平。分别检测该列线是否为低电平。

char db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h,77h,7ch,39h,5eh,79h,71h ;显示0-F16个数字的数码管编码 table dw 0fefeh ; dw 0fefdh dw 0fefbh dw 0fef7h dw 0fdfeh dw 0fdfdh dw 0fdfbh dw 0fdf7h dw 0fbfeh dw 0fbfdh dw 0fbfbh dw 0fbf7h dw 0f7feh dw 0f7fdh dw 0f7fbh dw 0f7f7h data ends code segment assume cs:code,ds:data beg: mov ax,data mov ds,ax mov dx,controlport ;8255 命令口 mov al,10000010h ;设置8255控制字:0方式A 口输出,B 口输入 out dx,al ;输出8255控制字 L1 : call key1 ;判断行线、列线状态 mov bh,ah ;AH =行线状态 mov bl,al ;AL =列线状态 call delay ;延时20-30ms call key1 ;再次判断行线、列线状态是否与第一次相同 cmp bl,al ;比较al 和bl 的值 jnz beg ;不相等说明此时又有新的按键按下则跳至beg cmp bh,ah ;比较bh ,ah 的值 jnz beg ;不相等则跳至beg mov ax,bx ;将当前的按键行列值状态赋给ax call disp ;调用程序查表得到按下去键的数码管编码 call delay ;延时20-30ms jmp L1 ;循环进行将小键盘输出到数码管显示 key1 proc mov ah,0feh ;从第0行开始 key2: mov al,ah mov dx,rowport ;8255 A 口作为扫描线 查询是哪行哪列的按键被按下了,0fe 表示第0行,0fd 表示第2 行,0fb 表示第3行,0f7表示第4行 同理也是具体哪一列的表示,4种组合成16个按键的具体位置

矩阵键盘原理与结构

矩阵键盘原理与结构 矩阵式结构的键盘识别要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 1确定矩阵式键盘上何键被按下介绍一种行扫描法。 行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 2确定矩阵式键盘上何键被按下介绍一种高低电平翻转法。 首先让P1口高四位为1,低四位为0,。若有按键按下,则高四位中会有一个1翻转为0,低四位不会变,此时即可确定被按下的键的行位置。

矩阵式键盘的按键识别方法

矩阵式键盘的按键识别方法 键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。具体的识别及编程方法如下所述。 矩阵式键盘的按键识别方法 确定矩阵式键盘上何键被按下介绍一种“行扫描法”。 行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 下面给出一个具体的例子: 8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。 检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,否则有键闭合。

按键控制键盘检测原理与应用

按键控制键盘检测原理与应用 一、任务目标: 认知目标 1、掌握按键分类及工作原理 2、掌握IF条件选择结构和使用方法 3、掌握循环结构和使用原理 4、掌握独立按键子函数的编写原理及方法 1、独立键盘 在简单的单片机应用系统中,往往只需要几个功能键就能满足要求,此时,可采用独立式按键结构。 独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O 口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图1.2.1所示。 独立式按键示意图 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。 程序开始,检测按键是否被按下,若按下,则移动机器人启动,未被按下,继续检测。这里将程序分成三个部分,分别是延时子函数、按键子函数、主函数。 延时子函数,通过参数t设置延时时间;按键模块子函数需用到延时函数,对按键进行消抖;主函数主要调用按键检测程序,实现对移动机器人的控制。程序流程图如图1.2.2所示

程序流程图 程序示例: 在编写程序开始的部分,将系统头文件“STC89C52RC.H”包含进来,对常用的变量类型进行宏定义,规划各函数和变量,对变量进行定义和初始化,对自定义子函数进行声明并添加相应标注,程序开始部分如下 sbit IN1=P1^0; sbit IN2=P1^1; Void key(); 编写主函数,在主函数中就是调用按键检测函数。 Void main() { key(); } 编写key()按键检测函数,按键按下,输出低电平,通过if语句检测低电平,延时10ms 后,再次检测,若检测为高电平,则表示为机械抖动,若检测到低电平表示按键按下。 Void key() { if(IN1==0) { delay_ms(10); if(IN1==0) { while(IN1==0); IN2=~IN2; } } } 在上面的程序中,就只有一个检查按键扫描的函数key(),key()函数是检查有没有按键

小键盘按键识别(微机原理课程设计)

微机原理与接口技术课程设计报告 专业: _____________________________ 班级: ____________________________ 姓名: ____________________________ 学号: ____________________________

小键盘按键识别 课题任务与要求 实验箱上有一个24 键小键盘,出厂时按键接点已经按图所示连接。小键盘有8根横向引出线。实验前将8根横向引出线与PALPA7相连,3根纵向引出线与PBA PB2相连,再从“I/O 口地址译码器”选择一个译码器输出连接到8255的片选端,做好上述连接之后,就构成了以8255 为核心的键盘输入电路要求: 在实际的自动控制系统中,键盘输入电路的作用是输入数据(0?9, A? F)或者输入控制信号(G, M P, R, W X, Y, S)。实现上述功能的核心程序是 “按键识别”。 本实验要求设计按键识别程序, 当按下小键盘上某一个键的时候, 主机屏幕显示闭合键的键名,按下小键盘“ R'键之后停止演示。 二.完成任务的方法或方案简介 本程序显示数字0 到9,刚刚开始提出两中解决方案一是用跳转法直接显示数值,二是用查找法间接显示数值, 本程序是用第一种方案, 虽然程序多了些,但直观容易理解, 故采纳第一种方案。 DISPLA 丫函数用来将BUFFER中的键值显示在数码管上。 设定A 口方式0输出,B 口方式0输入。 GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是 R,则AL赋值为FFH如果输入非法字符,则AL赋值为0AH 设定如果是R则退出程序? CHANG函数用来改变BUFFER中保存的键值,将BUFFER中的键值移位,最后一位加入AL 中的新键值。 CLOSEAL此函数用在退出程序时将数码管关闭? 以上是主题函数,在设计过程中还碰到了一些细节问题,例数码管的显示才用延迟20MS的

矩阵式键盘的按键识别方法

矩阵式键盘的按键识别方法 确定矩阵式键盘上何键被按下介绍一种“行扫描法”。 行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如上图所示键盘,介绍过程如下。 1、判断键盘中有无键按下将全部行线Y0-Y3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 下面给出一个具体的例子: 图仍如上所示。8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1. 4-P.17设置为输出线。4根行线和4根列线形成16个相交点。 1、检测当前是否有键被按下。检测的方法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3 为全“1”,则无键闭合,否则有键闭合。 2、去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。 3、若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出: P1.7 1 1 1 0 P1.6 1 1 0 1 P1.5 1 0 1 1 P1.4 0 1 1 1 在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值

相关文档
相关文档 最新文档