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

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

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

4、UP) 端口上拉寄存器控制著每個(gè)端口組的上拉寄存器的使能或禁止,當(dāng)對(duì)應(yīng)位為0,這個(gè)引腳的上拉寄存器是允許的,當(dāng)為1 時(shí),上拉寄存器是禁止的,MIZI提供的S3C2410.H,使用一個(gè)32位的數(shù)來(lái)表示端口的使用情況。 模式 |上拉 |端口 | 端口引腳 MODE | PULLUP | PORT | OFS 不需要自己手動(dòng)組合,通過(guò)宏定義以及SHIFT和MASK組合。見(jiàn)程序,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) 功能:把端口 對(duì)應(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ù),鍵盤(pán)的硬件實(shí)現(xiàn),鍵盤(pán)的硬件實(shí)現(xiàn),4X4 矩陣鍵盤(pán) 四個(gè)輸入引腳: EINT0 -( GPF0 )-INPUT EINT2 -( GPF2 )-INPUT EINT11-( GPG3 )-INPUT EINT19-( GPG11 )-INPUT 四個(gè)輸出引腳

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

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

溫馨提示

  • 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)論