当前位置:文档之家› 键盘手

键盘手

键盘手

USB键盘驱动程序

/* * $Id: usbkbd.c,v 1.27 2001/12/27 10:37:41 vojtech Exp $ * * Copyright (c) 1999-2001 Vojtech Pavlik * * USB HIDBP Keyboard support */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic */ #include #include #include #include #include #include #include /* * Version Information */ #define DRIVER_VERSION "" #define DRIVER_AUTHOR "Vojtech Pavlik <>" #define DRIVER_DESC "USB HID Boot Protocol keyboard driver" #define DRIVER_LICENSE "GPL"

字符设备驱动程序

字符设备驱动程序 字符设备驱动程序与块设备不同。所涉及的键盘驱动、控制台显示驱动和串口驱动以及与这些驱动有关的接口、算法程序都紧密相关。他们共同协作实现控制台终端和串口终端功能。 下图反映了控制台键盘中断处理过程。 以上为总的处理流程,下面对每一个驱动分开分析。首先是键盘驱动。键盘驱动用汇编写的,比较难理解,牵涉内容较多,有键盘控制器804X的编程,还有扫描码(共3套,这里用第二套)和控制命令及控制序列(p209~210有讲解)。由于键盘从XT发展到AT到现在PS/2,USB,无线键盘,发展较快,驱动各有不同,此版本驱动为兼容XT,将扫描码映射为XT再处理,因此仅供参考。CNIX操作系统的键盘驱动实现为C语言,可读性更好。 键盘驱动 键盘驱动就是上图键盘硬件中断的过程。keyboard.S中的_keyboard_interrupt 函数为中断主流程,文件中其他函数均被其调用。

以上打星处为键盘驱动的核心,即主要处理过程,针对不同扫描码分别处理,并最终将转换后所得ASCII 码或控制序列放入控制台tty 结构的读缓冲队列read_q 中。 键处理程序跳转表为key_table ,根据扫描码调用不同处理程序,对于“普通键”,即只有一个字符返回且没有含义变化的键,调用do_self 函数。其他均为“特殊键”:1. crtrl 键的按下和释放 2. alt 键的按下和释放 3. shift 键的按下和释放 4. caps lock 键的按下和释放(释放直接返回,不作任何处理) 5. scroll lock 键的按下 6. num lock 的按下 7. 数字键盘的处理(包括alt-ctrl+delete 的处理,因为老式键盘delete 键在数字小键盘上。还包括对光标移动键的分别处理) 8. 功能键 (F1~F12)的处理 9. 减号的处理(老键盘’/’与’-’以0xe0加以区分,可能其中一键要按shift ) do_self 是最常用的流程,即跳转表中使用频率最高的流程:

检测到不兼容的键盘驱动程序。该对话框已被停用的解决方法

检测到不兼容的键盘驱动程序。该对话框已被停用的解决方法在 Windows XP 系统中单击语言栏的设置弹出“检测到不兼容的键盘驱动程序”的错误提示对话框,如遇到此问题的朋友可通过下面的方法来解决。 到一台正常 WindowsXP系统的机器,单击"开始”菜单中的“运行”命令 在“打开”框中键入“ regedit ”命令,单击“确定”按钮 打开“注册表编辑器”窗口,在左侧窗口(注册表树)定位到以下分支 Control\Keyboard Layouts 右击“ Keyboard Layouts ”主键,打开的快捷 菜单单击“导出”命令 选择要导出注册表文件的位置,并在文件名框 中输入任意名称,单击“保存”按钮 将生成的reg 文件拷贝到存储设备里,在出问 题的机器上双击该注册表文件,导入注册表信息

在 Windows XP 系统中单击语言栏的设置弹出“检测到不兼容的键盘驱动程序”的错误提示对话框,如遇到此问题的朋友可通过下面的方法来解决。 到一台正常 WindowsXP系统的机器,单击"开始”菜单中的“运行”命令 在“打开”框中键入“ regedit ”命令,单击“确定”按钮 打开“注册表编辑器”窗口,在左侧窗口(注册表树)定位到以下分支 Control\Keyboard Layouts 右击“ Keyboard Layouts ”主键,打开的快捷 菜单单击“导出”命令 选择要导出注册表文件的位置,并在文件名框 中输入任意名称,单击“保存”按钮 将生成的reg 文件拷贝到存储设备里,在出问 题的机器上双击该注册表文件,导入注册表信息

