仿USB鍵盤(pán)文件植入器(模擬人工按鍵)_第1頁(yè)
仿USB鍵盤(pán)文件植入器(模擬人工按鍵)_第2頁(yè)
仿USB鍵盤(pán)文件植入器(模擬人工按鍵)_第3頁(yè)
仿USB鍵盤(pán)文件植入器(模擬人工按鍵)_第4頁(yè)
仿USB鍵盤(pán)文件植入器(模擬人工按鍵)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、編號(hào): 嵌入式系統(tǒng)綜合實(shí)訓(xùn)嵌入式系統(tǒng)綜合實(shí)訓(xùn)說(shuō)明書(shū)說(shuō)明書(shū)題 目: 仿 USB 鍵盤(pán)文件植入器 院 (系): 信息與通信學(xué)院 專(zhuān) 業(yè): 電子信息工程 學(xué)生姓名: 萬(wàn)玉 學(xué) 號(hào): 1161170125 指導(dǎo)教師: 葉金才 2015 年 1 月 11 日摘 要這次設(shè)計(jì)任務(wù)所做的工作就是實(shí)現(xiàn)模擬人工按鍵,將開(kāi)發(fā)板接上位機(jī)后,不用板子上的按鍵,直接用程序產(chǎn)生鍵盤(pán)碼,計(jì)算機(jī)收到 USB 鍵盤(pán)的鍵碼,會(huì)執(zhí)行相應(yīng)的功能。具體的動(dòng)作是打開(kāi)計(jì)算機(jī)的命令行,在命令行里面運(yùn)行記事本,并新建一個(gè) a.txt記事本文件,并向該文件錄入若干的英文字符。運(yùn)行命令行通過(guò)鍵盤(pán)操作是 win+R -cmd-notepad a.tx

2、t-enter-錄入英文字符。最后,會(huì)在本文介紹如何實(shí)現(xiàn)向電腦發(fā)送 WIN+R 這樣的組合鍵鍵碼,可以類(lèi)似去模擬 ALT+F4,SHIFT+1 之類(lèi)的按鍵。關(guān)鍵詞:ARM;USB 鍵盤(pán);模擬人工按鍵;USB HID 協(xié)議;組合鍵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 k

3、eyboard 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

4、 operation is win+R - cmd- Notepad a.txt- enter- input English character.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.Keywords: ARM; USB keyboard keys; artificial simulation;

5、 USB HID protocol; key combination目 錄引言 11 設(shè)計(jì)軟件基礎(chǔ)知識(shí)21.1 C 編譯器 KEIL 介紹 21.2 ARM 相關(guān)知識(shí)21.3 USB-HID 簡(jiǎn)介22 模擬人工按鍵設(shè)計(jì)32.1 程序設(shè)計(jì)的任務(wù)要求 32.2 程序的設(shè)計(jì)思路和想法 32.3 報(bào)告描述符 32.4 普通按鍵程序設(shè)計(jì)42.5 特殊(功能)按鍵程序設(shè)計(jì) 63 功能程序設(shè)計(jì)73.1 程序總流程圖 73.2 開(kāi)始程序的修改84 結(jié)論 10謝辭11參考文獻(xiàn)12附錄13桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙0第 0 頁(yè) 共 22 頁(yè)引言 USB,是英文 Universal Serial Bu

6、s(通用串行總線(xiàn))的縮寫(xiě),而其中文簡(jiǎn)稱(chēng)為“通串線(xiàn)”,是一個(gè)外部總線(xiàn)標(biāo)準(zhǔn),用于規(guī)范電腦與外部設(shè)備的連接和通訊。是應(yīng)用在 PC 領(lǐng)域的接口技術(shù)。USB 接口支持設(shè)備的即插即用和熱插拔功能。USB 是在 1994 年底由英特爾、康柏、IBM、Microsoft 等多家公司聯(lián)合提出的。USB-HID 是 Human Interface Device 的縮寫(xiě),由其名稱(chēng)可以了解 HID 設(shè)備是直接與人交互的設(shè)備,例如鍵盤(pán)、鼠標(biāo)與游戲桿等。不過(guò) HID 設(shè)備并不一定要有人機(jī)接口,只要符合 HID 類(lèi)別規(guī)范的設(shè)備都是 HID 設(shè)備。交換的數(shù)據(jù)存儲(chǔ)在稱(chēng)為報(bào)表(report)的結(jié)構(gòu)內(nèi),設(shè)備的固件必須支持 HID

