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

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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5210|回復(fù): 20
打印 上一主題 下一主題
收起左側(cè)

雙開(kāi)關(guān)的問(wèn)題,就是搞不清邏輯了~

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
某汽車玻璃升降器:
一個(gè)單刀雙擲開(kāi)關(guān),KEY1,KEY2;
兩個(gè)輸出點(diǎn)OUT1,OUT2

不按:KEY1=1; KEY2=1;
輕按:KEY1=0; KEY2=1;
重按:KEY1=1; KEY2=0;

輕按到重按,或重按到輕按的切換過(guò)程中:KEY1=1; KEY2=1; 至少有幾百毫秒時(shí)間。


程序OUT1、OUT2輸出要求:

KEY1=0時(shí),OUT1=1;
KEY2=0時(shí),OUT1=1;OUT2=1;
由輕按到重按過(guò)程中,保持:OUT1=1;不能中斷
重按到輕按的過(guò)程中,保持:OUT1=1;不能中斷
不按下:OUT1=0;OUT2=0;

搞不清怎么寫(xiě)邏輯了~

請(qǐng)高手大俠們賜教!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:433992 發(fā)表于 2019-2-14 10:31 來(lái)自觸屏版 | 只看該作者
0 1:1 *  --- ---1 0:1 1--- ---1 1:0 0
回復(fù)

使用道具 舉報(bào)

無(wú)效樓層,該帖已經(jīng)被刪除
地板
ID:378182 發(fā)表于 2019-2-14 10:45 | 只看該作者
OUT1=(NOT KEY1) OR (NOT KEY2)
OUT2=NOT KEY2
回復(fù)

使用道具 舉報(bào)

5#
ID:123289 發(fā)表于 2019-2-14 11:58 | 只看該作者
當(dāng)一種開(kāi)關(guān)組合被確認(rèn)后,0.2秒內(nèi)不再承認(rèn)其它其它組合就可以了。
回復(fù)

使用道具 舉報(bào)

6#
ID:138119 發(fā)表于 2019-2-14 16:07 | 只看該作者
yzwzfyz 發(fā)表于 2019-2-14 11:58
當(dāng)一種開(kāi)關(guān)組合被確認(rèn)后,0.2秒內(nèi)不再承認(rèn)其它其它組合就可以了。

并沒(méi)有那么簡(jiǎn)單,
回復(fù)

使用道具 舉報(bào)

7#
ID:362076 發(fā)表于 2019-2-14 21:06 | 只看該作者
以下為個(gè)人愚見(jiàn)。
之所以設(shè)計(jì)切換過(guò)程有雙高電平的短暫狀態(tài),是為了能夠?qū)⑤p按和重按的事件觸發(fā)方式轉(zhuǎn)換成兩個(gè)下降沿中斷來(lái)處理。這樣一來(lái),KEY1的下降沿說(shuō)明為輕按事件,KEY2的下降沿為重按事件。
有了這兩個(gè)事件,程序可以分為三個(gè)部分,分別是輕按中斷服務(wù)函數(shù),重按中斷服務(wù)函數(shù)和主程序循環(huán)。
其中中斷服務(wù)函數(shù)進(jìn)行事件處理、狀態(tài)轉(zhuǎn)換,標(biāo)志位切換等動(dòng)作,主循環(huán)中使用標(biāo)志位作為判斷依據(jù)進(jìn)行處理。
所以重新敘述要求并處理如下:
當(dāng)輕按事件發(fā)生,置輕按事件發(fā)生標(biāo)志位,同時(shí)清空重按事件發(fā)生標(biāo)志位;
當(dāng)重按事件發(fā)生,置重按事件發(fā)生標(biāo)志位,同時(shí)清空輕按事件發(fā)生標(biāo)志位。使得兩個(gè)事件在主循環(huán)看來(lái)相互獨(dú)立瞬時(shí)發(fā)生。
在主循環(huán)中判斷,按照標(biāo)志位狀態(tài)進(jìn)行“刷新覆蓋式”輸出,此時(shí)OUT1==1的輸出一定不會(huì)中斷(因?yàn)榍袚Q過(guò)程中,沒(méi)有下降沿,程序保持上一狀態(tài)對(duì)應(yīng)輸出刷新動(dòng)作)。