在 Windows XP 系统中单击语言栏的设置弹出“检测到不兼容的键盘驱动程序”的错误提示对话框,如遇到此问题的朋友可通过下面的方法来解决。 到一台正常 WindowsXP系统的机器,单击"开始”菜单中的“运行”命令 在“打开”框中键入“ regedit ”命令,单击“确定”按钮 打开“注册表编辑器”窗口,在左侧窗口(注册表树)定位到以下分支 Control\Keyboard Layouts 右击“ Keyboard Layouts ”主键,打开的快捷 菜单单击“导出”命令 选择要导出注册表文件的位置,并在文件名框 中输入任意名称,单击“保存”按钮 将生成的reg 文件拷贝到存储设备里,在出问 题的机器上双击该注册表文件,导入注册表信息

键盘驱动程序程鼐

EDA技术课程设计任务书 班级:姓名:程鼐学号: 设计题目:键盘驱动程序 一、设计目的 进一步巩固理论知识,培养所学理论知识在实际中的应用能力;掌握EDA设计的一般方法;熟悉一种EDA软件,掌握一般EDA系统的调试方法;利用EDA软件设计一个电子技术综合问题,培养VHDL编程、书写技术报告的能力。为以后进行工程实际问题的研究打下设计基础。 二、设计任务 利用外接键盘实现键盘按键的选择,在8位动态七段数码管上实现按键扫描码的显示,在16X16点阵上实现按键字符的显示。 三、设计要求 (1)通过对相应文献的收集、分析以及总结,给出相应课题的背景、意义及现状研究分析。(2)通过课题设计,掌握计算机组成原理的分析方法和设计方法。 (3)学习按要求编写课程设计报告书,能正确阐述设计和实验结果。 (4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以及实现,给出个人分析、设计以及实现。 四、设计时间安排 查找相关资料(1天)、设计并绘制系统原理图(2天)、编写VHDL程序(2天)、调试(2天)、编写设计报告(2天)和答辩(1天)。 五、主要参考文献 [1] 江国强编著. EDA技术与实用(第三版). 北京:电子工业出版社,2011. [2] 曹昕燕,周凤臣.EDA技术实验与课程设计.北京:清华大学出版社,2006.5 [3] 阎石主编.数字电子技术基础.北京:高等教育出版社,2003. [4] Mark Zwolinski. Digital System Design with VHDL.北京:电子工业出版社,2008 [5] Alan B. Marcovitz Introduction to logic Design.北京:电子工业出版社,2003 指导教师签字:年月日

4×5矩阵键盘驱动程序

4×5矩阵键盘驱动程序 一、工作原理及接口电路 4×5矩阵键盘有4条列线,5条行线共20个按键。每个按键对应不同键值,键盘扫描采用外部中断扫描方式,本系统中键盘为无源结构,键盘工作时不依靠任何外部电源。4×5矩阵键盘结构图如图2-10 所示。 图2-10 4×5矩阵键盘结构图 1)4×5矩阵键盘结构及按键抖动消除 当键盘中按键数量较多时为减少I/O口的占用,通常将按键排列成矩阵形式,如图2-12所示。在矩阵式键盘中,每条行线和列线在交叉处不直接连通,而是通过一个机械弹性开关加以连接。这样5条列线(R0~R4)和4条行线(L0~L3)就可以构成20个按键的矩阵键盘。键盘采用了无源结构,工作是不依靠任何外部电源。 由于机械弹性开关的机械触点的弹性作用,一个按键开关在闭合时并不会马上稳定的闭合,在断开时也不会马上断开,因而机械开关在闭合及断开瞬间均伴有一连串的抖动,如图2-11所示。

