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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6111|回復: 14
收起左側

關于單片機獨立按鍵程序里判斷key1 和key2同時按下的意義

[復制鏈接]
ID:753985 發表于 2020-5-17 14:37 | 顯示全部樓層 |閱讀模式
單片機設置兩個獨立按鍵,key1 和key2 key1 按下加0.1或10 ,key2 按下減0.1或10 ,想問一下,這個程序里判斷key1 和key2同時按下有什么意義嗎,是消抖嗎還是什么,在仿真里反正是同時按下不增也不減,程序如下:
void key()
{
if(OK==1)
{
if(!key_1) //判斷按鍵是否按下
{
OK=0;
if(sec==3) //執行按鍵對應的控制內容
{
if(shu<3000)shu+=10; //長按處理
}elseif(sec>1)
{
if(shu<3000)shu+=1; //短按處理
}
else
{
if(key_flag1)
{
key_flag1=0;
if(shu<3000)shu+=1;
}
}
SectorErase(0x2000); //保存數據到單片機EEPROM中
byte_write(0x2000,shu/256);
byte_write(0x2001,shu%256);

}
elsekey_flag1=1;

if(!key_2) //判斷按鍵是否按下
{
OK=0; //執行按鍵對應的控制內容
if(sec==3)
{
if(shu>200)shu-=10;//長按處理
}elseif(sec>1)
{
if(shu>200)shu-=1; //短按處理
}
else
{
if(key_flag2)
{
key_flag2=0;
if(shu>200)shu-=1; //短按處理
}
}
SectorErase(0x2000); //保存數據到單片機EEPROM中
byte_write(0x2000,shu/256);
byte_write(0x2001,shu%256);
}
elsekey_flag2=1;
}
if(key_1==1&&key_2==1) //判斷按鍵是否按下
{
sec=0; //重新計時
}
}


回復

使用道具 舉報

ID:754172 發表于 2020-5-17 17:44 | 顯示全部樓層
應該是消抖,普中的視頻里有講這個
回復

使用道具 舉報

ID:584814 發表于 2020-5-17 19:26 | 顯示全部樓層
程序設計邏輯有點呵呵,程序不完整先猜著:
雙鍵同按是按鍵按下的計時歸零(可能是在中斷里,抬起按鍵并不歸零)
回復

使用道具 舉報

ID:753985 發表于 2020-5-18 10:07 | 顯示全部樓層
Magiks 發表于 2020-5-17 17:44
應該是消抖,普中的視頻里有講這個

還望樓主能不能詳細指點一下,或者可不可以分享一下視頻內容
回復

使用道具 舉報

ID:753985 發表于 2020-5-18 10:13 | 顯示全部樓層
man1234567 發表于 2020-5-17 19:26
程序設計邏輯有點呵呵,程序不完整先猜著:
雙鍵同按是按鍵按下的計時歸零(可能是在中斷里,抬起按鍵并不歸零 ...

對樓主 猜對了,中斷里也涉及了按鍵控制,但是還不太懂,我覺得可能是是消抖,中斷程序如下,還望樓主指點
void init_1() interrupt 1  //定時器1 計數器0  interrupt 1 是定時器T0中斷
{
        TL0 = 0xB0;               
        TH0 = 0x3C;                //設置定時初值
        ms++;                   //50ms定時計數
        if(ms%4 ==0)          //按鍵處理時間控制  每200ms處理一次
        {
                OK=1;
        }
        if(ms%5==0)          //蜂鳴器報警,指示燈閃爍處理
        {
                if(beep1==1)
                {
                        led=0;
                        beep=!beep;
                }else
                {
                    led=1;
                        beep=1;
                }
        }
        if(ms>19)            //1s定時  處理 定時器定時50ms,故20次中斷就表示1s鐘到達
        {
                shu1=(long)cs*65535+TH1*256+TL1;        //計算頻率
                cs=TH1=TL1=0;
                ms=0;
                if(!key_1||!key_2)           //按鍵長按處理
                {
                        sec++;
                        if(sec>3)                 //長按3s判斷
                        {
                                sec=3;
                        }
                }else
                {
                        sec=0;
                }
        }
}

void init_3() interrupt 3  //外部中斷檢測當前傳感器頻率  //定時器計數器1
{
        cs++;        //中斷溢出計數
}


回復

使用道具 舉報

ID:282850 發表于 2020-5-18 14:55 | 顯示全部樓層
同時按下是對sec清零
回復

使用道具 舉報

ID:753985 發表于 2020-5-18 17:24 | 顯示全部樓層
f556 發表于 2020-5-18 14:55
同時按下是對sec清零

清零的意義是什么呢 ? 仿真里 同時按下是不加也不減,不加也不減為什么要設計判斷它呢?我好蒙圈
回復

使用道具 舉報

ID:420836 發表于 2020-5-19 04:57 | 顯示全部樓層
為了避免無效的按鍵操作,必須檢測到同時或幾乎同時發生的兩個按鍵。 如果發生這種情況,則將其視為無效的鍵操作。
回復

使用道具 舉報

ID:213173 發表于 2020-5-19 08:25 | 顯示全部樓層
wuxinxin 發表于 2020-5-18 17:24
清零的意義是什么呢 ? 仿真里 同時按下是不加也不減,不加也不減為什么要設計判斷它呢?我好蒙圈

樓主理解錯誤并誤導大家。程序中根本沒有兩個按鍵同時按下的語句。只是判斷在沒有按鍵按下時sec清0。
        if(key_1==1 && key_2==1) //判斷按鍵是否按下        {
                sec=0; //重新計時
        }