7、報(bào)表的格式。主機(jī)在控制與中斷傳輸中傳送與要求報(bào)表,來(lái)傳送與接收數(shù)據(jù)。報(bào)表的格式非常有彈性,可以處理任何類(lèi)別的數(shù)據(jù)。鍵盤(pán)是最常用也是最主要的輸入設(shè)備,通過(guò)鍵盤(pán)可以將英文字母、數(shù)字、標(biāo)點(diǎn)符號(hào)等輸入到計(jì)算機(jī)中,從而向計(jì)算機(jī)發(fā)出命令、輸入數(shù)據(jù)等。起初這類(lèi)鍵盤(pán)多用于品牌機(jī),如 HP、聯(lián)想等品牌機(jī)都率先采用了這類(lèi)鍵盤(pán),受到廣泛的好評(píng),并曾一度被視為品牌機(jī)的特色。隨著時(shí)間的推移,漸漸的市場(chǎng)上也出現(xiàn)獨(dú)立的具有各種快捷功能的產(chǎn)品單獨(dú)出售,并帶有專(zhuān)用的驅(qū)動(dòng)和設(shè)定軟件,在兼容機(jī)上也能實(shí)現(xiàn)個(gè)性化的操作。桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙1第 1 頁(yè) 共 22 頁(yè)1 設(shè)計(jì)軟件基礎(chǔ)知識(shí) 包括 keil uVisio

8、n4,ARM 核心知識(shí),USB-HID 簡(jiǎn)介。1.1 C 編譯器 Keil 介紹Keil C51 是美國(guó) Keil Software 公司出品的 51 系列兼容單片機(jī) C 語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C 語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。Keil 提供了包括 C 編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部分組合在一起。Keil C51 生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。KeilSoftware 公司推出的

9、 uVision4 是一款可用于多種 8051MCU 的集成開(kāi)發(fā)環(huán)境(IDE),該 IDE 同時(shí)也是 PK51 及其它開(kāi)發(fā)套件的一個(gè)重要組件。除增加了源代碼、功能導(dǎo)航器、模板編輯以及改進(jìn)的搜索功能外,uVision3 還提供了一個(gè)配置向?qū)Чδ?,加速了啟?dòng)代碼和配置文件的生成。此外其內(nèi)置的仿真器可模擬目標(biāo) MCU,包括指令集、片上外圍設(shè)備及外部信號(hào)等。uVision3 提供邏輯分析器,可監(jiān)控基于 MCUI/O 引腳和外設(shè)狀態(tài)變化下的程序變量。uVision4 提供對(duì)多種最新的 8051 類(lèi)微處理器的支持,包括AnalogDevices 的 ADuC83x 和 ADuC84x,以及 Infineo

10、n 的 XC866 等。1.2 ARM 核心相關(guān)知識(shí) 2012 年 3 月 14 日,中國(guó)上海ARM 公司今天發(fā)布了一款擁有全球最低功耗效率的微處理器ARM Cortex-M0+處理器。支持 ARMv6M 指令集,該款經(jīng)過(guò)優(yōu)化的Cortex-M0+處理器可針對(duì)家用電器、白色商品、醫(yī)療監(jiān)控、電子測(cè)量、照明設(shè)備以及功耗與汽車(chē)控制器件等各種廣泛應(yīng)用的智能傳感器與智能控制系統(tǒng),提供超低功耗、低成本微控制器(MCU)。1.3 USB-HID 簡(jiǎn)介是 Human Interface Device 的縮寫(xiě),由其名稱(chēng)可以了解 HID 設(shè)備是直接與人交互的設(shè)備,例如鍵盤(pán)、鼠標(biāo)與游戲桿等。不過(guò) HID 設(shè)備并不一

11、定要有人機(jī)接口,只要符合 HID 類(lèi)別規(guī)范的設(shè)備都是 HID 設(shè)備。交換的數(shù)據(jù)存儲(chǔ)在稱(chēng)為報(bào)表(report)的結(jié)構(gòu)內(nèi),設(shè)備的固件必須支持 HID 報(bào)表的格式。主機(jī)在控制與中斷傳輸中傳送與要求報(bào)表,來(lái)傳送與接收數(shù)據(jù)。報(bào)表的格式非常有彈性,可以處理任何類(lèi)別的數(shù)據(jù)。每個(gè) USB 只有一個(gè)主機(jī)。在 USB 中,USB HOST 是通過(guò)各種描述符來(lái)識(shí)別設(shè)備的,有設(shè)備描述符,配置描述符,接口描述符,端點(diǎn)描述符,字符串描述符,報(bào)告描述符等等。USB 報(bào)告描述符(Report Descriptor)是 HID 設(shè)備中的一個(gè)描述符,它是比較復(fù)雜的一個(gè)描述符。USB-HID 設(shè)備是通過(guò)報(bào)告來(lái)給傳送數(shù)據(jù)的,報(bào)告有輸