图2-11 按键时的抖动 抖动的时间长短由按键开关机械特性及按键的人为因素决定,一般为5ms~20ms。按键抖动如果处理不当会引起一次按键被误处理多次,所以消除抖动是必要的。消除抖动的有硬件处理和软件处理两种方法。当按键较多一般采用软件消抖方式。软件消抖原理为当检测出按键闭合后执行一个延时程序(产生5ms~20ms的延时),待前沿抖动消失后再次检测按键的状态,如果按键仍保持闭合状态则可确认为有键按下。当检测到按键释放并执行延时程序,待后沿抖动消失后才转入按键的处理程序。 1)矩阵键盘的工作原理 从4×5矩阵键盘的4条列线和5条行线分别引出9条端线接于单片机的9个I/O 口,由于键盘采用了无源结构所以行列线的电平由单片机I/O口的电平决定。进入按键处理程序后先使4条列线全为低电平,5条行线全为高电平,为读行线状态做准备,没有按键时这种状态不会被改变。当键盘上的某个按键闭合时,则该键所对应的行线和列线被短路。例如:6号键被按下时列线L2与行线R1被短路,此时行线R1电平被列线L2拉低,由原来的高电平变为低电平而其它行线电平依然不变,为低电平。此时单片机可读得行线状态进而判断按键所在行并记录下行号。之后使得4条列线全为高电平,5条行线全为低电平,为读列线状态做准备。同理6号键被按下时列线L2与行线R1被短路,此时列线L2电平被行线R1拉低,由原来的高电平变为低电平而其它行线电平依然不变,为低电平。此时单片机可读得列线状态进而判断按键所在列并记录下列号。然后按一定的按键编码规则可计算出6号键的键值。 2)键盘扫描方式 键盘扫描方式一般有三种:循环扫描方式,定时扫描方式,外部中断扫描方式。循环扫描方式需要不停地扫描键盘,影响其它功能执行工作效率低。定时扫描方式是利用单片机内部的定时器,产生一个适当时间的定时中断,单片机响应中断时对键盘进行扫描取键值过程,但是这种扫描方式不管键盘上是不是有键闭合单片机总是定时地扫描工作效率还是不高。外部中断扫描方式是只在键盘上有

文字服务和输入语言检测到不兼容的键盘驱动程序该对话框已被停用

1、点击“开始”,打开“运行”,输入:CTFMON.EXE确定; 2、在“运行”里输入:MSCONFIG确定,点“启动”把:CTFMON勾打上;

如果不能解决,用下面的方法: 鼠标右键建立个本文文档把下面内容复制进去 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000404] "Layout File"="KBDUS.DLL" "Layout Text"="中文 (繁体) - 美式键盘" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5065" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000409] "Layout File"="KBDUS.DLL"

"Layout Text"="美国英语" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5000" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000411] "Layout File"="KBDJPN.DLL" "Layout Text"="日语" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5061" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000809] "Layout Text"="英国" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5025" "Layout File"="KBDUK.DLL" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E0010411] "Ime File"="imjp81.ime" "Layout File"="Kbdjpn.dll" "Layout Text"="日语输入系统 (MS-IME2002)" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5062" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E0010804] "Layout File"="KBDUS.DLL" "Layout Text"="中文 (简体) - 全拼" "IME File"="winpy.ime" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5073"

单片机系统中PS2键盘驱动程序设计