回復

使用道具 舉報

ID:282850 發表于 2020-5-19 09:51 | 顯示全部樓層
wuxinxin 發表于 2020-5-18 17:24
清零的意義是什么呢 ? 仿真里 同時按下是不加也不減,不加也不減為什么要設計判斷它呢?我好蒙圈

清零就是 sec=0;
K1、K2才設計成加減,清零是到一定值后,迅速變成0,不用再一步步加減。
回復

使用道具 舉報

ID:695961 發表于 2020-5-19 11:24 | 顯示全部樓層
兩個按鍵同時按是有意議的判斷。

現在的觸摸屏都支持10個觸點判斷的。
回復

使用道具 舉報

ID:695961 發表于 2020-5-19 11:27 | 顯示全部樓層
我覺得主要是節約硬件資源開銷,減少GPIO的使用。

按鍵一般有【短按,長按,雙擊,三擊】,這樣使用一個GPIO就可以讓用戶有四種操作。如果再配上組合(不建議使用),如三長兩短,就像發信號一樣,就可以觸發一些內置的管理員操作,就更高大上了。

個人觀點。
回復

使用道具 舉報

ID:753985 發表于 2020-5-19 11:30 | 顯示全部樓層
wulin 發表于 2020-5-19 08:25
樓主理解錯誤并誤導大家。程序中根本沒有兩個按鍵同時按下的語句。只是判斷在沒有按鍵按下時sec清0。
        i ...

樓主說的對,我理解錯了,就是正如你所說的,沒有按下時計時清零
回復

使用道具 舉報

ID:753985 發表于 2020-5-19 11:32 | 顯示全部樓層
TTQ001 發表于 2020-5-19 04:57
為了避免無效的按鍵操作,必須檢測到同時或幾乎同時發生的兩個按鍵。 如果發生這種情況,則將其視為無效的 ...

一語驚人的大佬,這是我最想要的答案,
回復

使用道具 舉報

ID:1120100 發表于 2024-5-10 15:36 | 顯示全部樓層
能給我講講嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费观看视频www | av网站观看 | a在线观看 | 国产真实乱对白精彩久久小说 | 欧美国产视频 | 黄色大片免费播放 | 中文字幕视频在线 | 一级黄色录像片子 | a视频在线观看 | 日韩一级 | 久久无毛 | 超碰av在线 | 免费一区| 宅男伊人| 亚洲 欧美 另类 综合 偷拍 | 日韩色图视频 | 成人在线免费视频 | 亚洲福利视频一区二区 | 日韩精品一区二区在线观看 | 红色av社区 | www久久久| 成人精品一区二区三区中文字幕 | 青青草社区 | 日韩成人精品一区二区三区 | 午夜99 | 国产91精品网站 | 麻豆av电影网 | 做a的各种视频 | 天天久 | 成人伊人 | 国产欧美精品 | 免费视频久久久久 | 91在线观看视频 | 黄免费观看视频 | 中文av电影| 91免费版在线观看 | 超碰在线播 | 97av视频在线 | 日韩一级黄色毛片 | 搞黄网站在线观看 | 中文字幕乱码一区二区三区 |