12、入報(bào)告和輸出報(bào)告。輸入報(bào)告桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙2第 2 頁(yè) 共 22 頁(yè)是 USB 設(shè)備發(fā)送給主機(jī)的,例如 USB 鼠標(biāo)將鼠標(biāo)移動(dòng)和鼠標(biāo)點(diǎn)擊等信息返回給電腦,鍵盤(pán)將按鍵數(shù)據(jù)數(shù)據(jù)返回給電腦等;輸出報(bào)告是主機(jī)發(fā)送給 USB 設(shè)備的,例如鍵盤(pán)上的數(shù)字鍵盤(pán)鎖定燈和大寫(xiě)字母鎖定燈等。報(bào)告是一個(gè)數(shù)據(jù)包,里面包含的是所要傳送的數(shù)據(jù)。輸入報(bào)告是通過(guò)中斷輸入端點(diǎn)輸入的,而輸出報(bào)告有點(diǎn)區(qū)別,當(dāng)沒(méi)有中斷輸出端點(diǎn)時(shí),可以通過(guò)控制輸出端點(diǎn) 0 發(fā)送,當(dāng)有中斷輸出端點(diǎn)時(shí),通過(guò)中斷輸出端點(diǎn)發(fā)出。而報(bào)告描述符,是描述一個(gè)報(bào)告以及報(bào)告里面的數(shù)據(jù)是用來(lái)干什么用的。通過(guò)它,USB HOST 可以分析出報(bào)告里面的

13、數(shù)據(jù)所表示的意思。它通過(guò)控制輸入端點(diǎn) 0 返回,主機(jī)使用獲取報(bào)告描述符命令來(lái)獲取報(bào)告描述符,注意這個(gè)請(qǐng)求是發(fā)送到接口的,而不是到設(shè)備。一個(gè)報(bào)告描述符可以描述多個(gè)報(bào)告,不同的報(bào)告通過(guò)報(bào)告 ID 來(lái)識(shí)別,報(bào)告ID 在報(bào)告最前面,即第一個(gè)字節(jié)。當(dāng)報(bào)告描述符中沒(méi)有規(guī)定報(bào)告 ID 時(shí),報(bào)告中就沒(méi)有ID 字段,開(kāi)始就是數(shù)據(jù)。2 模擬人工按鍵設(shè)計(jì)包括設(shè)計(jì)要求,普通按鍵的程序設(shè)計(jì),組合鍵(功能鍵組合)的程序設(shè)計(jì)。2.1 程序設(shè)計(jì)的任務(wù)要求模擬人工按鍵(默認(rèn)路徑),win+r(組合鍵,Win 鍵即 window 鍵) 輸入 cmd 回車(chē) 輸入 notepad a.txt 回車(chē) 回車(chē)(由于第一次在默認(rèn)路徑C:Us

14、ersAdministrator 新建文件,所以對(duì)彈出的是否創(chuàng)建文件的提示框按一次回車(chē)) 輸入 abcd1234 按下 Ctrl+S(組合鍵,對(duì)記事本進(jìn)行保存的快捷鍵)進(jìn)行保存 完成 。2.2 程序的設(shè)計(jì)思路和想法開(kāi)始前應(yīng)該把 Win+R 和 Ctrl+S 這兩個(gè)組合鍵環(huán)節(jié)分別定成一個(gè)程序的開(kāi)始和結(jié)束,而 cmd,回車(chē),notepad 空格 a.txt,回車(chē),回車(chē),abcd1234 這個(gè)單個(gè)按鍵的環(huán)節(jié)定為中間環(huán)節(jié),整體的思路就是這樣。由于一開(kāi)始通過(guò)例程知道單個(gè)按鍵比較容易實(shí)現(xiàn),于是可以是先做了單個(gè)按鍵的數(shù)組,再去做組合鍵,做完之后回頭總結(jié),這樣的想法確實(shí)是對(duì)的,遵循先易后難得原則,而且也可以從