单片机系统中PS/2键盘驱动程序设计 摘要分析PS/2协议;介绍PS/2标准健盘的第二套扫描码和命令集,并给出在单片机系统中支持PS/2健盘的硬件连接方式和利用Keil C51语言实现的驱动程序设计及部分代码。该驱动程序可以方便地移植到其他单片机或嵌入式系统中。关健词 PS/2协议 PS/2健盘单片机驱动程序 在单片机系统中,经常使用的键盘都是专用键盘。这类键盘都是单独设计制作的,成本高,连线多,且可靠性不高。这些问题在那些要求键盘按键较多的应用系统中显得更加突出。与此相比,在 PC系统中广泛使用的PS/2键盘具有价格低、通用可靠,且使用的连线少(仅使用2根信号线)的特点,并可满足多数系统的要求。因此,在单片机系统中应用PS/2键盘是一种很好的选择。 本文在分析PS/2协议和PS/2键盘工作原理与特点的基础上,给出在AT89C51单片机上实现对PS/2键盘支持的硬件连接方法以及驱动程序的设计实现。 1 PS/2协议 现在PC机广泛采用的PS/2接口为mini - DIN 6引脚的连接器。其引脚如图1所示。 740)this.width=740" border=undefined> PS/2设备有主从之分,主设备采用female插座,从设备采用male插座。现在广泛使用的PS/2键盘鼠标均工作在从设备方式下。PS/2接口的时钟与数据线都是集电 极开路结构的,必须外接上拉电阻。一般上拉电阻设置在主设备中。主从设备之间数据通信采用双向同步串行方式传输,时钟信号由从设备产生。 (1)从设备到主设备的通信 当从设备向主设备发送数据时,首先会检查时钟线,以确认时钟线是否是高电平。如果是高电平,从设备就可以开始传输数据;否则,从设备要等待获得总线的控制权,才能开始传输数据。传输的每一帧由11位组成,发送时序及每一位的含义如图2所示。

实现了多键齐按和重复按键的嵌入式系统键盘驱动设计

实现了多键齐按和重复按键的嵌入式系统键盘驱动设计 1 键盘驱动程序的设计随着电子信息技术飞速发展,嵌入式系统构成的各种设备得到了广泛的应用,嵌入式Linux是一种开放源码、软实时、多任务的操作系统,是开发嵌入式产品的优秀操作系统平台,其中键盘是人机界面中人类监控计算机重要数据输入设备。实现键盘有两种方法:一种是采用现有的一些芯片实现键盘扫描;二是用软件实现键盘扫描。目前许多芯片可用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本,而只需很少的CPU 开销。嵌入式控制器的功能很强,可以充分利用这一资源。本课题提出的键盘方案是以嵌入式Linux和PXA255为软硬件平台,通过测试,表明其具有良好的稳定性和实时性。 2 矩阵式键盘的结构与工作原理本课题采用矩阵键盘,如图1所示。四根行线四根列线组成4 *4矩阵键盘,分别用CPU 的4个GPIO口。当有键按下,某个列GPI O 口电平被下拉从而产生下降沿,触发中断。其中按键行阵列必须提供上拉信号,列阵列加二极管,防止瞬间电流过大对GPI O口造成冲击。 图1 矩阵键盘原理图。 3 Linux键盘驱动简介在Linux中,键盘驱动被划分成两层来实现。上层是一个通用键盘抽象层,下层则是硬件处理层,主要对硬件进行直接的操作。键盘驱动程序上层公共部分在driver /keyboard 。c里。文件中最重要的是内核用EXPORT _SYM BOL这个宏导出的handle_scancode函数。在这个文件中还定义了其它的几个回调函数,它们由键盘驱动程序中上层公共部分调用,并且由底层硬件处理函数实现。键盘驱动程序的底层硬件处理部分则根据不同硬件有不同实现。 4 键盘驱动程序的实现4.1 宏定义module init和module exit通过宏定义module init和module exit可以看出,驱动程序的入口从kd_ctrl_init()开始。当内核模块加载的时候,默认调用module_ i nit(kd_c trl_init),在kd_ctr l_ i nit()中将完成一些初始化工作,主要如下:

键盘解码程序

PS2键盘解码程序 实测可以使用 但一直搞不懂如何写入键盘。 就是不知道如何通过单片机控制键盘的Caps Lock 、Num Lock 灯的亮灭,希望大虾指点指点。。。感谢!! =====================================C文件======================================================== #include #include "scancodes.h" #include "ps2kbd.h" #include "delay.h" //#include "LCD1602.h" /*----------------------------------------------- 名称:PS2键盘驱动程序 日期:2010.11 修改:无 内容:通过单片机读/写PS2键盘 备注:本程序需使用外部中断口 ------------------------------------------------*/ //---------IO引脚宏定义---------// sbit Key_Data = P3^0 ; //定义Keyboard引脚 sbit Key_CLK = P3^2; //使用中断 //-----结构体------// //--标识特殊按键---// static struct key_sign { char Shift:1; //上档键 char CapsLock:1; //大小写 char NumLock:1; //小键盘锁 }Button; //-----标志----//

