1. 如何使用STC單片機按鍵設置延時
這個就很簡單了,可以用定時器來做。定時時間50毫秒,用一個變數如Count來計50毫秒的個數,再用一個全局變數來計設定的時間如SetTime。
當按鍵按下時,改變SetTime的值,比較的時候注意把這個值換算成和Count一樣的單位,比較一下就可以了
2. 單片機如何實現多按鍵同時控制
先設定8個按鍵標志位,
再進行按鍵掃描,開機,關機,暫停,繼續四個功能通過短按和長按區分,當檢測到按鍵按下後,將相應的標志位置1,向串列輸入口rxd發送命令後再將標志位清零.
按鍵掃描可以採用定時器中斷定時掃描.
按鍵時間長短控制,當檢測到有鍵按下時暫停定時器,延時判斷長短按鍵,再打開定時器,繼續...
3. 單片機中怎樣設置一個變數控制按鍵數
可以有位定位的位變數來控制按鍵,也可以用埠來控制。
當按鍵被按下的時候,電路導通接地,I/O口為低電平。當按鍵未被按下時,電路斷開,I/O口保持高電平。當檢測到某一個按鍵按下時,對我們設置的一個變數(下邊用keynumber)賦值,這樣就實現了輸入的效果。
一般的按鍵所用開關為機械彈性開關,當機械觸點斷開、閉合時,由於機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,假如不加以處理,會導致按鍵被識別為按下多次。為了不產生這種現象而作的措施就是按鍵消抖。
4. 單片機的按鍵功能是什麼
你們知道單片機的每個按鍵的具體功能嗎?下面是我收集整理關於單片機的每個按鍵的具體功能的資料以供大家參考學習,希望大家喜歡。·
鍵盤的分類:
鍵盤分編碼鍵盤和非編碼鍵盤。
鍵盤上閉合鍵的識別由專用的硬體編碼器實現,並產生鍵編碼號或鍵值的稱為編碼鍵盤,如計算機鍵盤;
而靠軟體編程來識別的稱為非編碼鍵盤。
在單片機組成的各種系統中,用的最多的是非編碼鍵盤。也有用到編碼鍵盤的。
非編碼鍵盤有分為:獨立鍵盤和行列式(又稱為矩陣式)鍵盤。
本文主要討論矩陣鍵盤(獨立鍵盤比較簡單可以與此類比),下面是矩陣鍵盤的電路連接圖。
如果單片機檢測到的是抖動部分,則無法按鍵判斷是否有效,所以我們需要加入防抖程序。
註:也可以通過硬體防抖,如上圖(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);
}
}
5. 51單片機如何實現按鍵的長按與短按功能,嘗試過很多方法都不行,請高手多賜教,多謝了(想是簡單,做是難)
這個真心不難,就是簡單的c語言判定就行了,《C程序設計語言》,實在看不了就看譚總寫的那本c語言。給你寫過偽代碼,
if(key=ReadKey())//讀取按鍵,判斷有無按鍵按下去,沒按鍵按下,這里返回0值是不進入這個函數的
{
delay(x);//延時一段時間,寫過循環就行了
if(!ReadKey())//在次讀取按鍵值,實際上按下去按鍵是低電平(原理圖一般都是這樣做的)
{
return 已經鬆手了( 這里是高電平了返回0了)
6. 51單片機如何控制按鈕。
什麼單片機按鍵原理都差不多的,准確來說不是控制,而是識別。識別到按下就行
7. 單片機按鍵功能
按鍵按照結構原理可分為兩類,一類是觸點式開關按鍵,如機械式開關、導電橡膠式開關等;另一類是無觸點式開關按鍵,如電氣式按鍵,磁感應按鍵等。前者造價低,後者壽命長。目前,微機系統中最常見的是觸點式開關按鍵。
2.輸入原理
在單片機應用系統中,除了復位按鍵有專門的復位電路及專一的復位功能外,其它按鍵都是以開關狀態來設置控制功能或輸入數據的。當所設置的功能鍵或數字鍵按下時,計算機應用系統應完成該按鍵所設定的功能,鍵信息輸入是與軟體結構密切相關的過程。
對於一組鍵或一個鍵盤,總有一個介面電路與CPU相連。CPU可以採用查詢或中斷方式了解有無將鍵輸入,並檢查是哪一個鍵按下,將該鍵號送入累加器ACC,然後通過跳轉指令轉入執行該鍵的功能程序,執行完後再返回主程序
8. 51單片機如何設置同一個按鍵,按一下顯示123456,再按一下顯示321456
51單片機用一個按鍵,定義一個位變數,或一個8位的變數,按一下鍵變數為1,再按一下變數為0。然後顯示時,再根據變數值來決定顯示內容,變數為1,顯示123456,變數為0顯示321456。
9. 單片機怎麼設置按鍵
年年順景則源廣 歲歲平安福壽多 橫批:吉星高照
10. 設置單片機的一個按鍵,按一下,紅燈亮,再按一下,黃燈亮,再按一下,藍燈亮。再按一下。綠燈亮。
你應該提供一下 shining();這個函數
也許是卡在函數里死循環了出不來。
還有一點就是
下面這一段,最好不要放在keyscan函數裡面
鍵盤程序只負責鍵盤就好
把下面這段單獨做個顯示函數
switch(num)
{
case 1: P0=0xf0;
break;
case 2: P0=0x0f;
break;
case 3: P2=0xf0;
break;
case 4: P2=0x0f;
break;
case 5: P0=0x00;P2=0x00;
break;
}