ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:196KB ,
资源ID:3716268      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3716268.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(仿USB键盘文件植入器模拟人工按键.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

仿USB键盘文件植入器模拟人工按键.docx

1、仿USB键盘文件植入器模拟人工按键编号: 嵌入式系统综合实训说明书题 目: 仿USB键盘文件植入器 院 (系): 信息与通信学院 专 业: 电子信息工程 学生姓名: 万玉 学 号: 1161170125 指导教师: 叶金才 2015 年 1 月 11 日摘 要这次设计任务所做的工作就是实现模拟人工按键,将开发板接上位机后,不用板子上的按键,直接用程序产生键盘码,计算机收到USB键盘的键码,会执行相应的功能。具体的动作是打开计算机的命令行,在命令行里面运行记事本,并新建一个a.txt记事本文件,并向该文件录入若干的英文字符。运行命令行通过键盘操作是 win+R -cmd-notepad a.tx

2、t-enter-录入英文字符。最后,会在本文介绍如何实现向电脑发送WIN+R这样的组合键键码,可以类似去模拟ALT+F4,SHIFT+1之类的按键。关键词:ARM;USB 键盘;模拟人工按键;USB HID协议;组合键AbstractThe design task is to realize the simulation of artificial work key, development board connected with a host computer, no board of the key, the direct use of program generation keyboa

3、rd code, computer received USB keyboard key code, executes the corresponding function. The specific action is to open the computer command line, the command line which run Notepad, and a new a.txt notepad file, and some to the file entry English character. Run command lines through the keyboard oper

4、ation is win+R - cmd- Notepad a.txt- enter- input English character.最后,会在本文介绍如何实现向电脑发送WIN+R这样的组合键键码,可以类似去模拟ALT+F4,SHIFT+1之类的按键。Finally, in this paper introduces how to realize the computer to send WIN+R this combination key code, can be similar to the simulated ALT+F4, SHIFT+1 and the like button.Ke

5、ywords: ARM; USB keyboard keys; artificial simulation; USB HID protocol; key combination引言 11 设计软件基础知识21.1 C编译器KEIL介绍 21.2 ARM相关知识21.3 USB-HID简介22 模拟人工按键设计32.1 程序设计的任务要求 32.2 程序的设计思路和想法 32.3 报告描述符 32.4 普通按键程序设计42.5 特殊(功能)按键程序设计 63 功能程序设计73.1 程序总流程图 73.2 开始程序的修改84 结论 10谢辞11参考文献12附录13引言 USB,是英文Univers

6、al Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。USB是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。USB-HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。交换的数据存储在称为报表(report)的结构内,设备的固件必须支持HID报表的格式。主机

7、在控制与中断传输中传送与要求报表,来传送与接收数据。报表的格式非常有弹性,可以处理任何类别的数据。键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。起初这类键盘多用于品牌机,如HP、联想等品牌机都率先采用了这类键盘,受到广泛的好评,并曾一度被视为品牌机的特色。随着时间的推移,渐渐的市场上也出现独立的具有各种快捷功能的产品单独出售,并带有专用的驱动和设定软件,在兼容机上也能实现个性化的操作。1 设计软件基础知识 包括keil uVision4,ARM核心知识,USB-HID简介。1.1 C编译器Keil介绍Keil C51

8、是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组

9、件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。1.2 ARM核心相关知识 2012年3月14日,中国上海ARM公司今天发布了一款拥有全球最低功耗效率的微处理器ARM Cortex-M0+处理器

10、。支持ARMv6M 指令集,该款经过优化的Cortex-M0+处理器可针对家用电器、白色商品、医疗监控、电子测量、照明设备以及功耗与汽车控制器件等各种广泛应用的智能传感器与智能控制系统,提供超低功耗、低成本微控制器(MCU)。1.3 USB-HID简介是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。交换的数据存储在称为报表(report)的结构内,设备的固件必须支持HID报表的格式。主机在控制与中断传输中传送与要求报表,来传送与接收数据

11、。报表的格式非常有弹性,可以处理任何类别的数据。每个USB只有一个主机。在USB中,USB HOST是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。USB报告描述符(Report Descriptor)是HID设备中的一个描述符,它是比较复杂的一个描述符。USB-HID设备是通过报告来给传送数据的,报告有输入报告和输出报告。输入报告是USB设备发送给主机的,例如USB鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给USB设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是一个数据

12、包,里面包含的是所要传送的数据。输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点0发送,当有中断输出端点时,通过中断输出端点发出。而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USB HOST可以分析出报告里面的数据所表示的意思。它通过控制输入端点0返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的报告通过报告ID来识别,报告ID在报告最前面,即第一个字节。当报告描述符中没有规定报告ID时,报告中就没有ID字段,开始就是数据。2 模拟人工按键

13、设计包括设计要求,普通按键的程序设计,组合键(功能键组合)的程序设计。2.1程序设计的任务要求模拟人工按键(默认路径),win+r(组合键,Win键即window键) 输入cmd 回车 输入notepad a.txt 回车 回车(由于第一次在默认路径C:UsersAdministrator新建文件,所以对弹出的是否创建文件的提示框按一次回车) 输入abcd1234 按下Ctrl+S(组合键,对记事本进行保存的快捷键)进行保存 完成 。2.2程序的设计思路和想法开始前应该把Win+R和Ctrl+S这两个组合键环节分别定成一个程序的开始和结束,而cmd,回车,notepad空格a.txt,回车,回

14、车,abcd1234这个单个按键的环节定为中间环节,整体的思路就是这样。由于一开始通过例程知道单个按键比较容易实现,于是可以是先做了单个按键的数组,再去做组合键,做完之后回头总结,这样的想法确实是对的,遵循先易后难得原则,而且也可以从简单的实现方法中去发现组合键的做法。在设计组合键的时候最难得莫过于window键都按不下去,通过查询和阅读了很多的资料后,总结了win键和类似的功能键如何实现,然后在不断的尝试中发现组合键的实现方法,后面会做详细的介绍。2.3报告描述符在上面的USB-HID简介中已经介绍了报告描述符。报告描述符是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USB HO

15、ST可以分析出报告里面的数据所表示的意思。所以有必要解释一下报告描述符。const uint8_t g_HID_au8KeyboardReportDescriptor = 0x05, 0x01, / Usage Page (Generic Desktop) /表示用途页为通用桌面设备 0x09, 0x06, / Usage (Keyboard) /表示用途为键盘 0xA1, 0x01, / Collection (Application) /表示应用集合,必须以END_COLLECTION来结束它 0x05, 0x07, / Usage Page (Key Code) /表示用途页为按键 0x

16、19, 0xE0, / Usage Minimum (224) /用途最小值,这里为左Ctrl键 0x29, 0xE7, / Usage Maximum (231) /用途最大值,这里为右GUI,即window键 0x15, 0x00, / Logical Minimum (0) /逻辑最小值为0 0x25, 0x01, / Logical Maximum (1) /逻辑最大值1 0x75, 0x01, / Report Size (1) /报告大小(即这个字段的宽度)为1bit 0x95, 0x08, / Report Count(8) /报告的个数为8,即总共有8个bits 0x81, 0

17、x02, / Input (Data, Variable, Absolute) ;Modifier byte /输入用,变量,值,绝对值2.4普通按键程序设计由于例程里是扫描按键,然后对按下的按键赋上对应的键值,可以实现按下按键,在TXT里得到对应的字母。首先,任务的要求是模拟人工按键,在原USB键盘程序上进行修改,所以只需要向上位机发送我们想按下的按键键值的报告,并不用人亲自去按键,所以在这里用不到键盘扫描。主要是明白报告描述符和报告。接下来根据USB HID to PS/2 Scan Code Translation Table去找到自己想要的键码,对应的十六进制,只用看HID Usage

18、 ID这一列。例如,a对应的键值为0x04,b为0x05,0x03为没定义。所以对应之前设计思路中的中间环节,即为普通按键环节。cmd,回车,notepad空格a.txt,回车,回车,abcd1234,均为单个的按键。于是有了下面定义的数组:a31=0x00,0x00,0x00,0x00,0x03,0x0D,0x04,0x25,0x0E,0x0F,0x14, 0x05,0x10,0x01,0x04,0x29,0x01,0x34,0x14,0x18,0x14,0x25,0x025,0x01,0x02,0x03,0x04,0x1B,0x1C,0x1D,0x1E;需要解释的是,在实验的过程中,在反复

19、的尝试后,发现前几个数组没办法执行,于是可以加入了几个空的定义将其放空,几个空的定义执行后再执行想要的功能。另外,在程序里有这么一句:buf2=0x03+amyi,所以在上述的数组中就将其减了0x03,在本文后面附录的USB HID to PS/2 Scan Code Translation Table中,可以简单地看成想要的那个键值往上数三个就是需要的键值。附录会给出键值表图。这里给出一些需要用到的键值。表2.1Key NameHID Usage PageHID Usage IDErorrUndefined0703a A0704c C0706d D0707m M0710n N0711o O0

20、712p P0713r R0715t T0717x X071B.0737Return0728Space0739所以设计要求中的依次输c,m,d,回车,空格都可以找到对应的键码,回车这类不算是功能按键,也算是普通按键,一样可以找到对应的键码,附录会放上USB HID to PS/2 Scan Code Translation Table,于是,一开始普通按键环节的程序设计如下。 void HID_SetInReport() uint8_t *buf; Static int myi = 0; inta31=0x00,0x00,0x00,0x00,0x03,0x0D,0x04,0x25,0x0E,0

21、x0F,0x14, 0x05,0x10,0x01,0x04,0x29,0x01,0x34,0x14,0x18,0x14,0x25,0x025,0x01,0x02,0x03,0x04,0x1B,0x1C,0x1D,0x1E;if(g_HID_sDevice.isReportReady) return; / check if previous report done buf = g_HID_sDevice.pu8Report;/ update new report dataIf ( myi31 ) DrvSYS_Delay(250000); buf2=0x03+amyi; /output myi

22、+; else buf2=0x03;这段程序可以看出,每次进来可以自动加一,并且按照自己定义的数组去给buf2一个值,所以可以将想要输出的字母顺序依次给数组里的每个元素。这样会向上位机报告哪些按键被按下,于是可以实现普通按键的设计。2.5特殊(功能)按键程序设计这部分最难解决的是如何将两个键位同时按下,通过上面的分析,可以知道如何报告单个按键按下的情况给上位机,但是如何按下一个键不放,然后去按下另个键呢?如果把win和R键的键值一起放到buf2里,可以肯定的是,这是不可能实现的。在多次尝试未果之后,可以试着把win键的键值放入到buf2去试试,看能不能实现这个功能键,最后也可以发现这是不可能实

23、现的。于是通过查询大量的资料,以及一些网上参考的资料。通过分析,有了如下的总结,这个报告中只有一个报告,所以没有报告ID,因此返回的都是实际使用的数据。总共有8字节输入,1字节输出。其中输入的第一字节用表示特殊按键,第二字节保留,后面的六字节为普通按键。在附录中有图片,这里简单解释下,总结如下。如果想只按下win键,则返回 08 00 00 00 00 00 00 00(十六进制),如果想只按下r键,则返回 00 00 15 00 00 00 00 00 , 如果想win+r按下,则返回 08 00 15 00 00 00 00 00 ,如果想全部按键释放,则返回 00 00 00 00 00

24、 00 00 00 。这些数据(即报告)都是通过中断端点返回的。键一共有八个字节,即一起发送要发八个字节的数据,第1个字节是八个控制键,第2个字节是保留,第三至第八个字节为普通按键键值,没有固定位置,只需要往上填上HID Usage Tables上的键值,系统即会确认为该键按下。而功能(特殊)按键实际上为键盘的八个控制键,包括:左/右CTL,在/右ALT,在/右SHIFT,左/右WIN键盘。一开始以为在USB HID to PS/2 Scan Code Translation Table中的left GUI的键值为0xE7,最后明白上述的原理,也查询了资料,最后结合查询的资料,总结出来的就是b

25、uf0能表示功能键,buf1保留字节,buf2到buf7为普通按键。所以特殊按键的开始环节部分为 if (myi 5 ) DrvSYS_Delay(250000); buf0=0x08; / 按下win键 buf3=0x15; / 按下R键 myi +; 在程序的最后还有一次Ctrl+S的组合键来结束 if (myi 41) DrvSYS_Delay(250000); buf0=0x01; buf3=0x16; myi +; 3 功能程序设计在设计之前,首先明确了要做的事情,需要在一次数组的循环调用中,前几次先不执行。因为在调试的过程中,可以发现,前几个数组根本没有按键,于是在上述的程序中,不

26、要一开始就把cmd或者win+R这类一开始的按键立即执行,而是在中间多次让它没定义,从第五次开始执行win+R,而不是让它立即执行win+R。所以通过看程序,int a里多次使用了0x00,这样,才能执行成功。可以看到每次进入下一个if或else if语句时,在数组其实已经预留了很多的0x00,并且一定要在每个if和else if里加上延时,这点很重要。3.1程序总流程图此次程序设计首先明确普通按键和特殊按键的区别,组合键可以加入到报告里,但是在程序里,往下执行的时候必须清零,否则会一直按着组合键不放,最后导致后面的按键也不能执行,如下为程序设计总流程图。需要解释的是,在程序的一开始,在myi

27、5时进入到下一个else if()语句中,开始执行之前自己定义的普通按键环节,不同的是加入了将buf0,buf3清零的动作,不然程序会反复执行win+R,导致之后普通按键没办法执行,同样开头也做了放空。直到myi36时再次进入到下一个else if()语句中,开始执行Ctrl+S进行保存,同样开头放空,最后myi36进入到else()语句中buf2=0x03进行清零,否则会一直按着最后一个按键。程序总流程图如下。 N Y myi+; 当myi 5时 Y N myi+; 当myi 36时 N Y myi+; else图3.1 程序流程图3.2开始程序的修改由于在确认USB设备被识别后马上开始程序

28、,每次开始都太突然,没办法看清每一次修改程序后的变化,于是可以在main.c里加入了一段。按key1执行开始,这样会比较方便调试。 while(1) number=ScanKey(); if(number=1) HID_MainProcess();这里用到了键盘扫描,并且当key1按下时,开始执行HID_MainProcess。4 结论在这次课程设计中,我学会了怎样去根据设计的要求去设计程序和调试程序。动手能力得到很大的提高。从中我发现自己并不能很好的熟练去使用我所学到的嵌入式知识。在以后学习中我要加强对嵌入式的理解和解决问题的能力。在这次完成设计的过程中,遇到最难的就是组合键的键值问题,为此

29、我也纠结了很多天,查阅了很多USB的资料和很多协议,最后能在自己的能力下完成这份设计,也感觉比较开心。也由于有例程,所以比较简单、定型,而不是真实的生产、科研任务,所以我基本上能有章可循,完成起来并不困难。掌握了设计的步骤和方法,能比较明确自己的设计任务,了解程序和实施方法,这对今后从事技术工作无疑是个很好的训练。通过这种综合训练,我们可以掌握嵌入式设计的基本方法,培养分析解决问题的实际本领,为以后毕业设计和从事嵌入式方向实际工作打下基础。同时也让我充分认识到自己的空想与实践的差别,认识到自己的不足,在弄不懂组合键方法的几天中脾气和态度都不好,这是我的不足。而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。谢 辞本次设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1