15、簡(jiǎn)單的實(shí)現(xiàn)方法中去發(fā)現(xiàn)組合鍵的做法。在設(shè)計(jì)組合鍵的時(shí)候最難得莫過(guò)于 window 鍵都按不下去,通過(guò)查詢(xún)和閱讀了很多的資料后,總結(jié)了 win 鍵和類(lèi)似的功能鍵如何實(shí)現(xiàn),然后在不斷的嘗試中發(fā)現(xiàn)組合鍵的實(shí)現(xiàn)方法,后面會(huì)做詳細(xì)的介紹。2.3 報(bào)告描述符在上面的 USB-HID 簡(jiǎn)介中已經(jīng)介紹了報(bào)告描述符。報(bào)告描述符是描述一個(gè)報(bào)告以及報(bào)告里面的數(shù)據(jù)是用來(lái)干什么用的。通過(guò)它,USB HOST 可以分析出報(bào)告里面的數(shù)據(jù)所表示的意思。所以有必要解釋一下報(bào)告描述符。const uint8_t g_HID_au8KeyboardReportDescriptor = 0 x05, 0 x01, / Usage P

16、age (Generic Desktop)桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙3第 3 頁(yè) 共 22 頁(yè) /表示用途頁(yè)為通用桌面設(shè)備 0 x09, 0 x06, / Usage (Keyboard) /表示用途為鍵盤(pán) 0 xA1, 0 x01, / Collection (Application) /表示應(yīng)用集合,必須以 END_COLLECTION 來(lái)結(jié)束它 0 x05, 0 x07, / Usage Page (Key Code) /表示用途頁(yè)為按鍵 0 x19, 0 xE0, / Usage Minimum (224) /用途最小值,這里為左 Ctrl 鍵 0 x29, 0 xE7,

17、 / Usage Maximum (231) /用途最大值,這里為右 GUI,即 window 鍵 0 x15, 0 x00, / Logical Minimum (0) /邏輯最小值為 0 0 x25, 0 x01, / Logical Maximum (1) /邏輯最大值 1 0 x75, 0 x01, / Report Size (1) /報(bào)告大小(即這個(gè)字段的寬度)為 1bit 0 x95, 0 x08, / Report Count(8) /報(bào)告的個(gè)數(shù)為 8,即總共有 8 個(gè) bits 0 x81, 0 x02, / Input (Data, Variable, Absolute)

18、;Modifier byte /輸入用,變量,值,絕對(duì)值2.4 普通按鍵程序設(shè)計(jì)由于例程里是掃描按鍵,然后對(duì)按下的按鍵賦上對(duì)應(yīng)的鍵值,可以實(shí)現(xiàn)按下按鍵,在 TXT 里得到對(duì)應(yīng)的字母。首先,任務(wù)的要求是模擬人工按鍵,在原 USB 鍵盤(pán)程序上進(jìn)行修改,所以只需要向上位機(jī)發(fā)送我們想按下的按鍵鍵值的報(bào)告,并不用人親自去按鍵,所以在這里用不到鍵盤(pán)掃描。主要是明白報(bào)告描述符和報(bào)告。接下來(lái)根據(jù) USB HID to PS/2 Scan Code Translation Table 去找到自己想要的鍵碼,對(duì)應(yīng)的十六進(jìn)制,只用看 HID Usage ID這一列。例如,a 對(duì)應(yīng)的鍵值為 0 x04,b 為 0 x

19、05,0 x03 為沒(méi)定義。所以對(duì)應(yīng)之前設(shè)計(jì)思路中的中間環(huán)節(jié),即為普通按鍵環(huán)節(jié)。cmd,回車(chē),notepad空格 a.txt,回車(chē),回車(chē),abcd1234,均為單個(gè)的按鍵。于是有了下面定義的數(shù)組:a31=0 x00,0 x00,0 x00,0 x00,0 x03,0 x0D,0 x04,0 x25,0 x0E,0 x0F,0 x14, 0 x05,0 x10,0 x01,0 x04,0 x29,0 x01,0 x34,0 x14,0 x18,0 x14,0 x25,0 x025,0 x01,0 x02,0 x03,0 x04,0 x1B,0 x1C,0 x1D,0 x1E;需要解釋的是,在實(shí)驗(yàn)