单片机系统中ps2键盘驱动程序的设计

在单片机系统中,经常使用的键盘都是专用键盘.此类键盘为单独设计制作的,成本高、使用硬件连接线多,且可靠性不高,这一状况在那些要求键盘按键较多的应用系统中更为突出.与此相比,在PC系统中广泛使用PS/2键盘具有价格低、通用可靠,且使用连接线少(仅使用2根信号线)的特点,并可满足多种系统的要求.因此在单片机系统中应用PS/2键盘是一种很好的选择. 文中在介绍PS/2协议和PS/2键盘工作原理与特点的基础上,给出了一个在单片机上实现对PS/2键盘支持的硬件连接与驱动程序设计实现.该 设计实现了在单片机系统中对PS/2标准104键盘按键输入的支持.使用Keil C51开发的驱动程序接口和库函数可以方便地移植到其他单片机或嵌入式系统中.所有程序在Keil uVision2上编译通过,在单片机 AT89C51上测试通过. 1 PS/2协议 目前,PC机广泛采用的PS/2接口为mini-DIN 6pin的连接器,如图1所示. PS/2设备有主从之分,主设备采用Female插座,从设备采用Male插头.现在广泛使用的PS/2键盘鼠标均在从设备方式下工作.PS/2接口的时钟 与数据线都是集电极开路结构,必须外接上拉电阻(一般上拉电阻设置在主设备中).主从设备之间数据通信采用双向同步串行方式传输,时钟信号由从设备产生. 1.1 从设备到主设备的通信 当从设备向主设备发送数据时,首先检查时钟线,以确认时钟线是否为高电平.如果是高电平,从设备就可以开始传输数据;反之,从设备要等待获得总线的控制权,才能开始传输数据.传输的每一帧由11位组成,发送时序及每一位的含义如图2所示. 每一帧数据中开始位总是为0,数据校验采用奇校验方式,停止位始终为1.从设备到主设备通信时,从设备总是在时钟线为高时改变数据线状态,主设备在时钟下降沿读人数据线状态. 1.2 主设备到从设备的通信 主设备与从设备进行通信时,主设备首先将时钟线和数据线设置为“请求发送”状态,具体方式为:首先下拉时钟线至少100us抑制通信,然后下拉数据线“请求发送”,最后释放时钟线.在此过程中,从设备在不超过10us 的间隔内必须检查这个状态,当设备检测到这个状态时,它将开始产生时钟信号.此时数据传输的每一帧由12

键盘显示电路驱动程序设计

实验四键盘显示电路驱动程序设计 班级:09电信一班姓名:叶晓伟学号:20094081007 实验目的 1、了解ARMC语言程序的结构特点 2、了解ARMC语言程序的编写方法 3、掌握用ARM编写HD7279控制程序方法 实验仪器设备及软件 ARM实验箱,计算机,ADS程序开发软件 实验原理 HD7279A 专用键盘显示电路,真正的单片LED数码管显示和键盘接口芯片,无需外围电路,只需要外接少量的电阻等,即可构成完善的显示、键盘接口电路。而与CPU的接口采用SPI串行接口方式,使用方便。可方便的构成64按键,8位数码显示电路(共阴极结构) HD7279A内部含有译码器,可直接受BCD码或16进制数据或七段显示码数据。此外,还具有多种控制指令,如消隐,闪烁,左移,右移,段寻址等。具有片选信号,可方便地实现多于8位的显示或多于64键的键盘接口。 HD7279的纯指令: 1、复位指令(A4H) 当HD7279A收到该指令后,将所有显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。执行后,芯片的状态与上电时一样。 2、测试指令(BFH) 该指令使所有的LED全部点亮,并处于闪烁状态,主要用于测试(检查LED是否坏) 3、左移指令(A1H) 使所有显示左移一位,消隐及闪烁属性不移位,最右边一位为空(暗)。如: 4、右移指令(A0H) 使所有显示右移一位,消隐及闪烁属性不移位,最左边一位为空(暗)。如: 5、循环左移指令(A3H) 使所有显示右移一位,消隐及闪烁属性不移位,最左边一位移到最右边。如: 6、循环右移指令(A2H) 使所有显示右移一位,消隐及闪烁属性不移位,最右边一位移到最左边。如: HD7279带数据的指令: 1、下载数据按方式0译码 命令由两字节构成,前半部为指令。a2,a1,a0为位地址,D3-D0为数据,译码值如图所示。