這樣,我們還需要對(duì)松開(kāi)按鍵進(jìn)行處理,因?yàn)榘凑彰枋觯袚Q過(guò)程不算松開(kāi),所以松開(kāi)的過(guò)程僅僅是輕按(KEY1==0,KEY2==1)到無(wú)按下(KEY1==1,KEY2==1)的過(guò)程,然而輕按無(wú)論到松開(kāi)還是重按均需要經(jīng)過(guò)雙高電平。
這個(gè)過(guò)程我沒(méi)有想到更好的辦法,只能使用定時(shí)器進(jìn)行固定時(shí)長(zhǎng)計(jì)時(shí),定時(shí)時(shí)長(zhǎng)稍大于模式切換時(shí)長(zhǎng),定時(shí)開(kāi)始于輕按事件處理結(jié)束,定時(shí)結(jié)束后根據(jù)當(dāng)前輸入決定是否清空輕按標(biāo)志位。

評(píng)分

參與人數(shù) 2黑幣 +102 收起 理由
yfpc2006 + 12 很給力!
admin + 90 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

8#
ID:138119 發(fā)表于 2019-2-15 03:27 | 只看該作者
本帖最后由 yfpc2006 于 2019-2-15 13:21 編輯
凌凈清河 發(fā)表于 2019-2-14 21:06
以下為個(gè)人愚見(jiàn)。
之所以設(shè)計(jì)切換過(guò)程有雙高電平的短暫狀態(tài),是為了能夠?qū)⑤p按和重按的事件觸發(fā)方式轉(zhuǎn)換成 ...

沒(méi)有用中斷,用查詢的方法,能實(shí)現(xiàn),但偶爾還是有些不穩(wěn)定,看一下還需要優(yōu)化什么?

u8 KEY1,KEY2,KEY1_F=0,KEY2_F=0,OUT1=0,OUT2=0,i=0;

void Scan_KEY(void)
{
        if(KEY1==1 && KEY2==1 && KEY1_F==0 && KEY2_F==0)
        {
                OUT1=0;
                OUT2=0;
        }
        else if(KEY1==0 && KEY2==1 && KEY1_F==0 && KEY2_F==0)
        {
                OUT1=1;
                OUT2=0;
                KEY1_F=1;
        }
        else if(KEY1==1 && KEY2==1 && KEY1_F==1 && KEY2_F==0)
        {
                for(i=0;i<50;i++)     //根據(jù)響應(yīng)需求進(jìn)行調(diào)節(jié)
                {
                        if(KEY2==0)
                        {
                                OUT2=1;
                                KEY2_F=1;
                                KEY1_F=0;
                                break;
                        }
                        delay_ms(10);      //根據(jù)響應(yīng)需求進(jìn)行調(diào)節(jié)
                }
                KEY1_F=0;
                OUT1=0;
        }
        else if(KEY2==0)
        {
                OUT1=1;
                OUT2=1;
                KEY2_F=1;
        }
        else if(KEY1==1 && KEY2==1 && KEY1_F==0 && KEY2_F==1)
        {
                OUT1=1;
                OUT2=0;
        }
        else if(KEY1==0 && KEY2==1 && KEY1_F==0 && KEY2_F==1)
        {
                OUT1=1;
                OUT2=0;
                KEY1_F=1;
        }
        else if(KEY1==1 && KEY2==1 && KEY1_F==1 && KEY2_F==1)
        {
                OUT1=0;
                OUT2=0;
                KEY1_F=0;
                KEY2_F=0;
        }
}

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

9#
ID:362076 發(fā)表于 2019-2-15 07:46 | 只看該作者
yfpc2006 發(fā)表于 2019-2-15 03:27
沒(méi)有用中斷,用查詢的方法,能實(shí)現(xiàn),但偶爾還是有些不穩(wěn)定,看一下還需要優(yōu)化什么?

u8 KEY1,KEY2,KE ...

中斷的方法已經(jīng)是最優(yōu)解,你的查詢法程序可能存在問(wèn)題。
按照一個(gè)重按并松開(kāi)的流程,KEY1、2電平變化為:
(KEY1、KEY2)11-01-11-10-11-01-11
根本不會(huì)出現(xiàn)同時(shí)為0的情況,所以KEY1==0&KEY2==0這條不可能滿足。
況且查詢法消耗的等待延時(shí)達(dá)到幾百毫秒的話,太長(zhǎng)了,建議改為中斷,不然無(wú)可“優(yōu)化”。
回復(fù)

使用道具 舉報(bào)