20、的過(guò)程中,在反復(fù)的嘗試后,發(fā)現(xiàn)前幾個(gè)數(shù)組沒(méi)辦法執(zhí)行,桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙4第 4 頁(yè) 共 22 頁(yè)于是可以加入了幾個(gè)空的定義將其放空,幾個(gè)空的定義執(zhí)行后再執(zhí)行想要的功能。另外,在程序里有這么一句:buf2=0 x03+amyi,所以在上述的數(shù)組中就將其減了 0 x03,在本文后面附錄的 USB HID to PS/2 Scan Code Translation Table 中,可以簡(jiǎn)單地看成想要的那個(gè)鍵值往上數(shù)三個(gè)就是需要的鍵值。附錄會(huì)給出鍵值表圖。這里給出一些需要用到的鍵值。表 2.1Key NameHID Usage PageHID Usage IDErorrUndef

21、ined0703a A0704c C0706d D0707m M0710n N0711o O0712p P0713r R0715t T0717x X071B.0737Return0728Space0739所以設(shè)計(jì)要求中的依次輸 c,m,d,回車(chē),空格都可以找到對(duì)應(yīng)的鍵碼,回車(chē)這類(lèi)不算是功能按鍵,也算是普通按鍵,一樣可以找到對(duì)應(yīng)的鍵碼,附錄會(huì)放上 USB HID to PS/2 Scan Code Translation Table,于是,一開(kāi)始普通按鍵環(huán)節(jié)的程序設(shè)計(jì)如下。 void HID_SetInReport() uint8_t *buf; Static int myi=0; inta31

22、=0 x00,0 x00,0 x00,0 x00,0 x03,0 x0D,0 x04,0 x25,0 x0E,0 x0F,0 x14, 0 x05,0 x10,0 x01,0 x04,0 x29,0 x01,0 x34,0 x14,0 x18,0 x14,0 x25,0 x025,0 x01,0 x02,0 x03,0 x04,0 x1B,0 x1C,0 x1D,0 x1E;桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙5第 5 頁(yè) 共 22 頁(yè)if(g_HID_sDevice.isReportReady) return; / check if previous report done buf =

23、g_HID_sDevice.pu8Report;/ update new report dataIf ( myi31 ) DrvSYS_Delay(250000); buf2=0 x03+amyi; /output myi +; else buf2=0 x03;這段程序可以看出,每次進(jìn)來(lái)可以自動(dòng)加一,并且按照自己定義的數(shù)組去給 buf2一個(gè)值,所以可以將想要輸出的字母順序依次給數(shù)組里的每個(gè)元素。這樣會(huì)向上位機(jī)報(bào)告哪些按鍵被按下,于是可以實(shí)現(xiàn)普通按鍵的設(shè)計(jì)。2.5 特殊(功能)按鍵程序設(shè)計(jì)這部分最難解決的是如何將兩個(gè)鍵位同時(shí)按下,通過(guò)上面的分析,可以知道如何報(bào)告單個(gè)按鍵按下的情況給上位機(jī),但是如

24、何按下一個(gè)鍵不放,然后去按下另個(gè)鍵呢?如果把 win 和 R 鍵的鍵值一起放到 buf2里,可以肯定的是,這是不可能實(shí)現(xiàn)的。在多次嘗試未果之后,可以試著把 win 鍵的鍵值放入到 buf2去試試,看能不能實(shí)現(xiàn)這個(gè)功能鍵,最后也可以發(fā)現(xiàn)這是不可能實(shí)現(xiàn)的。于是通過(guò)查詢(xún)大量的資料,以及一些網(wǎng)上參考的資料。通過(guò)分析,有了如下的總結(jié),這個(gè)報(bào)告中只有一個(gè)報(bào)告,所以沒(méi)有報(bào)告 ID,因此返回的都是實(shí)際使用的數(shù)據(jù)??偣灿?8 字節(jié)輸入,1 字節(jié)輸出。其中輸入的第一字節(jié)用表示特殊按鍵,第二字節(jié)保留,后面的六字節(jié)為普通按鍵。在附錄中有圖片,這里簡(jiǎn)單解釋下,總結(jié)如下。如果想只按下 win 鍵,則返回 08 00 00