操作系统课程设计 键盘驱动

一、实验选题 (1) 二、模块整体功能介绍及主要目标 (1) 三、头文件的分析 (2) 四、数据结构的分析 (2) 1、数组tty_table[] (2) 2、tty_struct 数据结构 (2) 3、tty 等待队列数据结构 (3) 4、各个数据结构间的关系图 (3) 五、函数的分析 (4) 1、采用中断驱动的I / O设备键盘的循环周期 (4) 2、键盘中断处理程序 (5) 3、ctrl和alt键的处理 (7) 4、caps、scroll、num键的处理 (8) 5、数字小键盘的处理 (11) 6、减号键的处理 (13) 7、功能键的处理 (14) 8、do_self的处理 (15) 9、左,右shift键的处理 (16) 六、分析体会及亮点说明 (16) 七、参考文献 (20)

一、实验选题 实验题目是:Linux0.11字符设备驱动中的键盘驱动程序源代码分析,这部分涉及到操作系统的中断、I/O应用接口、I/O子系统等相关知识,程序源代码参考Linux0.11中kernel目录下的keyboard.s文件。 二、模块整体功能介绍及主要目标 该模块键盘中断处理程序 keyboard.s 主要用于读入用户键入的字符并放入read_q 缓冲队列中。其具体实现机制是:当用户在键盘上键入了一个字符时,会引起键盘中断响应(中断请求信号IRQ1,对应中断号INT 33),此时键盘中断处理程序就会从键盘控制器读入对应的键盘扫描码,然后根据使用的键盘扫描码映射表译成相应字符,放入tty 读队列read_q 中。然后调用中断处理程序的C函数do_tty_interrupt(),它又直接调用行规则函数copy_to_cooked()对该字符进行过滤处理,并放入tty 辅助队列secondary 中,同时把该字符放入tty 写队列write_q 中,并调用写控制台函数 con_write()。此时如果该终端的回显(echo)属性是设置的,则该字符会显示到屏幕上。do_tty_interrupt()和copy_to_cooked () 函数在tty_io.c 中实现。用图描述如下:

打开输入法设置时“检测到不兼容的键盘驱动程序。该对话框已被停用”的解决方法

打开输入法设置时“检测到不兼容的键盘驱动程序。该对话框已被停用”的解决方法 方法如下 方法一:从刚装好XP或系统正常的电脑里,打开注册表,将 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts] 导出为一个文件,然后拷到你的电脑里双击导入即可恢复正常状态 方法二: 将下面的文本复制到记事本里,保存为后缀名为.reg的文件,双击导入也可Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000402] "Layout Text"="保加利亚语" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5053" "Layout File"="KBDBU.DLL" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000404] "Layout File"="KBDUS.DLL" "Layout Text"="中文 (繁体) - 美式键盘" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5065" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405] "Layout Text"="捷克语" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5031" "Layout File"="KBDCZ.DLL" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000406] "Layout Text"="丹麦语" "Layout Display Name"="@%SystemRoot%\\system32\\input.dll,-5007" "Layout File"="KBDDA.DLL" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000407] "Layout Text"="德语"

基于WINDOWSDDK的USB键盘驱动开发

