嵌入式鍵盤驅(qū)動.ppt_第1頁
嵌入式鍵盤驅(qū)動.ppt_第2頁
嵌入式鍵盤驅(qū)動.ppt_第3頁
嵌入式鍵盤驅(qū)動.ppt_第4頁
嵌入式鍵盤驅(qū)動.ppt_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式鍵盤驅(qū)動,廣州嵌入式軟件公共技術(shù)支持中心 梁老師 2007年04月,矩陣式鍵盤原理,矩陣式鍵盤一般適用于按鍵數(shù)量較多的場合,它由行線和列線組成,按鍵位于行、列的交叉點上。 如圖所示,一個44的行、列結(jié)構(gòu)可以構(gòu)成一個有16個按鍵的鍵盤,矩陣式鍵盤原理,按鍵設(shè)置在行、列交叉點上,行、列分別連接到按鍵開關(guān)的兩端。行線通過上拉電阻接到十5 V上。 平時無按鍵動作時,行線處于高電平狀態(tài);而當(dāng)有健按下時,行線電平狀態(tài)將由通過此按鍵的列線電平?jīng)Q定:列線電平如果為低,行線電平為低;列線電平如果為高,則行線電平亦為高。這一點是識別矩陣式鍵盤是否被按下的關(guān)鍵所在,矩陣式鍵盤原理,矩陣鍵盤按鍵的識別方法分兩步

2、進行: 識別鍵盤哪一行的鍵被按下。讓所有列線均為低電平,檢查各行線電平是否為低。如果有行線為低,則說明該行有鍵被按下,否則說明無鍵被按下。 如果某行有鍵被按下,識別鍵盤哪一列的鍵被按下(亦稱之為掃描法)。逐列置低電平,并置其余各列為高電平.檢查各行線電平的變化。如果行電平變?yōu)榈碗娖?,則可確定此行此列交叉點處按鍵被按下,S3C2410 的I/O 介紹,S3C2410 有117 個復(fù)用功能輸入輸出端口引腳,這些引腳是: PortA(GPA):32 個輸入/輸出端口 PortB(GPB):11 個輸入/輸出端口 PortC(GPC):16 個輸入/輸出端口 PortD(GPD):16 個輸入/輸出端

3、口 PortE(GPE):16 個輸入/輸出端口 PortF(GPF):8 個輸入/輸出端口 PortG(GPG):16 個輸入/輸出端口 PortH(GPH):11 個輸入/輸出端口,S3C2410 的I/O 介紹,端口控制說明 端口配置寄存器(GPACONGPHCON) 大部分的引腳是復(fù)用的,所以必須對于每個引腳要求定義一個功能,端口配置寄存器定義了每個引腳的功能。 端口數(shù)據(jù)寄存器(GPADATGPHDAT) 如果端口配置成輸出端口,數(shù)據(jù)能夠被寫到端口數(shù)據(jù)寄存器的對應(yīng)位,然后通過管腳輸出。如果端口配置成輸入端口,能從端口數(shù)據(jù)寄存器對應(yīng)的位中讀出管腳上的電平 端口上拉寄存器(GPBUPGPH

4、UP) 端口上拉寄存器控制著每個端口組的上拉寄存器的使能或禁止,當(dāng)對應(yīng)位為0,這個引腳的上拉寄存器是允許的,當(dāng)為1 時,上拉寄存器是禁止的,MIZI提供的S3C2410.H,使用一個32位的數(shù)來表示端口的使用情況。 模式 |上拉 |端口 | 端口引腳 MODE | PULLUP | PORT | OFS 不需要自己手動組合,通過宏定義以及SHIFT和MASK組合。見程序,MIZI提供的S3C2410.H,端口的表示 #define PORTA_OFS0 #define PORTB_OFS1 #define PORTC_OFS2 #define PORTD_OFS3 #define PORTE_

5、OFS4 #define PORTF_OFS5 #define PORTG_OFS6 #define PORTH_OFS7,MIZI提供的S3C2410.H,端口引腳的表示 #define GPIO_A0MAKE_GPIO_NUM(PORTA_OFS, 0) #define GPIO_A1MAKE_GPIO_NUM(PORTA_OFS, 1) #define GPIO_A2MAKE_GPIO_NUM(PORTA_OFS, 2) #define GPIO_A3MAKE_GPIO_NUM(PORTA_OFS, 3) 。 #define MAKE_GPIO_NUM(p, o)(p GPIO_PORT