25、 00 00 00 00 00(十六進(jìn)制),如果想只按下 r 鍵,則返回 00 00 15 00 00 00 00 00 , 如果想 win+r 按下,則返回 08 00 15 00 00 00 00 00 ,如果想全部按鍵釋放,則返回 00 00 00 00 00 00 00 00 。這些數(shù)據(jù)(即報(bào)告)都是通過(guò)中斷端點(diǎn)返回的。鍵一共有八個(gè)字節(jié),即一起發(fā)送要發(fā)八個(gè)字節(jié)的數(shù)據(jù),第 1 個(gè)字節(jié)是八個(gè)控制鍵,第 2 個(gè)字節(jié)是保留,第三至第八個(gè)字節(jié)為普通按鍵鍵值,沒(méi)有固定位置,只需要往上填上 HID Usage Tables 上的鍵值,系統(tǒng)即會(huì)確認(rèn)為該鍵按下。而功能(特殊)按鍵實(shí)際上為鍵盤(pán)的八個(gè)控制鍵

26、,包括:左/右 CTL,在/右 ALT,在/右 SHIFT,左/右 WIN 鍵盤(pán)。一開(kāi)始以為在 USB HID to PS/2 Scan Code Translation Table 中的 left GUI 的鍵值為 0 xE7,最后明白上述的原理,也查詢(xún)了資桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙6第 6 頁(yè) 共 22 頁(yè)料,最后結(jié)合查詢(xún)的資料,總結(jié)出來(lái)的就是 buf0能表示功能鍵,buf1保留字節(jié),buf2到 buf7為普通按鍵。所以特殊按鍵的開(kāi)始環(huán)節(jié)部分為if (myi 5 )DrvSYS_Delay(250000);buf0=0 x08; / 按下 win 鍵 buf3=0 x15;

