久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11167|回復: 26
收起左側

如何讓單片機按鍵檢測更靈敏?

  [復制鏈接]
ID:191022 發表于 2017-4-25 09:44 | 顯示全部樓層 |閱讀模式
在做單片機按鍵程序的時候,靈敏度和效率難以取舍,各位大俠們,有沒有更好的方法呢?

#include <REGX51.H>
#include <intrins.h>

//獨立鍵盤.無按鍵動作時其返回值num_key=0,否則返回按鍵號num_key
extern unsigned char keyboard_self()
{
        unsigned char num_key=0;//按鍵號
        unsigned char temp=0;//用于讀取P2線上按鍵值
        static unsigned char temp_code=0;//保存按鍵值
        static unsigned char num_check=0;//低電平有效次數
        static unsigned char key_flag=0;//按鍵有效標識

        temp=P2&0xF0;//讀取P2線數據

        if(temp!=0xF0)//低電平判斷
        {
                num_check++;
                if(num_check==10)//連續10次(10ms)低電平有效,則認為按鍵有效
                {
                        key_flag=1;//使能按鍵有效標識
                        temp_code=temp;//保存按鍵值
                }
        }
        else//松手時判斷
        {
                num_check=0;

                if(key_flag==1)//按鍵有效
                {
                        key_flag=0;

                        switch(temp_code)//讀取按鍵號
                        {
                                case 0xE0: num_key=1;  P1=0xf0;
                                           break;
                                case 0xD0: num_key=2;  P1=0x0f;
                                           break;
                                case 0xB0: num_key=3;  P1=0xaa;
                                           break;
                                case 0x70: num_key=4;  P1=0xff;
                                           break;
                        }
                }
        }

        return(num_key);
}

void main()
{
        while(1)
        {
                keyboard_self();
        }
}



回復

使用道具 舉報

ID:283954 發表于 2022-4-2 16:58 | 顯示全部樓層
看了很多抗抖動的討論,想說幾句,這些抗抖動的例子都只是停留在原理的解說,在實際應用時就是另一回事,必須看應用時按鈕的實際用途。

一個按鈕被按下,單片機一定能被檢測到,如果需要在其他程序被用來處理事件,就SETB一個位做識別,然后離開,根本無需抗抖動,因為大多數程序完成事件處理后回來,早就過了抖動期。如果處理事件的程序事件太短,可以用這個SETB的位跳過按鈕檢測程序,等事件處理程序完成處理事件,把被SETB的位CLR掉,自然就會運行按鈕檢測程序,這樣就不會發生按一次鈕而多次觸發的問題。如果希望按下鈕后確保按鈕必須放開,則在檢測到按下后,進入檢測放開的程序,不斷循環,直到按鈕被放開,但這就浪費單片機的時間了。

這說明在真實應用的中,抗抖動程序是很少用到的,教材只是教你原理。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:191022 發表于 2017-4-25 09:45 | 顯示全部樓層
請各位大俠們多多指點
回復

使用道具 舉報

ID:130231 發表于 2017-4-25 13:27 | 顯示全部樓層
要有消抖函數
回復

使用道具 舉報

ID:138155 發表于 2017-4-25 15:33 | 顯示全部樓層
太靈敏容易誤動作 一般加消抖程序
回復

使用道具 舉報

ID:114924 發表于 2017-4-25 15:48 | 顯示全部樓層
如果你C寫的不好,可以增加一個RC電路一顆4.7K電阻一顆104電容即可
回復

使用道具 舉報

ID:193502 發表于 2017-4-25 17:34 | 顯示全部樓層
用消抖或者中斷吧
回復

使用道具 舉報

ID:187614 發表于 2017-4-25 18:32 | 顯示全部樓層
鍵盤操作在ms級,靈敏度根據自己設計需要吧,也可以增加硬件設計;效率高就需要中斷方式。
回復

使用道具 舉報

ID:7485 發表于 2017-4-25 18:39 | 顯示全部樓層
按鍵消抖只是毫秒級的,不至于影響什么效率吧?如果不加消抖或消抖時間短,容易產生誤動作。
即便是使用中斷,也要防止誤動作。
只要鍵沒問題,也不存在靈敏度的問題。
回復

使用道具 舉報

ID:111634 發表于 2017-4-25 21:12 | 顯示全部樓層
本帖最后由 zl2168 于 2017-4-25 21:19 編輯