10#
ID:474232 發(fā)表于 2019-2-15 07:59 | 只看該作者
要優(yōu)化!不管你是長(zhǎng)按還是點(diǎn)按,都要有延時(shí)消抖,區(qū)別是延時(shí)時(shí)間不同而己
德飛萊150例有這個(gè)案例,壇子里有人發(fā)過(guò),下下來(lái)看看,能解決你按鍵不穩(wěn)定之癥!

評(píng)分

參與人數(shù) 2黑幣 +20 收起 理由
static + 5 贊一個(gè)!
sheng7533967 + 15 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

11#
ID:213173 發(fā)表于 2019-2-15 12:45 | 只看該作者
yfpc2006 發(fā)表于 2019-2-15 03:27
沒(méi)有用中斷,用查詢的方法,能實(shí)現(xiàn),但偶爾還是有些不穩(wěn)定,看一下還需要優(yōu)化什么?

u8 KEY1,KEY2,KE ...



#include <reg52.h>
#define key_S 5000 //預(yù)設(shè)延時(shí)計(jì)數(shù)值,根據(jù)響應(yīng)需求進(jìn)行調(diào)節(jié)
sbit KEY1=P2^0;
sbit KEY2=P2^1;
sbit OUT1=P3^0;
sbit OUT2=P3^1;

void Key_Scan()                        //按鍵掃描程序
{
        static unsigned int count_1=0,count_2=0;        //延時(shí)計(jì)數(shù)變量               

        if((KEY1==0)&&(KEY2==1))//輕按
        {
                if(++count_1>=key_S)//計(jì)數(shù)延時(shí)
                {
                        count_1=key_S;//防止溢出
                        OUT1=1;
                        OUT2=0;
                        count_2=0;
                }
        }
        else if((KEY1==1)&&(KEY2==0))//重按
        {
                if(++count_2>=key_S)//計(jì)數(shù)延時(shí)
                {
                        count_2=key_S;//防止溢出
                        OUT1=1;
                        OUT2=1;
                        count_1=0;
                }
        }   
        else //松手不按
        {
                OUT1=0;
                OUT2=0;
                count_1=0;
                count_2=0;
        }
}

void main()
{
        OUT1=0;
        OUT2=0;
        while(1)
        {
                Key_Scan();        //按鍵掃描
        }
}

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
yfpc2006 + 12 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:138119 發(fā)表于 2019-2-15 13:20 | 只看該作者
凌凈清河 發(fā)表于 2019-2-15 07:46
中斷的方法已經(jīng)是最優(yōu)解,你的查詢法程序可能存在問(wèn)題。
按照一個(gè)重按并松開(kāi)的流程,KEY1、2電平變化為 ...

我也想用中斷的方式,可惜芯片分配的引腳不支持外部電平變化中斷。
所以只能用查詢的方式。
回復(fù)

使用道具 舉報(bào)

13#
ID:362076 發(fā)表于 2019-2-15 15:59 | 只看該作者
yfpc2006 發(fā)表于 2019-2-15 13:20
我也想用中斷的方式,可惜芯片分配的引腳不支持外部電平變化中斷。
所以只能用查詢的方式。

原來(lái)是這樣,那祝你好運(yùn)
回復(fù)

使用道具 舉報(bào)

14#
ID:474670 發(fā)表于 2019-2-15 16:36 | 只看該作者
yfpc2006 發(fā)表于 2019-2-15 13:20
我也想用中斷的方式,可惜芯片分配的引腳不支持外部電平變化中斷。
所以只能用查詢的方式。

用定時(shí)中斷作延時(shí),在里面設(shè)標(biāo)識(shí)位就行,就不存在引腳分配問(wèn)題
回復(fù)

使用道具 舉報(bào)

15#
ID:472242 發(fā)表于 2019-2-15 18:16 | 只看該作者
yfpc2006 發(fā)表于 2019-2-15 13:20
我也想用中斷的方式,可惜芯片分配的引腳不支持外部電平變化中斷。
所以只能用查詢的方式。

要學(xué)會(huì)用定時(shí)器中斷,ADC中斷這些技能做的開(kāi)關(guān),這樣才是解決你多開(kāi)關(guān)的麻煩
回復(fù)

使用道具 舉報(bào)

16#
ID:47286 發(fā)表于 2019-2-15 20:03 | 只看該作者
你這不是跟VW汽車上的電窗開(kāi)關(guān)一樣么 我寫(xiě)過(guò)整個(gè)電窗控制系統(tǒng) 就是3樓說(shuō)的等待時(shí)間即可 不過(guò)得用中斷 不能用死循環(huán) 不然其它事都干不了

