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

標(biāo)題: STM32按鍵輸入程序優(yōu)化設(shè)計 [打印本頁]

作者: csy-2015-06    時間: 2018-9-20 10:32
標(biāo)題: STM32按鍵輸入程序優(yōu)化設(shè)計
按鍵輸入函數(shù)步驟(PA0)
1.初始化
根據(jù)電路設(shè)計決定浮空,上拉,下拉
輸出
//PA0--浮空輸入
GPIOA->MODER &=~(0x03<<0);
GPIOA->PUPDR &=~(0x03<<0);

2.讀取IO口電平值
GPIOA->IDR&(0x01<<0)

3.去抖
3.1延時去抖(效果不好)
3.2優(yōu)化:多次操作:
   讀取函數(shù)內(nèi)部設(shè)定條件,當(dāng)設(shè)定條件滿足多次才確定按下
        //第一次進(jìn)來  key_c!=key_b  key_b==key_a==0xaa     times==1   
        //第二次進(jìn)來  key_c!=key_b  key_b==key_a==KEY2_OK times==2
        //第三次進(jìn)來  key_c== key_b==key_a==KEY2_OK       times==3
        key_c=key_b;
        key_b=key_a;
    按鍵按下就給key_a賦值。
        if(KEY1)//KEY1
        {
                key_a=KEY1_OK;
        }

        if(key_a==key_b&&key_b==key_c)//三次檢測到高電平說明按鍵真的被按下了
        {
        key_sta=0;
        key_ret=key_a;

4.按鍵松開
4.1用while(1)等待松開(效果不好)
4.2優(yōu)化:設(shè)立狀態(tài)機(jī)
   1)讀按鍵函數(shù)設(shè)定狀態(tài)為 static u8 key_sta=1;
     當(dāng)滿足(key_sta=1&&按鍵電平符合按下)
     進(jìn)入判斷函數(shù)內(nèi)部,返回值,置狀態(tài)機(jī)key_sta=0;
   2)當(dāng)結(jié)束一次按鍵按下判斷后,第一層判斷函數(shù)設(shè)狀態(tài)機(jī)key_sta=1;

u8 Key_Scanf(void)
{
        static u8 key_sta=1; //當(dāng)key_sta為1時允許做按鍵識別 ,為0不許做按鍵識別
        
        if( (!(GPIOE->IDR&(0x01<<2))) && (key_sta==1))//允許做按鍵識別并且有按鍵被按下
        {
                Key_delay( );//        延時消抖(3~5ms)        ---死等
                if( !(GPIOE->IDR&(0x01<<2)) )//重新再讀取IDR寄存器,如果仍然讀到高電平,
                {
                        //說明按鍵是真的被按下去
                        key_sta=0;                        
                        return 2;//按鍵被按下
                }
        }
        else if( (GPIOE->IDR&(0x01<<2)) )//沒有按鍵被按下
        {

                key_sta=1;

        }
        
        return 0;//沒有按鍵被按下

}
優(yōu)化設(shè)計解放CPU,不會卡死在某一個點上。
晚點上傳完整代碼


作者: csy-2015-06    時間: 2018-9-21 13:33
正在系統(tǒng)學(xué)習(xí)STM32F407,自己整理資料,有不足之處歡迎指正。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1