基于WINDOWSDDK的USB键盘驱动开发 【摘要】USB接口具有方便快速等优点,已经发展成为一种比较普遍的计算机与外设的接口。基于微软windows系统DDK,本文介绍了一种非标准USB 键盘的windows设备驱动程序的开发过程与方法。 【关键词】设备驱动;驱动开发包;非标准键盘 1.引言 USB总线的成功关键是使用户感到了使用USB设备的方便。即插即用(PnP)概念的使用使某些硬件的安装过程得到了简化。USB规范中指出,适合迁移到USB1.1上的硬件限定于那些低速到中速的外设,包括键盘,鼠标等。即这些设备的数据传输速率低于12Mb/sec,并且能通过单一的PC接口被系统软件识别。现在标准的usb键盘设备只需要遵循一些hid设备的协议就可以被windows操作系统自动识别无需设备制造商开发驱动程序,但有些键盘带有特殊功能,所以需要设备驱动程序。 2.Usb软件系统简介 USB设备对于USB系统来说是一个端点的集合,端点被分成组,一组端点实现一个接口,如图1所示。设备端点和主机软件之间利用管道进行数据交互。设备驱动程序就是通过这些接口和管道与设备进行通信的。 USB数据传输就是指发生在主机软件和USB设备上特定端点(endpoint)之间的数据交互,一个设备可以具有若干管道(pipe)。一般情况下,一个管道中数据传输与其他管道中的数据传输是相互独立的。这种发生在管道中的数据流动共有4种基本类型: (1)控制传输,一般发生在设备枚举阶段 (2)块传输,一般用于usb disk (3)中断传输,一般用于键盘鼠标类设备 (4)流传输,一般用于语音视频流设备 USB设备驱动程序都必须使用这些管道和接口来管理设备,而不是直接通过内存或I/O端口来存取来管理。 3.Windows驱动程序的工作原理 3.1 Windows驱动程序基本架构

单片机C语言键盘驱动

键盘驱动 指提供一些函数给任务调用,获取按键信息,或读取按键值。 定义一个头文档 ,描述可用函数,如下: #ifndef _KEY_H_ //防止重复引用该文档,如果没有定义过符号 _KEY_H_,则编译下面语句 #define _KEY_H_ //只要引用过一次,即 #include ,则定义符号 _KEY_H_ unsigned char keyHit( void ); //如果按键,则返回非0,否则返回0 unsigned char keyGet( void ); //读取按键值,如果没有按键则等待到按键为止 void keyPut( unsigned char ucKeyVal ); //保存按键值ucKeyVal到按键缓冲队列末 void keyBack( unsigned char ucKeyVal ); //退回键值ucKeyVal到按键缓冲队列首 #endif 定义函数体文档 KEY.C,如下: #include “key.h” #define KeyBufSize 16 //定义按键缓冲队列字节数 unsigned char KeyBuf[ KeyBufSize ]; //定义一个无符号字符数组作为按键缓冲队列。该队列为先进 //先出,循环存取,下标从0到 KeyBufSize-1 unsigned char KeyBufWp=0; //作为数组下标变量,记录存入位置 unsigned char KeyBufRp=0; //作为数组下标变量,记录读出位置 //如果存入位置与读出位置相同,则表明队列中无按键数据 unsigned char keyHit( void ) { if( KeyBufWp == KeyBufRp ) return( 0 ); else return( 1 ); } unsigned char keyGet( void ) { unsigned char retVal; //暂存读出键值 while( keyHit()==0 ); //等待按键,因为函数keyHit()的返回值为 0 表示无按键 retVal = KeyBuf[ KeyBufRp ]; //从数组中读出键值 if( ++KeyBufRp >= KeyBufSize ) KeyBufRp=0; //读位置加1,超出队列则循环回初始位置return( retVal ); } void keyPut( unsigned char ucKeyVal ) { KeyBuf[ KeyBufWp ] = ucKeyVal; //键值存入数组 if( ++KeyBufWp >= KeyBufSize ) KeyBufWp=0; //存入位置加1,超出队列则循环回初始位置} /***************************************************************************************** 由于某种原因,读出的按键,没有用,但其它任务要用该按键,但传送又不方便。此时可以退回按键队列。就如取错了信件,有必要退回一样 ******************************************************************************************/ void keyBack( unsigned char ucKeyVal ) { /* 如果KeyBufRp=0; 减1后则为FFH,大于KeyBufSize,即从数组头退回到数组尾。或者由于干扰使得KeyBufRp超出队列位置,也要调整回到正常位置,

相关主题