不管你按不按鍵key2 都會(huì)經(jīng)過(guò)key1 所以 key1按下并確定后 做一個(gè)標(biāo)記 直接檢測(cè)key1釋放或者key2按下即可
回復(fù)

使用道具 舉報(bào)

17#
ID:476799 發(fā)表于 2019-2-15 22:59 | 只看該作者
znz43a 發(fā)表于 2019-2-14 10:45
OUT1=(NOT KEY1) OR (NOT KEY2)
OUT2=NOT KEY2

當(dāng)一種開(kāi)關(guān)組合被確認(rèn)后,0.2秒內(nèi)不再承認(rèn)其它其它組合就可以了
回復(fù)

使用道具 舉報(bào)

18#
ID:138119 發(fā)表于 2019-2-16 19:48 | 只看該作者
dzbj 發(fā)表于 2019-2-15 20:03
你這不是跟VW汽車上的電窗開(kāi)關(guān)一樣么 我寫(xiě)過(guò)整個(gè)電窗控制系統(tǒng) 就是3樓說(shuō)的等待時(shí)間即可 不過(guò)得用中斷 不能 ...

我也覺(jué)得這個(gè)開(kāi)關(guān)是小意思啦,可是實(shí)際做起來(lái),不知道是不是自己的能力問(wèn)題,覺(jué)得越做越復(fù)雜了。
回復(fù)

使用道具 舉報(bào)

19#
ID:138119 發(fā)表于 2019-2-16 20:07 | 只看該作者
wulin 發(fā)表于 2019-2-15 12:45
#include
#define key_S 5000 //預(yù)設(shè)延時(shí)計(jì)數(shù)值,根據(jù)響應(yīng)需求進(jìn)行調(diào)節(jié)
sbit KEY1=P2^0;

大哥哥就是厲害,小女子佩服的很!我都懷疑我是不是做這塊的料!?

想到這里,我突然想到很久以前一個(gè)考試題,和這個(gè)開(kāi)關(guān)很像也是一個(gè)單刀雙擲開(kāi)關(guān),一共三個(gè)檔位:
第一檔(KEY1==1 && KEY2==1):關(guān)機(jī);
第二檔(KEY1==0 && KEY2==1):開(kāi)風(fēng)扇;
第三檔(KEY1==1 && KEY2==0):開(kāi)風(fēng)扇+音樂(lè);
第四檔(KEY1==0 && KEY2==1):就是退回后的原第二檔,開(kāi)風(fēng)扇+音樂(lè)+燈光;
第五檔(KEY1==1 && KEY2==1):就是退回后的原第一檔,關(guān)機(jī)。
我覺(jué)得都是不能做到的事情,看到大哥哥的仿真程序和效果,簡(jiǎn)直佩服死了!
如果大哥哥把這道題做出來(lái),我會(huì)感動(dòng)死的!
回復(fù)

使用道具 舉報(bào)

20#
ID:472325 發(fā)表于 2019-2-16 21:49 | 只看該作者
凌凈清河 發(fā)表于 2019-2-15 15:59
原來(lái)是這樣,那祝你好運(yùn)。

妹子,妹子,樓主是妹子,別認(rèn)錯(cuò)了

評(píng)分

參與人數(shù) 1黑幣 +16 收起 理由
找人PK + 16

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

21#
ID:138119 發(fā)表于 2019-2-16 22:04 | 只看該作者
dzbj 發(fā)表于 2019-2-15 20:03
你這不是跟VW汽車上的電窗開(kāi)關(guān)一樣么 我寫(xiě)過(guò)整個(gè)電窗控制系統(tǒng) 就是3樓說(shuō)的等待時(shí)間即可 不過(guò)得用中斷 不能 ...

單刀雙擲(帶關(guān)斷)開(kāi)關(guān),能寫(xiě)出這幾個(gè)開(kāi)關(guān)狀態(tài)來(lái)?

第0檔(K1==1 && K2==1):FLAG=0;
第1檔(K1==0 && K2==1):FLAG=1;
第2檔(K1==1 && K2==0):FLAG=2;
第3檔(K1==0 && K2==1):原第2檔:FLAG=3;
第4檔(K1==1 && K2==1):原第1檔:FLAG=4;

換擋過(guò)程(K1==1 && K2==1)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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