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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5981|回復: 18
打印 上一主題 下一主題
收起左側

如何用一個單片機定時器掃描消抖三個獨立按鍵的?能不能給個例程呢?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:225054 發表于 2018-8-10 15:37 來自手機 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請定時器消抖大神進來看看看
大家是怎么用一個定時器掃描消抖三個獨立按鍵的?能不能給個例程呢?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:209315 發表于 2018-8-10 16:21 | 只看該作者
加延時
回復

使用道具 舉報

板凳
ID:81834 發表于 2018-8-10 16:21 | 只看該作者
定時器掃描周期可以設置100ms,分別讀取三個按鍵對應引腳電平
回復

使用道具 舉報

地板
ID:385030 發表于 2018-8-10 16:23 | 只看該作者
加個電容就 消抖了 為什么要用軟件 消抖呢?
回復

使用道具 舉報

5#
ID:308437 發表于 2018-8-10 16:42 | 只看該作者
nydns 發表于 2018-8-10 16:23
加個電容就 消抖了 為什么要用軟件 消抖呢?

軟件省錢~~
回復

使用道具 舉報

6#
ID:225054 發表于 2018-8-10 18:05 來自手機 | 只看該作者
trickbb 發表于 2018-8-10 16:21
定時器掃描周期可以設置100ms,分別讀取三個按鍵對應引腳電平

大神能給個例程嗎?框架也可以
回復

使用道具 舉報

7#
ID:225054 發表于 2018-8-15 20:16 來自手機 | 只看該作者
有大神嗎
回復

使用道具 舉報

8#
ID:213173 發表于 2018-8-16 13:12 | 只看該作者
給你一個例程參考
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;

void Timer0Init()        //10毫秒@12.000MHz
{
        TMOD= 0x01;                //設置定時器模式
        TL0 = 0xF0;                //設置定時初值
        TH0 = 0xD8;                //設置定時初值
        TR0 = 1;                //定時器0開始計時
        EA=1;                        //開總中斷
        ET0=1;                        //開定時器0中斷
}
void keyscan()                                        //按鍵掃描程序
{
        static bit key1_lock=0,key2_lock=0,key3_lock=0;//按鍵自鎖標志
        static uchar count1=0,count2=0,count3=0;//計數變量                       
        if(!key1)                                        //檢測按鍵如果為0
        {
                if((count1++>=2)&&(key1_lock==0))//延時20ms
                {                       
                        key1_lock=1;                        //按鍵自鎖標志置1
                        LED1=~LED1;
                }
        }
        else                                                        //按鍵抬起
        {
                key1_lock=0;                                //按鍵自鎖標志清0
                count1=0;                                        //消抖計數清0
        }
        if(!key2)                                        //檢測按鍵如果為0
        {
                if((count2++>=2)&&(key2_lock==0))//延時20ms
                {                       
                        key2_lock=1;                        //按鍵自鎖標志置1
                        LED2=~LED2;
                }
        }
        else                                                        //按鍵抬起
        {
                key2_lock=0;                                //按鍵自鎖標志清0
                count2=0;                                        //消抖計數清0
        }
        if(!key3)                                        //檢測按鍵如果為0
        {
                if((count3++>=2)&&(key3_lock==0))//延時20ms
                {                       
                        key3_lock=1;                        //按鍵自鎖標志置1
                        LED3=~LED3;
                }
        }
        else                                                        //按鍵抬起
        {
                key3_lock=0;                                //按鍵自鎖標志清0
                count3=0;                                        //消抖計數清0
        }
}
void main()
{
        Timer0Init();
    while(1);
}
void timer0() interrupt 1
{
        TL0 = 0xF0;                //設置定時重裝值
        TH0 = 0xD8;                //設置定時重裝值
        keyscan();                //按鍵掃描
}
回復

使用道具 舉報

9#
ID:386866 發表于 2018-8-16 13:24 | 只看該作者
sbit input1 = P0^0;
sbit input2 = P0^1;
sbit input3 = P0^2;

bit Key1()
{
    if(input1)
    {
        Delay(100);
        if (input1) return 1;
    }
    return 0;
}
回復

使用道具 舉報

10#
ID:386867 發表于 2018-8-16 13:24 | 只看該作者
wulin 發表于 2018-8-16 13:12
給你一個例程參考
#include
#define uchar unsigned char

可以哦
回復

使用道具 舉報

