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

單片機中斷矩陣鍵盤

發布時間: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;
//清中斷標志
}

閱讀全文

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

熱點內容
java跳轉到jsp 瀏覽:819
327平方根演算法 瀏覽:216
win7美化命令行終端 瀏覽:797
免加密狗圖片 瀏覽:485
一隻透明的鳥是什麼app 瀏覽:817
空氣壓縮機油批發商 瀏覽:69
linuxifexist 瀏覽:4
加密tf卡拷入文件 瀏覽:399
山西php工資 瀏覽:673
福州看病預約用什麼小程序app 瀏覽:238
php保留兩位小數不四捨五入 瀏覽:292
黑馬程序員路徑大全 瀏覽:1000
saas平台PHP 瀏覽:333
雲伺服器科學計算配置怎麼選 瀏覽:649
jar解壓命令 瀏覽:609
php正則問號 瀏覽:299
無線已加密不可上網是怎麼了 瀏覽:464
什麼app可以免費做手機 瀏覽:376
異性下載什麼app 瀏覽:680
51單片機程序單步視頻 瀏覽:241