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

單片機矩陣鍵盤改中斷

發布時間:2023-08-01 16:20:09

⑴ 求個單片機矩陣鍵盤(4*4)中斷(記得要中斷)的C語言程序。。求高手自己寫個啊

很簡單的啊,不太清楚你的電路圖,我把主要程序寫一下:

#include<reg52.h>
unsigned char flag=0;//設置flag作為標志位,初值為0,一旦產生中斷,將其置1
void main()
{
EA=1;//開總中斷
EX0=1;//開外部中斷0 ,假設是由P3.2產生的中斷
IT0=1;//設置產生中斷的方式,這是表示下降沿觸發
P0=0X0F;//假設矩陣鍵盤接P0口,給所有列線低電平,所有行線高電平
while(1)
{
if(flag==1) //這個是表示,如果中斷不產生,下面的程序不會運行,只有中斷了,才會鍵盤掃描
{
按鍵掃描程序,這個我就不寫了,寫法有很多啦
}
數碼管顯示程序,這個我也不寫了,不曉得你是什麼電路圖
}
}

void scan() interrupt 0
{
flag=1;//表示,一旦中斷產生了,將flag置1
}

希望對你有用,呵呵

⑵ 怎樣用3*4矩陣鍵盤,改變51單片機程序里的數據

//考慮易讀,使用3個標志
char flag=0; //修改狀態=1
char f_change=0; //日期修改標志=1,時間修改標志=2,var修改標志=3
char num_on=0; //數字鍵盤

//按鍵:
//11=修改, 10=退出修改
//1=date,2=time,3=var為多功能鍵,必須使用num_on來切換
//按鍵還需有個keydown()判斷鍵是否按下

/*****************************************************/
//判斷鍵是否按下
/*****************************************************/
int keydown(void)
{

}
void proc_key(void)
{
switch(f_change)
{
case 1:funDate(K);break;
case 2:funTime(K);break;
case 3:funVar(K);break;
default:break;
}
}
main()
{
.....
while(1)
{
if(keydown())
{
K=keyscan();
switch(K)
{

case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
if(num_on)
{
proc_key();
}
break;
case 1:
case 2:
case 3:
if(num_on)
{
proc_key();break;
}

if(!f_change && flag)
{
f_change=K;
num_on = 1;
}
break;
case 10:f_change=0;flag=0;break; //結束修改
case 11:f_change=0;flag=1;break;
default:break;
}
}
}
}

⑶ 用亞龍單片機實訓裝置,通過51單片機控制機械手,我把矩陣鍵盤的鍵盤掃描程序放在定時器中斷里,

你放到中斷里可能會出現這樣的情況,程序運行到鍵盤檢查段時候,你沒有設置跳出中斷,這樣說吧!程序在掃描鍵盤時候需要有鍵盤返回的值,當你鍵盤沒有任何反應(沒去按它)它就一直在檢查檢查,就沒有跳出中斷,所以你的機械手死在了這個無限循環的檢查中。這樣設置,中斷計時,到點了中斷一下檢查一下鍵盤值,檢查完後馬上跳出來讓MCU去執行其他程序段。

⑷ 求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;
//清中斷標志
}

閱讀全文

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

熱點內容
如何讓軟體在多個安卓系統上運行 瀏覽:571
java判斷半形 瀏覽:880
java判斷正負 瀏覽:320
刷頭條程序員的日常 瀏覽:102
吉林程序員吐槽 瀏覽:243
單片機溫度范圍 瀏覽:419
程序員為什麼素質低 瀏覽:897
可愛的程序員小姐姐 瀏覽:145
伺服器上網站的地址 瀏覽:798
蘋果平板如何找到app資源庫 瀏覽:321
阿里雲可以雲伺服器地址 瀏覽:249
熊貓繪畫app如何導入圖片 瀏覽:555
如何自己編輯手機app 瀏覽:924
程序員那麼可愛帶的項鏈 瀏覽:532
安卓系統導航mic什麼意思 瀏覽:192
編譯sdk如何輸出bin文件 瀏覽:677
如何用html5開發app 瀏覽:142
怎麼隱藏蘋果的app 瀏覽:327
上海捷豹空氣壓縮機 瀏覽:457
51單片機換行 瀏覽:738