㈠ 單片機如何實現多按鍵同時控制
先設定8個按鍵標志位,
再進行按鍵掃描,開機,關機,暫停,繼續四個功能通過短按和長按區分,當檢測到按鍵按下後,將相應的標志位置1,向串列輸入口rxd發送命令後再將標志位清零.
按鍵掃描可以採用定時器中斷定時掃描.
按鍵時間長短控制,當檢測到有鍵按下時暫停定時器,延時判斷長短按鍵,再打開定時器,繼續...
㈡ 51單片機實現多按鍵輸入
很簡單呀!!
先說30個按鍵吧,如果要加晶元,用7279就輕松搞定了,它還能實現多鍵按下的處理,不過那種處理很簡單,後鍵打斷前鍵的程序,或者不打斷,並不檢測幾個鍵組合的情況。如果不想加晶元,接到單片機上,可以採用交叉連接方法呀,單片機書上都有,網上一搜索一大片。
至於程序嗎,也很簡單,你想,交叉布局的話,當一個按鍵按下後,單片機的經緯線中,各有一根是通過按鍵導通的,當有兩個按鍵按下時,最少會有三根線導能,等等,這就需要你列個表,計算好,算出每種按鍵組合後,它反應到單片機的I/O口上會是什麼狀態,就可以計算出單片機讀到哪個數據時,就該是這個組合.
說的我都有點嫌羅嗦了,但確實很簡單.有問題的話再留言說吧
㈢ 單片機按鍵功能
按鍵按照結構原理可分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關等;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。
2.輸入原理
在單片機應用系統中,除了復位按鍵有專門的復位電路及專一的復位功能外,其它按鍵都是以開關狀態來設置控制功能或輸入數據的。當所設置的功能鍵或數字鍵按下時,計算機應用系統應完成該按鍵所設定的功能,鍵信息輸入是與軟體結構密切相關的過程。
對於一組鍵或一個鍵盤,總有一個介面電路與CPU相連。CPU可以採用查詢或中斷方式了解有無將鍵輸入,並檢查是哪一個鍵按下,將該鍵號送入累加器ACC,然後通過跳轉指令轉入執行該鍵的功能程序,執行完後再返回主程序
㈣ 單片機的按鍵功能是什麼
你們知道單片機的每個按鍵的具體功能嗎?下面是我收集整理關於單片機的每個按鍵的具體功能的資料以供大家參考學習,希望大家喜歡。·
鍵盤的分類:
鍵盤分編碼鍵盤和非編碼鍵盤。
鍵盤上閉合鍵的識別由專用的硬體編碼器實現,並產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤;
而靠軟體編程來識別的稱為非編碼鍵盤。
在單片機組成的各種系統中,用的最多的是非編碼鍵盤。也有用到編碼鍵盤的。
非編碼鍵盤有分為:獨立鍵盤和行列式(又稱為矩陣式)鍵盤。
本文主要討論矩陣鍵盤(獨立鍵盤比較簡單可以與此類比),下面是矩陣鍵盤的電路連接圖。
如果單片機檢測到的是抖動部分,則無法按鍵判斷是否有效,所以我們需要加入防抖程序。
註:也可以通過硬體防抖,如上圖(b)。
功能:矩陣鍵盤
(按相應的按鍵,數碼管從0~F的顯示)
單片機:AT89S52
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit DAT=P0^3;
sbit CLK=P0^2;
uchar temp,h;
void delay(uint); //延遲程序
void sendbyte(uchar); //數碼管顯示
void keyscan(); //按鍵掃描
uchar code tab[]={
0xed,0x09,0xbc,0x9d,0x59,0xd5,
0xf5,0x0d,0xfd,0xdd,0x7d,0xf1,
0xe4,0xb9,0xf4,0x74,0x00} ; //0-F, 全滅
void main (void)
{
sendbyte(16); //初始時數碼管無顯示
while(1)
{
keyscan(); //按鍵掃描
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void sendbyte(uchar byte)
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1; //右移位賦值
}
}
void keyscan()
{
/*第一行按鍵的掃描*/
P2=0xfe; //確定第一行的按鍵有效
temp=P2; //將其賦給一個變數(處理I/O口時,一般先賦值給一個變數,然後通過處理變數來處理I/O口)
temp=temp&0xf0; //用於檢測第一行的哪個按鍵按下
while(temp!=0xf0) /*這個部分只要是用來消除按下抖動的*/
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0) //這個地方,已經消除了按下抖動,P2口的值已經確定
{
temp=P2; //將P2口得值賦給變數
switch(temp) //這個switch語句,用來確定哪一個按鍵按下時,數碼管的顯示值
{
case 0x7e:h=0;
break; //這個break很重要,表示如果有匹配的值,就跳出switch語句,防止程序跳不出來。
case 0xbe:h=1;
break;
case 0xde:h=2;
break;
case 0xee:h=3;
break;
default : h=16;
break;
}
while(temp!=0xf0) /*這個部分只要是用來消除釋放抖動的*/
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h); //送給數碼管顯示
}
}
/*第二行按鍵的掃描*/
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7d:h=4;
break;
case 0xbd:h=5;
break;
case 0xdd:h=6;
break;
case 0xed:h=7;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第三行按鍵的掃描*/
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x7b:h=8;
break;
case 0xbb:h=9;
break;
case 0xdb:h=10;
break;
case 0xeb:h=11;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
/*第四行按鍵的掃描*/
P2=0xf7;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0x77:h=12;
break;
case 0xb7:h=13;
break;
case 0xd7:h=14;
break;
case 0xe7:h=15;
break;
default : h=16;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
sendbyte(h);
}
}
㈤ 單片機按鍵怎麼實現長按和短按和組合鍵功能
是在實物開發板上實現嗎?
長按和短按很好實現,當檢測到有按鍵按下了,就開始計時,用定時器,檢測到按鍵松開了,停止計時,然後根據計時的時間長短,確定是長按還是短按,比如,時間小於0.5秒為短按,超過3秒為長按,其餘時間為無效,不夠長按時間,就為無效按鍵,也不算是短按的。這樣可以排除是隨意按鍵的可能。
組合鍵就好辦了,檢測到同時按兩個,三個,就為組合鍵,至於是什麼功能,那由你自己定義了。
㈥ 89C51單片機矩陣鍵盤如何實現組合鍵功能
組合鍵,需要在實物開發板才能實現,模擬就不容易操作。
組合鍵,至少有兩個鍵同時按下,方法還是掃描矩陣按鍵,判斷出什麼鍵按下了,而且識別出兩個鍵同時按下了,就作為組合鍵處理唄。至於什麼功能,你自己定義啦。
㈦ 怎麼解決單片機兩個或多個鍵同時按下的情況
解決單片機兩個或多個鍵同時按下的情況的程序:
key1_flag=0;
if(key==1)
{
delay(500);
if(key1==1&&key_flag==0)
{;}
}
key1_flag=key1;
解釋:
1)當key1(帶自鎖)作為51單片機輸入信號被按下時,再按key2(不帶自鎖)時,響應就有問題了;
2)如果是先判斷key1的話,加個延時,然後再判斷key2的電平,理論上沒問題的;
3)或者如果你key1自鎖的時候為高電平,直接
while(key1)
{;}。
㈧ 單片機復合鍵設計,幾個鍵一起按下顯示。例如:K1、K2同時按下數碼管顯示3,等等
你的單片機是自帶KBI中斷嗎?如果是,在中斷程序里判斷是不是K1和K2都是低電平,如果是,就說明是復合鍵,置一個復合鍵標志,等中斷結束後,在主程序里判斷這個標志,進行處理。
如果不帶KBI中斷,可以考慮在鍵盤按鍵里處理第一個按鍵時,若鍵沒按下,就等待一段時間,再檢測是不是有其他鍵按下,若有,則為復合鍵
㈨ 求單片機高手~~復合鍵設計,幾個鍵一起按下顯示。例如:K1、K2同時按下顯示3,等等
用單片機設計這個問題還是比較容易的,你可以直接在軟體裡面就可以搞定的,比如k1&&k2同時滿足條件,就顯示3同理下面的
㈩ 單片機中,怎樣設計鍵盤復合鍵
鍵盤復合鍵,是要實現第二功能鍵嗎?就像電腦上的Shift 鍵的功能嗎?
這需要是矩陣鍵盤,獨立按鍵比較少就沒有什麼意義了。
其實,與識別單鍵的原理是一樣的,只要識別出類似的Shift 鍵按下,同時又有其它鍵也按下,就可以實現第二功能鍵啦。