先說矩陣鍵盤,因為(wei) 我寫(xie) 的組合鍵代碼是在矩陣鍵盤的基礎上寫(xie) 的,當然在獨立按鍵上寫(xie) 組合鍵更簡單一些。所以當你矩陣鍵盤的組合鍵會(hui) 寫(xie) 的時候,你在獨立按鍵上的組合鍵也就會(hui) 寫(xie) 了。
矩陣鍵盤的檢測和獨立按鍵有很大的區別,但是究其本質還是一樣的。
先看一下矩陣鍵盤的原理圖:

矩陣鍵盤原理圖
由於(yu) 矩陣鍵盤中每一個(ge) 按鍵的兩(liang) 個(ge) 接線口都是接在IO口上的,所以我們(men) 就必須在軟件裏麵控製單片機在每個(ge) 獨立按鍵的兩(liang) 端加上不同的電平。
【注】:獨立按鍵很簡單,直接在一端接地就行了。
從(cong) 上麵的原理圖中可以看出 P1 口的高四位控製 行,第四位控製 列;所以我們(men) 就可以寫(xie) P1 = 0X0F 或者寫(xie) P1 = 0XF0,這樣就實現了在每一個(ge) 獨立按鍵兩(liang) 端加上不同的電平。
代碼編寫(xie) 流程和獨立按鍵一樣,第一步要先檢測到按鍵按下,根據上麵的原理圖,矩陣鍵盤檢測按鍵是否按下隻要給 P1 口賦值 0X0F,然後檢測 P1 口的值是否還是 0X0F即可。
之後就要消除抖動,消除抖動的方法還是一樣,延時一段時間即可,如圖:

單片機矩陣鍵盤消除抖動
之後就判斷具體(ti) 是哪個(ge) 按鍵按下就行了。
【注】矩陣鍵盤複雜就是複雜在這裏。
判斷到底是哪個(ge) 按鍵按下的思路有兩(liang) 種:
1、逐行掃描
逐行掃描就是說先掃描第一行中的哪個(ge) 按鍵按下了,如果沒有再掃描第二行,看一下是不是第二行裏的某個(ge) 按鍵按下了,如果還沒有找到按下的那個(ge) 按鍵,那麽(me) 就繼續掃描第三行、第四行,知道找出哪個(ge) 按鍵被按下了。這個(ge) 代碼實現比較簡單,而且這種掃描方法不怎麽(me) 常用,效率不高,所以這裏我就不寫(xie) 了。
2、行列掃描
行列掃描就是說先掃描所有的行,確定是哪一行的按鍵被按下了,之後再掃描所有的列,找出哪一列有按鍵被按下了,這樣隻要掃描兩(liang) 次就可以確定出到底是哪個(ge) 按鍵被按下了。
具體(ti) 代碼實現如下:
1、行掃描:

單片機矩陣鍵盤行掃描
2、列掃描:

單片機矩陣鍵盤列掃描
最後別忘了按鍵的鬆開檢測:

單片機矩陣鍵盤按鍵鬆開檢測
這樣矩陣鍵盤的編寫(xie) 就說完了,下麵說組合鍵,寫(xie) 第七篇的時候我給它起名字叫複合按鍵,現在覺得不太好,要不就叫組合鍵吧。
組合鍵就是說當按住一個(ge) 按鍵的同時再按另一個(ge) 按鍵的時候,會(hui) 有不同的效果。比如:Ctrl+C是複製、Shift+數字鍵可以敲出特殊字符等等。
代碼編寫(xie) 思路就是:當按住第一個(ge) 按鍵的時候,隻要這個(ge) 按鍵不鬆開就一直檢測能夠和它組合的按鍵,根據按鍵的不同組合實現不同的效果。
代碼如下:

單片機矩陣鍵盤組合鍵
大家對照代碼仔細看一下就明白了。