『壹』 單片機按鍵鬆手檢測
電機轉
代碼放
等待按鍵鬆手
while()
加
號
即鬆手
再進行電機控制
if(!KEY1)
//檢測按鍵按
{
DelayMs(200);
//
抖
if(!KEY1)
//檢測按鍵確實按
進行按鍵處理
{
while(!KEY1);
//等待按鍵鬆手
Coil_A1
//遇
Coil_A1
用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed);
//改變
參數
調整電機轉速
Coil_B1
DelayMs(Speed);
Coil_C1
DelayMs(Speed);
Coil_D1
DelayMs(Speed);
}
}
『貳』 51單片機按鍵檢測問題
三個二極體、一個電阻,確實是一個與門。
電阻的計算公式,正確。
二極體的導通電壓、電流,選擇的基本合理。
可以進行實際電路的安裝、測試。
實際上,現在的二極體,發光效率,逐年的提高,已經不用 6mA,就很醒目了。
不同顏色的二極體,導通電壓,也有差異,選用較小的,才利於觸發中斷。
得進行反復實驗,才能完成設計。
在程序中,注意不要使 P3.2 輸出低電平,否則,會有較大的灌電流出現。
『叄』 單片機以查詢方式檢測按鍵和以中斷方式檢測按鍵在編程方法上的不同之處
查詢方式對按鍵響應不及時,因此有時要在循環程序中多次對按鍵檢測,如按下按鍵改變流水燈方式,如果正在執行流水燈程序,可能幾秒後才能檢測到按鍵,這時應加流水循環中加入按鍵檢測,當檢測到按鍵按下時,用break語句跳出循環,中斷方式可以立即響應。
『肆』 如何檢測一個按鍵是否被按下
在單片機系統里,按鍵是常見的輸入設備,在本文將介紹幾種按鍵硬體、軟體設計方面的技巧。一般的在按鍵的設計上,一般有三種方案:
一是GPIO口直接檢測單個按鍵,如圖1.1所示;
二是按鍵較多則使用矩陣鍵盤,如圖1.2所示;
三是將按鍵接到外部中斷引腳上,利用按鍵按下產生的邊沿信號進行按鍵檢測,如圖1.3所示;
圖1.1方案一
圖1.2方案二
圖1.3方案三
在以上三種設計上,各有優點和不足。
第一種是最簡單和最基礎的,對於單片機初學者很容易理解和使用,但是缺點是,需要在主循環中不斷檢測按鍵是否按下,並且需要做消抖處理。若主循環中某個函數任務佔用時間較長,則按鍵會有不同程度的「失靈」。
第二種,優點是能夠在有限的GPIO情況下,擴展盡可能多的按鍵。但缺點同上,需要不停檢測按鍵是否按下。
第三種方式是效率最高,不需要循環檢測按鍵是否按下,但是缺點是,需要單片機有足夠的外部中斷介面以供使用;
在以上的三種常見按鍵設計的基礎上,現在分享我學習和工作中總結的按鍵方案。
改進一:在原方案一的基礎上,加上與門電路,使得任何一個按鍵按下,都能產生中斷,然後在中斷裡面識別是哪個按鍵被按下。因此不需要循環掃描,大大提高了效率。方案如圖1.5所示。
只需要每個按鍵對應地增加一個二極體,利用二極體的線與特性,可以實現按下任何按鍵,都能產生中斷信號,但是按鍵之間互不影響。二極體選用普通整流二極體即可,本人親測可行。
圖1.5 改進一
圖1.6 改進二
改進二:在原有的ADC按鍵的基礎上,也可用增加二極體的方式,實現按鍵中斷,並在中斷服務程序里進行AD轉換,從而識別按鍵。電路如圖1.6所示。
改進三:因為按鍵不可避免的有抖動,因此按鍵消抖可以通過硬體消抖和軟體消抖。現在分享一個十分簡單且有效的硬體消抖方法:給按鍵並聯一個104左右的電容。軟體上基本不用處理即可避免抖動。
改進四:在按鍵掃描檢測的方案下,如果主循環中有某個函數佔用時間較長,則按鍵會發生或長或短的「失靈」,現分享我的一個解決方案。將按鍵掃描放到定時器中斷裡面,這樣就可周期性地檢測按鍵按下情況,不受主循環的影響。並且,能解析出按鍵的不同狀態,即按下、按住、彈起、為按下這四種狀態,用以實現更豐富的功能。
但需注意兩點,一是定時器的定時時間,不可過長也不可過短,過長容易檢測不到按下,過短會佔用大量時間資源。二是中斷服務程序需簡單明了,只做檢測用,通過全局變數傳遞,在主循環內完成按鍵響應,中斷服務函數內盡量不要佔用太多時間。
『伍』 單片機引腳檢測按鍵的問題
保護作用,限流電阻,防止IO設置為0,按鍵按下大電流灌入IO口造成IO損壞,
還有在外部特殊情況下,上電到程序IO初始化這段時間的IO的不確定性,如這個時候外部因素造成按鍵時被按下的,也會有大電流灌入。
『陸』 在單片機中怎樣檢測一個按鍵的擊鍵次數
樓上講得很對,就是先設一個變數,比如a,然後檢測是否有按鍵按下,當有鍵按下時,就跳到相應的程序,執行a++,但是要注意一點,就是在按鍵按下的時候要加個延時函數去抖,在加一個語句判斷按鍵是否按下(比如C語言的while語句),只有這樣,才能正確判斷按鍵按下的次數。
『柒』 單片機按鍵檢測程序
P3=0xfe; //P3=0b1111 1110,令P3.0=0,同時令高四位為高電平,作好讀埠准備(51IO特點)
temp=P3; //讀回P3口的狀態
temp=temp&0xf0; //temp&1111 0000,0與任何數結果為0,把temp變數的低四位屏蔽了,高四位因為任何數與1等於它本身,所以把高四位對應的埠狀態讀進來。
while(temp!=0xf0) //上步處理後,高四為不全為1,說明有按鍵按下(結合矩陣鍵盤的電路結構才能理解,這里不方便上圖)
{
delay(5);
temp=P3;
temp=temp&0xf0;//這三句跟上面重復,功能是軟體消抖
while(temp!=0xf0) //延時一段時間後判斷還有按鍵按下,說明是真有按鍵按下,進入按鍵掃描與鍵值的判斷,否則可能是意外抖動引起的,就不進行按鍵掃描。
{
temp=P3;
switch(temp).....
我想注釋完應該能讀懂,關鍵是要理解矩陣鍵盤的掃描原理。
『捌』 檢測按鍵是否按下,應注意什麼問題(單片機)
檢測按鍵是否按下,一要注意是」消抖「;二要注意按鍵的」抬起「和按下狀態。前者一般加幾十毫秒延時。後者看程序要求,是確定按下後,等待抬起才退出鍵盤檢測,還是直接退出。
『玖』 單片機怎樣識別按鍵值
你的這個問題問的太沒有水平了,我本來不想回答的我是實在看不下去了,這個問題對沒有接觸單片機的人是很有難度的,對於了解單片機的人簡直是1+1=2就這么簡單,單片機統稱處理器內部結構操作非常簡單,單片機IO可以做輸出、和輸入簡單一點說,寫程序就是控制單片機的IO埠輸出高電平或者低電平來控制外圍電路,但是單片機也可以檢測外圍電路的輸入電平,下面我來給你做個詳細介紹:
例如:單片機P2.4腳接了一個按鍵,按鍵另一端接GND,當按鍵按下後P2.4接直和GND連接到了一起,這時候單片機P2.4腳就低電平,那麼我們就利用單片機的內部程序來判斷P2.4腳是否為低電平,如果為低電平那麼說明就有按鍵按下,這樣說你能理解嗎!
intmain(void)
{
while(1)
{
if(P2.4==0)//判斷按鍵是否按下
{
延時去抖動,//判斷這里加個延時,看看是不是干擾
if(P2.4==0)//在判斷一次按鍵是否按下
{
//按鍵確實按下在這里只需相應的程序
}
}
}
}