在嵌入式系統(tǒng)開發(fā)中,經(jīng)常通過鍵盤來實現(xiàn)人機交互。本文介紹了一種直接利用ARM的I/O口擴展矩陣鍵盤的方法。同時以TQ2440開發(fā)板為例,對硬件電路連接和相應(yīng)的linux驅(qū)動設(shè)計方法都作了詳細(xì)說明。
有的單片機應(yīng)用需要使用的按鍵數(shù)量比較多,比如:密碼鎖,這時如果按照之前的設(shè)計,一個GPIO控制一個按鍵的話,有點浪費單片機資源,這時候我們常常需要使用矩陣鍵盤。
矩陣鍵盤的使用在單品機的學(xué)習(xí)當(dāng)中十分廣泛,可是對于許多新手,包括本人有時也是搞不明白,昨天晚上和今天早上的思考和同行們的討論,終于有了點頭緒,所以想記錄下讀取鍵盤的思路。
基于TX-1C開發(fā)板,電路連接圖如下
矩陣鍵盤是單片機外部設(shè)備中所使用的排布類似于矩陣的鍵盤組。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為輸入。矩陣鍵盤的優(yōu)點是節(jié)約單片機IO口,例如普通鍵盤8個IO口只能用作8個按鍵,而矩陣鍵盤能作16個按鍵。
在鍵盤中按鍵數(shù)量較多時,為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。
/**************************文件所用資源1.端口:P22.調(diào)用delay_ms函數(shù)**************************/#include #include #define key_port P2//鍵盤接口定義sbitkey_port_0=key_port^0;sbitkey_port_1=key_port^1;sbi
1.代碼:#include typedef unsigned char u8;typedef unsigned int u16;sbit seg_sel = P1^4;sbit bit_sel = P1^5;#define DATA P0u8 code seg_tab[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x
采用反轉(zhuǎn)法判斷按鍵坐標(biāo),即行號與列號獲得按鍵碼。 寫完后發(fā)現(xiàn)Proteus一個問題:直接使用這樣的if(P10xf0!=0xf0)語句時,調(diào)不出來,當(dāng)用了一個中間變量過渡時,就調(diào)出來了,害我花了一個上午的時間,現(xiàn)在暫時不知
矩陣鍵盤是單片機外部設(shè)備中所使用的排布類似于矩陣的鍵盤組。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識別也要復(fù)雜一些,列線通過電阻接正電源,并將行線所接的單片機的I/O口作為輸出端,而列線所接的I/O口則作為
//待完善#include #include "../head/config.h"__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//對熔絲位進行設(shè)置//單片機LED共陽極段碼表(帶小數(shù)點) 0~9const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X0
#include#include#asm.equ__lcd_port=0x18;PORTB#endasm#include#defineucharunsignedchar#defineuintunsignedintucharge=0,shi=0;ucharkey_value=0;voidlay_ms(uintms){uintx,y;for(x=0;x{for(y=0;y
// 8位LED動態(tài)顯示按鍵值// 芯片 ATMEGA16L // 時鐘 4MHz 內(nèi)部 // 采用系統(tǒng)自帶延時程序 #include #include void leddisplay(); // 數(shù)碼管顯示 unsigned char keyin(void); // 鍵盤掃描 unsigned char ledxs[
使用芯片STM8S003所用端口:PD2~PD6, PA1~PA3其中,PD3~PD6為輸出,PA1~PA3 / PD2為輸入(默認(rèn)上拉)/* PortCom BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 PD6 PD5 PD4 PD3 PD2 PA3 PA2 PA1 */程序如下:/*添
調(diào)試通過.key_scan_p2() //定時器,或者主程序掃描{uchar x,y,z;P2=0x0f; x=P2&0x0f;P2=0xf0;y=P2&0xf0;z=x|y; if(z!=key_value1) key_value1=z; //如果兩次結(jié)果不同 else { if(key_value1 == 0xff) key_release=0; e
/實驗?zāi)康模菏煜ゆI盤矩陣的掃描方法//程序中沒有做按鍵去抖,也沒有考慮多個鍵同時按下的情況。 //最低兩位數(shù)碼管顯示相應(yīng)的按鍵(如按下S10,在顯示10;按下S25,則顯示25) //無按鍵按下的時候顯示FF //按鍵跟按
如圖4.14.2所示,用AT89S51的并行口P1接4×4矩陣鍵盤,以P1.0-P1.3作輸入線,以P1.4-P1.7作輸出線;在數(shù)碼管上顯示每個按鍵的“0-F”序號。對應(yīng)的按鍵的序號排列如圖4.14.1所示500)this.width=500'>300)this.
#include #include #include "key.h"#include "1602.h"#include "delay.h"unsigned char display[3]={0,0,0};//顯示數(shù)據(jù)void main(void){ unsigned char Key;LCD_init();delay_nms(50);while(1){Key = keyboard_Scan
用單片機P1口擴展成4*4的鍵盤 按下按鍵點亮P0口的LED矩陣鍵盤的擴展不算復(fù)雜 主要是檢測代碼部分比較復(fù)雜IO擴展原理矩陣鍵盤又稱行列鍵盤,它是用四條I/O線作為行線,四條I/O線作為列線組成的鍵盤。在行線和列線的每
stm32f030開發(fā)板。使用HAL庫。狀態(tài)機做debounce消抖。col列,Pin配置為PP推挽輸出模式;row行,Pin配置為Input模式,啟用內(nèi)部上拉電阻。代碼如下:.h文件/***Name:keypad.h*Faq:www.mazclub.com*/#ifndefKEYPAD_H#de