27、/ 按下 R 鍵myi +;在程序的最后還有一次 Ctrl+S 的組合鍵來(lái)結(jié)束 if (myi 41) DrvSYS_Delay(250000); buf0=0 x01; buf3=0 x16; myi +; 3 功能程序設(shè)計(jì)在設(shè)計(jì)之前,首先明確了要做的事情,需要在一次數(shù)組的循環(huán)調(diào)用中,前幾次先不執(zhí)行。因?yàn)樵谡{(diào)試的過(guò)程中,可以發(fā)現(xiàn),前幾個(gè)數(shù)組根本沒(méi)有按鍵,于是在上述的程序中,不要一開(kāi)始就把 cmd 或者 win+R 這類(lèi)一開(kāi)始的按鍵立即執(zhí)行,而是在中間多次讓它沒(méi)定義,從第五次開(kāi)始執(zhí)行 win+R,而不是讓它立即執(zhí)行 win+R。所以通過(guò)看程序,int a里多次使用了 0 x00,這樣,才能執(zhí)行

28、成功??梢钥吹矫看芜M(jìn)入下一個(gè) if 或 else if 語(yǔ)句時(shí),在數(shù)組其實(shí)已經(jīng)預(yù)留了很多的0 x00,并且一定要在每個(gè) if 和 else if 里加上延時(shí),這點(diǎn)很重要。3.1 程序總流程圖此次程序設(shè)計(jì)首先明確普通按鍵和特殊按鍵的區(qū)別,組合鍵可以加入到報(bào)告里,但是在程序里,往下執(zhí)行的時(shí)候必須清零,否則會(huì)一直按著組合鍵不放,最后導(dǎo)致后面的按鍵也不能執(zhí)行,如下為程序設(shè)計(jì)總流程圖。需要解釋的是,在程序的一開(kāi)始,在 myi5 時(shí)進(jìn)入到下一個(gè) else if()語(yǔ)句中,開(kāi)始執(zhí)行之前自己定義的普通按鍵環(huán)節(jié),不同的是加入了將 buf0,buf3清零的動(dòng)作,不然程序會(huì)反復(fù)執(zhí)行win+R,導(dǎo)致之后普通按鍵沒(méi)辦法

29、執(zhí)行,同樣開(kāi)頭也做了放空。直到 myi36 時(shí)再次進(jìn)桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙7第 7 頁(yè) 共 22 頁(yè)入到下一個(gè) else if()語(yǔ)句中,開(kāi)始執(zhí)行 Ctrl+S 進(jìn)行保存,同樣開(kāi)頭放空,最后myi36 進(jìn)入到 else()語(yǔ)句中 buf2=0 x03 進(jìn)行清零,否則會(huì)一直按著最后一個(gè)按鍵。程序總流程圖如下。 N Y myi+; 當(dāng) myi 5 時(shí) Y N myi+; 當(dāng) myi 36 時(shí) N Y myi+; else圖 3.1 程序流程圖開(kāi)始If myi 5Win,R 同時(shí)按下If myi 36cmd,回車(chē),.If myi 42Ctrl,R 同時(shí)按結(jié)束桂林電子科技大學(xué)課程設(shè)計(jì)

30、(論文)報(bào)告用紙8第 8 頁(yè) 共 22 頁(yè)3.2 開(kāi)始程序的修改由于在確認(rèn) USB 設(shè)備被識(shí)別后馬上開(kāi)始程序,每次開(kāi)始都太突然,沒(méi)辦法看清每一次修改程序后的變化,于是可以在 main.c 里加入了一段。按 key1 執(zhí)行開(kāi)始,這樣會(huì)比較方便調(diào)試。while(1)number=ScanKey();if(number=1) HID_MainProcess();這里用到了鍵盤(pán)掃描,并且當(dāng) key1 按下時(shí),開(kāi)始執(zhí)行 HID_MainProcess。桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙9第 9 頁(yè) 共 22 頁(yè)4 結(jié)論在這次課程設(shè)計(jì)中,我學(xué)會(huì)了怎樣去根據(jù)設(shè)計(jì)的要求去設(shè)計(jì)程序和調(diào)試程序。動(dòng)手能力得到

31、很大的提高。從中我發(fā)現(xiàn)自己并不能很好的熟練去使用我所學(xué)到的嵌入式知識(shí)。在以后學(xué)習(xí)中我要加強(qiáng)對(duì)嵌入式的理解和解決問(wèn)題的能力。在這次完成設(shè)計(jì)的過(guò)程中,遇到最難的就是組合鍵的鍵值問(wèn)題,為此我也糾結(jié)了很多天,查閱了很多 USB的資料和很多協(xié)議,最后能在自己的能力下完成這份設(shè)計(jì),也感覺(jué)比較開(kāi)心。也由于有例程,所以比較簡(jiǎn)單、定型,而不是真實(shí)的生產(chǎn)、科研任務(wù),所以我基本上能有章可循,完成起來(lái)并不困難。掌握了設(shè)計(jì)的步驟和方法,能比較明確自己的設(shè)計(jì)任務(wù),了解程序和實(shí)施方法,這對(duì)今后從事技術(shù)工作無(wú)疑是個(gè)很好的訓(xùn)練。通過(guò)這種綜合訓(xùn)練,我們可以掌握嵌入式設(shè)計(jì)的基本方法,培養(yǎng)分析解決問(wèn)題的實(shí)際本領(lǐng),為以后畢業(yè)設(shè)計(jì)和從事

32、嵌入式方向?qū)嶋H工作打下基礎(chǔ)。同時(shí)也讓我充分認(rèn)識(shí)到自己的空想與實(shí)踐的差別,認(rèn)識(shí)到自己的不足,在弄不懂組合鍵方法的幾天中脾氣和態(tài)度都不好,這是我的不足。而扎實(shí)的基礎(chǔ)是一切創(chuàng)造的源泉,只有從本質(zhì)上理解了原理,才能更好的于疑途尋求柳暗花明,實(shí)現(xiàn)在科學(xué)界的美好暢游和尋得創(chuàng)造的快樂(lè)。桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙10第 10 頁(yè) 共 22 頁(yè)謝 辭本次設(shè)計(jì)和論文的完成,得益于葉金才老師傳授的知識(shí),當(dāng)我在遇到設(shè)計(jì)上的難題而四處找不到解答的時(shí)候,在老師的無(wú)私幫助和耐心指導(dǎo)下,我找到了解決的方法,完成了課程設(shè)計(jì)。非常感謝老師!在這里,還要特別感謝同班的同學(xué),在我遇到難題時(shí),幫我想解決的辦法,令我非常感動(dòng),感謝同學(xué)!同時(shí),我要特別感謝我的家人,一直在背后默默支持、理解、鼓勵(lì)我,正因?yàn)橛辛思胰耍宜龅囊磺胁鸥幸饬x。感恩,感謝父母!最后,由于時(shí)間的倉(cāng)促及自身專(zhuān)業(yè)水平的不足,正片論文肯定存在尚未發(fā)現(xiàn)的缺點(diǎn)和錯(cuò)誤。懇請(qǐng)閱讀此篇論文的老師、同學(xué),多予指證,不勝感激!桂林電子科技大學(xué)課程設(shè)計(jì)(論文)報(bào)告用紙11第 11

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論