欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 11676|回復(fù): 26
收起左側(cè)

如何讓單片機(jī)按鍵檢測(cè)更靈敏?

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

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

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

        temp=P2&0xF0;//讀取P2線數(shù)據(jù)

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

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

                        switch(temp_code)//讀取按鍵號(hào)
                        {
                                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();
        }
}



相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

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

一個(gè)按鈕被按下,單片機(jī)一定能被檢測(cè)到,如果需要在其他程序被用來處理事件,就SETB一個(gè)位做識(shí)別,然后離開,根本無需抗抖動(dòng),因?yàn)榇蠖鄶?shù)程序完成事件處理后回來,早就過了抖動(dòng)期。如果處理事件的程序事件太短,可以用這個(gè)SETB的位跳過按鈕檢測(cè)程序,等事件處理程序完成處理事件,把被SETB的位CLR掉,自然就會(huì)運(yùn)行按鈕檢測(cè)程序,這樣就不會(huì)發(fā)生按一次鈕而多次觸發(fā)的問題。如果希望按下鈕后確保按鈕必須放開,則在檢測(cè)到按下后,進(jìn)入檢測(cè)放開的程序,不斷循環(huán),直到按鈕被放開,但這就浪費(fèi)單片機(jī)的時(shí)間了。

這說明在真實(shí)應(yīng)用的中,抗抖動(dòng)程序是很少用到的,教材只是教你原理。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:191022 發(fā)表于 2017-4-25 09:45 | 顯示全部樓層
請(qǐng)各位大俠們多多指點(diǎn)
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

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




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






回復(fù)

使用道具 舉報(bào)

ID:112693 發(fā)表于 2017-4-27 11:53 | 顯示全部樓層
延時(shí)去抖最簡單,最好開關(guān)并聯(lián)104電容
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:194618 發(fā)表于 2017-4-28 18:27 | 顯示全部樓層
加個(gè)延時(shí)函數(shù)進(jìn)行消抖,一般10ms
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:191929 發(fā)表于 2017-5-6 20:13 | 顯示全部樓層
按鍵一般要消抖,延時(shí)個(gè)5~~20ms
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:730009 發(fā)表于 2022-3-31 21:27 | 顯示全部樓層
可以用系統(tǒng)rtx
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

電容怎么選擇的
回復(fù)

使用道具 舉報(bào)

ID:1014855 發(fā)表于 2022-4-1 13:30 | 顯示全部樓層
要加消抖,可以利用延時(shí)函數(shù)消除抖動(dòng)
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:842688 發(fā)表于 2022-4-2 01:37 | 顯示全部樓層
寫個(gè)奇偶校驗(yàn) 沒記錯(cuò)的話《手把手教你51單片機(jī)》這本書就有講到
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:990881 發(fā)表于 2022-4-4 08:42 | 顯示全部樓層

估一下延時(shí)時(shí)間,RC延時(shí)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表