基於IO掃瞄的簡單鍵盤驅動

2021-08-21 03:07:57 字數 1007 閱讀 2866

所需驅動的鍵盤,3行6列,所以要掃瞄這個鍵盤,需要9個gpio

鍵盤部分原理圖如下:

3個行gpio接上拉電阻,正常狀態為高電平

將三個行gpio設定為輸入引腳,將六個列gpio設定為輸出引腳。

當按鍵沒有按下的時候,電路處於斷開狀態,不管在列gpio輸入高電平還是低電平,從行gpio中讀出的始終是高電平,當按鍵被按下的時候,電路閉合,如果在列gpio輸入低電平,那麼在相應行的gpio可以讀到低電平。

因此,我們可以從第一列開始,輸入低電平(其他列輸入高電平,這樣即使是按鍵被按下,也不會影響當前列的掃瞄),啟用該列,然後依次讀取每乙個行gpio,如果該行gpio可以讀到低電平,那麼就可以確定被按下的按鍵屬於該行,進而便確定了被按下的按鍵的位置。

程式將被按下按鍵的行號和列號儲存在乙個short資料裡面,行號位於高八位位元組,列號儲存在低八位位元組

unsigned int col_gpio[6] = ;

unsigned int row_gpio[3] = ;

static unsigned long activate_col(int col)

udelay(1);

return 0;

}static unsigned short get_down_row(void )

}return keys;

}static unsigned short get_keys(void)

return keys;

}static unsigned short keypad_sacn(void )

雷射掃瞄匹配之基於點的掃瞄匹配

本文主要將雷射掃瞄匹配分為三類 1 基於點的掃瞄匹配 2 基於特徵的掃瞄匹配 3 基於數學特性的掃瞄匹配。下面重要介紹基於點的掃瞄匹配 一,基於點的掃瞄匹配直接對掃瞄獲取的原始資料點進行操作,其中icp 演算法是比較成熟的一種演算法。標準icp演算法兩個關鍵步驟主要為 1 通過歐式距離最近建立點間對...

基於流的I O操作

一 對快取的操作 include void setbuf file fp,char buf void setbuffer file fp,char buf,size t size void setlinebuf file fp int setvbuf file fp,char buf,int mod...

基於Linux的I O操作

如 mathod 01.c include include include include include include int main void else if close fd perror close exit 1 else exit 0 read write及lseek函式 語法格式 如...