微控制器控制的矩陣鍵盤掃瞄程序集

2023-01-27 05:09:04 字數 2599 閱讀 7224

各種各樣的矩陣鍵盤掃瞄程式集

矩陣鍵盤的掃瞄對初學者來說是不可避免的,然而也相對來說有點難度.

鑑於此,我整理了一下,我所遇到的矩陣鍵盤掃瞄程式集,將相繼貼上來,供大家參考!

說明:這些大多都是網上轉貼來的,其所有權歸原作者!

謝謝合作.

最簡單矩陣鍵盤掃瞄程式

key:mov p0,#00001111b;上四位和下四位分別為行和列,所以送出高

低電壓檢查有沒有按鍵按下

jmp k10;跳到k10處開始掃瞄,這裡可以改成其它條件轉移指令來決

定本次掃瞄是否要繼續,例如減1為0轉移或者位為1或0才轉移,這主

要用來增加功能,確認上一按鍵功能是否完成?是否相當於經過了延

時?是否要封鎖鍵盤?

goend:jmp kend;如果上面判斷本次不執行鍵盤掃瞄程式,則立即轉

到程式尾部,不要浪費cpu的時間

k10:jb p0.0,k20;掃瞄正式開始,先檢查列1四個鍵是否有鍵按下,

如果沒有,則跳到k20檢查列2

k11:mov p0,#11101111b;列1有鍵按下時,p0.0變低,到底是那乙個鍵

按下?現在分別輸出各行低電平

jb p0.0,k12;該行的鍵不按下時,p0.0為高電平,跳到到k12,檢查其

它的行mov r1,#1;如果正好是這行的鍵按下,將暫存器r0寫下1,表示1號鍵

按下了k12:mov p0,#11011111b

jb p0.0,k13

mov r1,#2;如果正好是這行的鍵按下,將暫存器r0寫下2,表示2號鍵

按下了k13:mov p0,#10111111b

jb p0.0,k14

mov r1,#3;如果正好是這行的鍵按下,將暫存器r0寫下3,表示3號鍵

按下了k14:mov p0,#01111111b

jb p0.0,kend;如果現在四個鍵都沒有按下,可能按鍵鬆開或干擾,

退出掃瞄(以後相同)

mov r1,#4如果正好是這行的鍵按下,將暫存器r0寫下4,表示4號鍵

按下了jmp kend;已經找到按下的鍵,跳到結尾吧

k20:jb p0.1,k30;列2檢查為高電平再檢查列3、4

k21:mov p0,#11101111b;列2有健按下時,p0.0會變低,到底是那一

行的鍵按下呢?分別輸出行的低電平

jb p0.1,k22;該行的鍵不按下時p0.0為高電平,跳到到k22,檢查另

外三行mov r1,#5;如果正好是這行的鍵按下,將暫存器r0寫下5,表示5號鍵

按下了(以後相同,不再重複了)

k22:mov p0,#11011111b

jb p0.1,k23

mov r1,#6

k23:mov p0,#10111111b

jb p0.1,k24

mov r1,#7

k24:mov p0,#01111111b

jb p0.1,kend

mov r1,#8

jmp kend;已經找到按下的鍵,跳到結尾吧(以後相同,不要重複了

) k30:jb p0.2,k40

k31:mov p0,#11101111b

jb p0.2,k32

mov r1,#9

k32:mov p0,#11011111b

jb p0.2,k33

mov r1,#10

k33:mov p0,#10111111b

jb p0.2,k34

mov r1,#11

k34:mov p0,#01111111b

jb p0.2,kend

mov r1,#12

jmp kend

k40:jb p0.3,kend

k41:mov p0,#11101111b

jb p0.3,k42

mov r1,#13

k42:mov p0,#11011111b

jb p0.3,k43

mov r1,#14

k43:mov p0,#10111111b

jb p0.3,k44

mov r1,#15

k44:mov p0,#01111111b

jb p0.3,kend

mov r1,#16

kend: ret

行列掃瞄鍵盤可檢測出雙鍵按下

#include <>

#define ulong unsigned long

#define uint unsigned int

#define uchar unsigned char

extern void delay(unsigned int x);

unsigned char tab_key行列式鍵盤對映

keypin_h = keypin_h|0xf0;

return(fnkeycode(keytemp));

} unsigned char fnkeycode(unsigned char key根據鍵盤

對映表輸出順序鍵值

{switch(key)

case 0x111 鍵 //

key = 0x01;

break;

微控制器控制廣告燈的左移右移

廣告燈的左移右移 1 實驗任務 做單一燈的左移右移,硬體電路如圖4.4.1所示,八個發光二極體l1 l8分別接在微控制器的p1.0 p1.7介面上,輸出 0 時,發光二極體亮,開始時p1.0 p1.1 p1.2 p1.3 p1.7 p1.6 p1.0亮,重複迴圈。2 電路原理圖 圖4.4.1 3 系...

基於微控制器的水位控制系統設計

萍鄉高等專科學校 微控制器課程設計報告 姓名 學號 1 專業 應用電子 系別 機械電子工程系 目錄1 概述 3 2 設計的基本任務和要求 4 2.1 基本功能 4 2.2塔水位控制原理 4 2.3 系統硬體總體方案 5 3 控制系統方案設計 5 3.1系統硬體方案 5 3.2 核心晶元at89c51...

微控制器在3G基站控制中的應用

摘要 在3g基站控制板設計中,採用微控制器at89s8252完成了對其他單板資訊的採集 網路配置 裝置執行監控以及與主cpu通訊等功能,說明了低檔器件在高檔裝置中同樣具有應用價值。關鍵詞 3g wcdma 基站控制板微控制器 rs485 spi 第三代移動通訊 3g 是乙個複雜而龐大的系統,其採用的...