11#
ID:386630 發表于 2018-8-16 13:39 | 只看該作者
延時軟件消抖
回復

使用道具 舉報

12#
ID:383873 發表于 2018-8-16 13:50 | 只看該作者
只加軟件消抖不太靠譜,必須要加電容才行,而且按鍵要選質量好的
回復

使用道具 舉報

13#
ID:98526 發表于 2018-8-17 10:36 | 只看該作者
u8 ReadKey(void)
{
        u8 KeyTemp = 0;
        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)  == Bit_RESET) { KeyTemp = SW_SET; }
        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)  == Bit_RESET) { KeyTemp = SW_UP;  }
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == Bit_RESET) { KeyTemp = SW_OK;  }
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == Bit_RESET) { KeyTemp = SW_DOWN;}
        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11) == Bit_RESET) { KeyTemp = SW_SW;}
        return KeyTemp;
}



void KeyPrcoess(void)
{
        static u8 KeyValueTemp    = 0;
        static u8 KeyLastTemp     = 0;
        static u8 KeyFiliterCnt   = 0;
       
        if(KeyScanCnt1ms > 10)
        {
       
            KeyScanCnt1ms = 0;
            KeyLastTemp  = KeyValueTemp;
            KeyValueTemp = ReadKey();
            if(KeyValueTemp != 0)
                {
                       
                        if(KeyFiliterCnt < 200)KeyFiliterCnt++;
            else
            {
                KeyValue = KeyLastTemp;
            }
                }
                else
                {
                       
                        if(KeyFiliterCnt > 1 && KeyFiliterCnt != 200)
                        {
                                KeyValue = KeyLastTemp;
                        }
                        KeyFiliterCnt = 0;
                }
        }
}
回復

使用道具 舉報

14#
ID:225054 發表于 2018-8-18 11:24 來自手機 | 只看該作者
wulin 發表于 2018-8-16 13:12
給你一個例程參考
#include
#define uchar unsigned char

謝謝大神
回復

使用道具 舉報

15#
ID:225054 發表于 2018-8-18 11:25 來自手機 | 只看該作者
726434632 發表于 2018-8-17 10:36
u8 ReadKey(void)
{
        u8 KeyTemp = 0;

謝謝大神
回復

使用道具 舉報

16#
ID:208849 發表于 2018-8-20 11:06 | 只看該作者
這幾天在學按鍵,看了馬潮老師的按鍵,自己再弄弄,還是很不理想,苦惱啊
回復

使用道具 舉報

17#
ID:208849 發表于 2018-8-20 11:17 | 只看該作者
為什么的回復貼都不了審核嗎,為什么都看不到,新人怎么學習呢?
回復

使用道具 舉報

18#
ID:225054 發表于 2018-8-21 12:23 來自手機 | 只看該作者
tonggin 發表于 2018-8-20 11:06
這幾天在學按鍵,看了馬潮老師的按鍵,自己再弄弄,還是很不理想,苦惱啊

一起加油
回復

使用道具 舉報

19#
ID:137736 發表于 2018-8-21 18:27 | 只看該作者
在定時器中斷中讀端口值,寫入標志變位,然后判斷傳遞參數到主程序。定時器要重裝入一直運行。這個方法主程序不用等待。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂一区| 精品香蕉一区二区三区 | 91网在线播放 | 日韩欧美中文 | 综合久久综合久久 | 久久亚洲一区二区三区四区 | 国产伦精品一区二区三区精品视频 | 日韩黄 | 色噜噜亚洲男人的天堂 | 国产精品久久久久久久久久久久久久 | 中文字幕日韩欧美 | av黄色免费 | 成人在线精品视频 | 国产成人精品网站 | 国产乱码久久久久久一区二区 | 日本淫视频 | 鲁一鲁资源影视 | 高清亚洲 | 国产做爰| 精品av | 2019天天操| 免费三级网 | 免费一区| www.久久.com | 蜜月aⅴ免费一区二区三区 99re在线视频 | 日韩在线视频网址 | 欧美精品久久 | 羞羞视频在线观看免费观看 | 精品国产91久久久久久 | 免费九九视频 | 久久久综合 | 亚洲一区在线日韩在线深爱 | 国产欧美精品在线观看 | 亚洲视频在线一区 | 免费观看黄网站 | 午夜丁香视频在线观看 | 97视频人人澡人人爽 | 91人人爽| 亚洲成人精品 | av中文字幕在线 | 精品国产一区二区三区免费 |