版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆紅河市重點(diǎn)中學(xué)高三第二次模擬考試英語(yǔ)試卷含解析
- 四川省資陽(yáng)市樂(lè)至中學(xué)2025屆高三第二次模擬考試語(yǔ)文試卷含解析
- 《屈原列傳》課件 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修中冊(cè)
- 2025屆云南省江城縣第一中學(xué)高三第三次模擬考試英語(yǔ)試卷含解析
- 2025屆甘肅省慶陽(yáng)六中高考全國(guó)統(tǒng)考預(yù)測(cè)密卷語(yǔ)文試卷含解析
- 四川大學(xué)附屬中學(xué)2025屆高三適應(yīng)性調(diào)研考試英語(yǔ)試題含解析
- 上海市浦東區(qū)2025屆高三下學(xué)期一??荚囌Z(yǔ)文試題含解析
- 韶關(guān)市重點(diǎn)中學(xué)2025屆高三第二次聯(lián)考語(yǔ)文試卷含解析
- 安徽省泗縣樊集中學(xué)2025屆高三下第一次測(cè)試語(yǔ)文試題含解析
- 2025屆成都市樹(shù)德中學(xué)高考全國(guó)統(tǒng)考預(yù)測(cè)密卷語(yǔ)文試卷含解析
- 兒童流感診療及預(yù)防指南(2024醫(yī)生版)
- 【MOOC】國(guó)際交流學(xué)術(shù)英文寫(xiě)作-湖南大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 工程計(jì)價(jià)學(xué)-001-國(guó)開(kāi)機(jī)考復(fù)習(xí)資料
- 《管理的實(shí)踐》讀后感
- 專(zhuān)升本數(shù)學(xué)知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋江蘇財(cái)會(huì)職業(yè)學(xué)院
- 《技術(shù)的含義及作用》課件
- 《孟母三遷》課本劇劇本:環(huán)境對(duì)成長(zhǎng)的重要性(6篇)
- 《富馬酸盧帕他定口崩片關(guān)鍵質(zhì)量屬性與標(biāo)準(zhǔn)研究》
- 走近非遺 課件 2024-2025學(xué)年湘美版(2024)初中美術(shù)七年級(jí)上冊(cè)
- 新生兒壞死性小腸結(jié)腸炎臨床診療指南解讀 課件
- 網(wǎng)絡(luò)數(shù)據(jù)安全管理?xiàng)l例
評(píng)論
0/150
提交評(píng)論