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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5942|回復: 18
收起左側

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

  [復制鏈接]
ID:225054 發表于 2018-8-10 15:37 來自手機 | 顯示全部樓層 |閱讀模式
請定時器消抖大神進來看看看
大家是怎么用一個定時器掃描消抖三個獨立按鍵的?能不能給個例程呢?
回復

使用道具 舉報

ID:209315 發表于 2018-8-10 16:21 | 顯示全部樓層
加延時
回復

使用道具 舉報

ID:81834 發表于 2018-8-10 16:21 | 顯示全部樓層
定時器掃描周期可以設置100ms,分別讀取三個按鍵對應引腳電平
回復

使用道具 舉報

ID:385030 發表于 2018-8-10 16:23 | 顯示全部樓層
加個電容就 消抖了 為什么要用軟件 消抖呢?
回復

使用道具 舉報

ID:308437 發表于 2018-8-10 16:42 | 顯示全部樓層
nydns 發表于 2018-8-10 16:23
加個電容就 消抖了 為什么要用軟件 消抖呢?

軟件省錢~~
回復

使用道具 舉報

ID:225054 發表于 2018-8-10 18:05 來自手機 | 顯示全部樓層
trickbb 發表于 2018-8-10 16:21
定時器掃描周期可以設置100ms,分別讀取三個按鍵對應引腳電平

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

使用道具 舉報

ID:225054 發表于 2018-8-15 20:16 來自手機 | 顯示全部樓層
有大神嗎
回復

使用道具 舉報

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();                //按鍵掃描
}
回復

使用道具 舉報

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;
}
回復

使用道具 舉報

ID:386867 發表于 2018-8-16 13:24 | 顯示全部樓層
wulin 發表于 2018-8-16 13:12
給你一個例程參考
#include
#define uchar unsigned char

可以哦
回復

使用道具 舉報

ID:386630 發表于 2018-8-16 13:39 | 顯示全部樓層
延時軟件消抖
回復

使用道具 舉報

ID:383873 發表于 2018-8-16 13:50 | 顯示全部樓層
只加軟件消抖不太靠譜,必須要加電容才行,而且按鍵要選質量好的
回復

使用道具 舉報

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;
                }
        }
}
回復

使用道具 舉報

ID:225054 發表于 2018-8-18 11:24 來自手機 | 顯示全部樓層
wulin 發表于 2018-8-16 13:12
給你一個例程參考
#include
#define uchar unsigned char

謝謝大神
回復

使用道具 舉報

ID:225054 發表于 2018-8-18 11:25 來自手機 | 顯示全部樓層
726434632 發表于 2018-8-17 10:36
u8 ReadKey(void)
{
        u8 KeyTemp = 0;

謝謝大神
回復

使用道具 舉報

ID:208849 發表于 2018-8-20 11:06 | 顯示全部樓層
這幾天在學按鍵,看了馬潮老師的按鍵,自己再弄弄,還是很不理想,苦惱啊
回復

使用道具 舉報

ID:208849 發表于 2018-8-20 11:17 | 顯示全部樓層
為什么的回復貼都不了審核嗎,為什么都看不到,新人怎么學習呢?
回復

使用道具 舉報

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

一起加油
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av色站 | 偷拍自拍第一页 | 久久一区二 | 欧美aⅴ | 精品少妇一区二区三区日产乱码 | 久久亚洲欧美日韩精品专区 | 国产视频福利在线观看 | 成人免费网站 | 国产女人与拘做视频免费 | 久久精品一区二区三区四区 | 久久蜜桃资源一区二区老牛 | 中文字幕高清 | 成人一区精品 | 国产成人网| 久在线观看 | 免费观看毛片 | 在线观看成年人视频 | 在线免费观看日本视频 | 国产精品久久国产精品 | 欧美一区二区久久 | 国产福利资源在线 | 日韩视频专区 | 日韩视频―中文字幕 | 亚洲欧美日韩精品久久亚洲区 | a亚洲精品| 中文字幕日韩欧美一区二区三区 | 日韩欧美在 | 亚洲视频在线免费 | 中文字幕av亚洲精品一部二部 | 日韩欧美在线免费观看视频 | 日韩国产在线观看 | 欧美日韩淫片 | 国产剧情久久 | 日韩精品av一区二区三区 | 久久成人激情 | 在线免费小视频 | 一级黄色影片在线观看 | av性色| 国产一区二区精华 | 久久久精品久 | 99re热这里只有精品视频 |