在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8S獨(dú)立按鍵IO口設(shè)置及按下事件問題

            STM8S獨(dú)立按鍵IO口設(shè)置及按下事件問題

            作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
            • GPIO設(shè)置
            • 按鍵檢測(cè)
              • 1 連續(xù)按鍵檢測(cè)短按
            • 關(guān)鍵代碼

            本文引用地址:http://www.biyoush.com/article/201611/318317.htm

            1 GPIO設(shè)置

                            STM8 I/O 口引腳配置表

            Px_DDRPx_CR1Px_CR2I/O 方式引腳狀態(tài)
            000輸入懸浮輸入
            001輸入上拉輸入
            010輸入中斷懸浮輸入
            011輸入中斷上拉輸入
            100輸出開漏輸出
            110輸出推挽輸出
            1x1輸出輸出(最快速度為10MHZ)

            對(duì)STM8S的IO配置,我們只需要操作五個(gè)寄存器就行了:

            • 輸出數(shù)據(jù)寄存器 (ODR)
            • 輸入數(shù)據(jù)寄存器 (IDR)
            • 數(shù)據(jù)方向寄存器 (DDR)
            • 控制寄存器1(CR1)
            • 控制寄存器2(CR2)

            2 按鍵檢測(cè)

              在做獨(dú)立按鍵檢測(cè)的時(shí)候,設(shè)置成上拉輸入不能實(shí)現(xiàn)功能,設(shè)置成中斷懸浮輸入就可以了。
              兩次短按鍵之間的時(shí)間間隔大約在300ms~600ms之間。一次短按鍵按下的時(shí)間大約在14ms~26ms之間;

            2.1 連續(xù)按鍵檢測(cè)(短按+)

            定時(shí)器TIM1 + 按鍵 = 連續(xù)按鍵檢測(cè)(短按鍵+鍵)
            兩個(gè)標(biāo)記:

            • 短按+—flag0
            • 短按后時(shí)間在規(guī)定范圍之內(nèi)—flag1

            如果兩個(gè)標(biāo)記都滿足,則開/關(guān)電源;每次按鍵都啟動(dòng)按鍵計(jì)時(shí);

            當(dāng)兩次按鍵的時(shí)間間隔在300ms~600ms之間的時(shí)候,怎么得到第一次(短按)和第二次()按鍵之間的時(shí)間呢?
              如果判斷了是短按,則開啟計(jì)時(shí),同時(shí)將第一次短按flag置一,超過600ms停止計(jì)時(shí)并清零,等待第二次的按鍵;有了第二次的按鍵之后,在短按置一flag條件中中斷計(jì)時(shí),判斷是否在規(guī)定范圍之內(nèi)的時(shí)間間隔,是則將flag1置一;并接下來判斷該按鍵是還是短按,如果是,則將flag0置一,滿足flag0、flag1均置一,則是連續(xù)按鍵。

            3 關(guān)鍵代碼

            /*return = 0   :   No Key Press1   :   Single Key Press2   :   將作為一次單獨(dú)按鍵,并執(zhí)行Single Key Press功能   3   :   Double Key Press*/unsigned int Key_Scan(void){unsigned int count = 0;if(0 == KEY){Delay(2);if(0 == KEY){if(1 == keytimesFlag){afterOnceShortPressFlag = 0;if((afterOnceShortPressCount <=30) && (afterOnceShortPressCount > 15)){isSetTimeFlag = 1;}else isSetTimeFlag = 0;}keyFlag = 1;while(!KEY);keyFlag = 0;count = keyCount;keyCount = 0;}else{count = 0;}}if(count >= 200){if(1 == isSetTimeFlag){isSetTimeFlag = 0;keytimesFlag = 0;return 3;}else {keytimesFlag = 0;return 2;           }}else if(count >= 4){afterOnceShortPressFlag = 1;afterOnceShortPressCount = 0;keytimesFlag = 1;return 1;}else return 0;}

            在定時(shí)周期為10ms的定時(shí)器中斷函數(shù)里:

            @far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void){   TIM1_SR1 &=~(0x01);    if(1 == keyFlag){++keyCount;}else ;if(1 == afterOnceShortPressFlag){++afterOnceShortPressCount;if(afterOnceShortPressCount > 80){afterOnceShortPressFlag = 0;afterOnceShortPressCount = 0;keytimesFlag = 0;}}else ;}

              另參見使用外部中斷鍵識(shí)別:使用外部中斷識(shí)別鍵



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