按鍵抖動一般是5~10ms,有少數超過10ms。手指按動按鍵最快50~100ms。因此,按鍵消抖不會影響按鍵動作靈敏度,影響按鍵動作靈敏度的是程序編制,程序中按鍵掃描實時性才會影響按鍵動作靈敏度。
鍵盤掃描控制方式.jpg




以上摘自張志良編著《80C51單片機實用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學習51單片機原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學。






回復

使用道具 舉報

ID:112693 發表于 2017-4-27 11:53 | 顯示全部樓層
延時去抖最簡單,最好開關并聯104電容
回復

使用道具 舉報

ID:148552 發表于 2017-4-28 13:54 | 顯示全部樓層
硬件去抖就靈敏了,軟件優化只是輔助作用
回復

使用道具 舉報

ID:190583 發表于 2017-4-28 16:47 | 顯示全部樓層
硬件去做。軟件輔助
回復

使用道具 舉報

ID:194618 發表于 2017-4-28 18:27 | 顯示全部樓層
加個延時函數進行消抖,一般10ms
回復

使用道具 舉報

ID:108302 發表于 2017-4-28 22:15 | 顯示全部樓層
使用中斷
回復

使用道具 舉報

ID:197448 發表于 2017-5-6 19:32 | 顯示全部樓層
我也在找這資料...
回復

使用道具 舉報

ID:191929 發表于 2017-5-6 20:13 | 顯示全部樓層
按鍵一般要消抖,延時個5~~20ms
回復

使用道具 舉報

ID:43128 發表于 2017-5-7 14:23 | 顯示全部樓層
可以加電容
回復

使用道具 舉報

ID:798954 發表于 2020-8-16 11:37 | 顯示全部樓層
我覺得中斷時最靈敏的,其次就是用一個定時器,然后每個一段時間掃描一下按鍵,32中的滴答定時器就是不錯的選擇
回復

使用道具 舉報

ID:730009 發表于 2022-3-31 21:27 | 顯示全部樓層
可以用系統rtx
回復

使用道具 舉報

ID:971289 發表于 2022-4-1 08:17 | 顯示全部樓層
只追求按鍵靈敏度就用中斷,如果想提高按鍵穩定性就用硬件去抖。
回復

使用道具 舉報

ID:1014820 發表于 2022-4-1 11:14 | 顯示全部樓層

電容怎么選擇的
回復

使用道具 舉報

ID:1014855 發表于 2022-4-1 13:30 | 顯示全部樓層
要加消抖,可以利用延時函數消除抖動
回復

使用道具 舉報

ID:264021 發表于 2022-4-1 19:14 | 顯示全部樓層
沒有消抖程序,加個20MS的按鍵延時,就搞定
回復

使用道具 舉報

ID:842688 發表于 2022-4-2 01:37 | 顯示全部樓層
寫個奇偶校驗 沒記錯的話《手把手教你51單片機》這本書就有講到
回復

使用道具 舉報

ID:933803 發表于 2022-4-3 16:41 | 顯示全部樓層
使用消抖中斷方式
回復

使用道具 舉報

ID:990881 發表于 2022-4-4 08:42 | 顯示全部樓層
qianhuan 發表于 2022-4-1 11:14
電容怎么選擇的

估一下延時時間,RC延時
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91色视频在线 | 天天插天天射天天干 | 久久青青 | 最新国产精品 | 日本aaaa| 午夜激情视频在线 | 噜噜噜色网 | 国产一级片免费看 | 日韩欧美不卡 | 欧美在线视频a | 亚洲欧美另类在线 | 亚洲精品国产区 | 亚洲色图50p | 久久久久久黄 | 欧美激情第一区 | 亚洲精品久久久一区二区三区 | 久久一久久 | 美女黄色在线观看 | 久久久久久久久久久久久久久久久久久久 | 日韩av成人在线观看 | 国产一区二区三区精品久久久 | 国产精品久久久久久久久久免费看 | 日韩国产中文字幕 | 欧美在线a| 国产精品不卡 | 一区二区精品 | 一级片免费视频 | 丝袜一区二区三区 | 成人在线观看网址 | 成人免费大片黄在线播放 | 国产91视频免费 | 美女黄18岁以下禁止观看 | h视频在线播放 | 在线天堂免费中文字幕视频 | 国产中文字幕在线观看 | 欧美黑人国产人伦爽爽爽 | 欧美一区二区三区在线播放 | 精品久久久久久亚洲国产800 | 亚洲一二三区精品 | 亚洲一区二区三区四区五区中文 | 亚洲第一在线视频 |