6、_SHIFTT) | (o GPIO_OFS_SHIFT,MIZI提供的S3C2410.H,set_gpio_ctrl(x) 功能:配置端口引腳的功能,設(shè)置IO口控制寄存器和上拉寄存器 用法:set_gpio_ctrl(模式|上拉?|IO腳) 模式|是否上拉|IO腳,在S3C2410.h中都有其定義好的名字。 set_gpio_ctrl(GPIO_E11 | GPIO_PULLUP_DIS |GPIO_MODE_OUT,MIZI提供的S3C2410.H,write_gpio_bit(x, v) 功能:把端口 對應(yīng)的端口數(shù)據(jù)寄存器x位設(shè)置為v write_gpio_bit(GPIO_E11, 0

7、); read_gpio_bit(x) 功能:把端口數(shù)據(jù)寄存器x位的狀態(tài) 讀入,函數(shù)返回值既是其狀態(tài) read_gpio_bit(GPIO_G11,MIZI提供的S3C2410.H,write_gpio_reg(x, v) 功能:把端口數(shù)據(jù)寄存器x 設(shè)置為v read_gpio_reg(x) 功能:讀取端口數(shù)據(jù)寄存器x,函數(shù)返回值既是其數(shù)據(jù),鍵盤的硬件實現(xiàn),鍵盤的硬件實現(xiàn),4X4 矩陣鍵盤 四個輸入引腳: EINT0 -( GPF0 )-INPUT EINT2 -( GPF2 )-INPUT EINT11-( GPG3 )-INPUT EINT19-( GPG11 )-INPUT 四個輸出引腳

8、: KEYSCAN0-( GPE11 )-OUTPUT KEYSCAN1-( GPG6 )-OUTPUT KEYSCAN2-( GPE13 )-OUTPUT KEYSCAN3-( GPG2 )-OUTPUT,鍵盤的驅(qū)動實現(xiàn),引入結(jié)構(gòu)體key_info對按鍵進行描述 static struct key_info int irq_no; /外部中斷號 unsigned int gpio_port; /輸入端口,EINT unsigned int gpio_port_kscan; /輸出端口,OUTPUT int key_no; /按鍵序號,或者名字 key_info_tab16 =,鍵盤初始化程序

9、,static int _init matrix4_buttons_init(void) 注冊字符設(shè)備 register_chrdev(); 初始化按鍵對應(yīng)的輸出端口 buttons_io_port_init(); 采用中斷機制,注冊中斷號 request_irqs();,鍵盤初始化程序,* 初始化kscan口為輸出0 */ static void buttons_io_port_init(void) int i; for(i=0; i sizeof kscan / sizeof kscan1; i+) set_gpio_ctrl(kscani | GPIO_PULLUP_DIS | GPIO

10、_MODE_OUT); write_gpio_bit(kscani, 0);,請求注冊中斷,static int request_irqs(void) for (i = 0; i 使用中斷個數(shù); i+) 設(shè)置與外部中斷號相對應(yīng)的GPIO端口以及模式請求中斷號,并注冊中斷響應(yīng)函數(shù)。,鍵盤驅(qū)動的卸載函數(shù),static void _exit matrix4_buttons_exit(void) 釋放中斷 free_irqs(); 注銷字符設(shè)備unregister_chrdev();,按鍵中斷處理 buttons_irq,static void buttons_irq(int irq, void *dev_id, struct pt_regs *reg) 設(shè)置GPIO為輸入狀態(tài) 鍵盤掃描 喚醒按鍵等待隊列的進程 重新設(shè)置GPIO為輸出 重新設(shè)置中斷,通過延時去鍵盤抖動,理想的情況下,當(dāng)按鍵被按下時,I/O口電平被拉低,即邏輯0,當(dāng)按鍵松開時,為邏輯1。 但實際機械的觸點動作與微處理器快速的執(zhí)行速度不匹配,導(dǎo)致開關(guān)被按下或松開時產(chǎn)生抖動,如同彈簧一樣,不能立刻產(chǎn)生穩(wěn)定的0或1。 常用的去抖動方法有硬件和軟件兩種,硬件可采用單穩(wěn)態(tài)觸發(fā)起

溫馨提示

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

評論

0/150

提交評論