導航:首頁 > 操作系統 > 單片機中斷矩陣鍵盤

單片機中斷矩陣鍵盤

發布時間:2022-12-20 05:06:45

A. 51單片機矩陣鍵盤

第一個程序,在定時中斷函數中,延時,並不合適。

第二個程序,不穩定,還是按鍵檢測,太拖拉了。

4*4 矩陣鍵盤的檢測,不用寫這么多的程序。

我的網路空間裡面有實用的程序。

B. 求MSP430單片機4X4矩陣鍵盤的中斷掃描程序

//msp430F149
4*4矩陣鍵盤P1口中斷掃描
#include<msp430x14x.h>
#define
KEY_DIR
P1DIR
#define
KEY_OUT
P1OUT
#define
KEY_IN
P1IN
#define
KEY_IE
P1IE
#define
KEY_IES
P1IES
#define
KEY_IFG
P1IFG
/***************全局變數***************/
unsigned
char
Key_Val;
//存放鍵值
void
CtrlKey(unsigned
char
sw);
//控制鍵盤開關//sw=0關
sw=1開
/*******************************************
函數名稱:Init_Keypad

能:初始化掃描鍵盤的IO埠

數:無
返回值
:無
********************************************/
void
Init_Keypad(void)
{
KEY_DIR
=
0x0f;
//P1.0~P1.3設置為輸出狀態,P1.4~P1.7輸入
狀態(上拉H)
KEY_OUT=0;
KEY_IES
=0xf0;
//P1.4~P1.7允許中斷
KEY_IE
=0xf0;
//P1.4~P1.7下降沿觸發中斷
KEY_IFG=0;
//中斷標志清0
Key_Val
=
0;
}
/*******************************************
函數名稱:Check_Key

能:掃描鍵盤的IO埠,獲得鍵值

數:無
返回值
:無
********************************************/
//p14\5\6\7
接上拉電阻
/***************************************
key_Val
對應鍵值
列:[p14]
[p15]
[p16]
[p17]




行:
[p13]→
1
2
3
4
[p12]→
5
6
7
8
[p11]→
9
10
11
12
[p10]→
13
14
15
16
***************************************/
void
Check_Key(void)
{
unsigned
char
row
,col,tmp1,tmp2;
unsigned
char
keymap[]
=
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};//設置鍵盤邏輯鍵值
與程序計算鍵值的映射
tmp1
=
0x08;
for(row
=
0;row
<
4;row++)
//行掃描
{
KEY_OUT
=
0x0f;
//P1.4~P1.7輸出全1
KEY_OUT
-=
tmp1;
//P1.4~p1.7輸出四位中有一個為0
tmp1
>>=1;
if((KEY_IN
&
0xf0)<0xf0)
//是否P1IN的P1.0~P1.3中有一位為0
{
tmp2
=
0x10;
//
tmp2用於檢測出哪一位為0
for(col
=
0;col
<
4;col++)
//
列檢測
{
if((KEY_IN
&
tmp2)
==
0x00)
//
是否是該列,等於0為是
{
Key_Val
=
keymap[row*4
+
col];
//
獲取鍵值
return;
//
退出循環
}
tmp2
<<=
1;
//
tmp2右移1位
}
}
}
}
/*******************************************
函數名稱:delay

能:延時約15ms,完成消抖功能

數:無
返回值
:t=
tmp*5*clk
根據使用時鍾調整tmp值
********************************************/
void
delay(void)
{
unsigned
int
tmp;
for(tmp
=
12000;tmp
>
0;tmp--);
}
/*******************************************
函數名稱:Key_Event

能:檢測按鍵,並獲取鍵值

數:無
返回值
:無
********************************************/
void
Key_Event(void)
{
unsigned
char
tmp;
KEY_OUT
=0;
//
設置P1OUT全為0,等待按鍵輸入
tmp
=
KEY_IN;
//
獲取
p1IN
if((tmp
&
0xf0)
<
0xf0)
//如果有鍵按下
{
delay();
//消除抖動
Check_Key();
//
調用check_Key(),獲取鍵值
}
}
/*********************************************************************
控制打開或者關閉鍵盤中斷
SW=
0:關閉;
ELSE:打開
*********************************************************************/
void
CtrlKey(unsigned
char
sw)
{
if(sw==0)
KEY_IE
=0;
//關閉埠中斷
else
KEY_IE
=0xf0;
//打開埠中斷
}
/*埠1按鍵中斷*/
#pragma
vector=PORT1_VECTOR
__interrupt
void
Port(void)
{
if((KEY_IFG&0xf0)!=0)
{
Key_Event();
if(Key_Val!=0)
//鍵值!=0有鍵按下
{
CtrlKey(0);
//關鍵盤中斷
}
}
KEY_IFG=0;KEY_OUT=0;
//清中斷標志
}

閱讀全文

與單片機中斷矩陣鍵盤相關的資料

熱點內容
抖音生活圈小程序源碼 瀏覽:620
建行預約解壓需要多久時間 瀏覽:568
命令式介面 瀏覽:399
電腦伺服器域名地址怎麼查 瀏覽:340
什麼行業要用編程 瀏覽:297
三洋立風櫃壓縮機 瀏覽:296
微拍app為什麼下載不了了 瀏覽:257
非常好的期貨5分鍾公式源碼 瀏覽:4
linuxcentos7安裝 瀏覽:691
華為網盤文件夾加密 瀏覽:74
安卓手機什麼真人游戲好玩 瀏覽:772
崑山加密軟體需求 瀏覽:270
蘋果照片壓縮包怎麼打開 瀏覽:796
檢測溫濕度和二氧化碳的單片機 瀏覽:964
安卓手機雨滴怎麼隱藏 瀏覽:587
pdf文件轉換器word 瀏覽:987
vscodepython模塊方法 瀏覽:344
如何知道伺服器有什麼漏洞 瀏覽:902
java電商訂單支付源碼 瀏覽:102
android手機滑鼠 瀏覽:465