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

標題: 我的風格,板級驅動,定期更新 [打印本頁]

作者: liuyuxi    時間: 2015-1-10 02:34
標題: 我的風格,板級驅動,定期更新
//☆☆☆☆☆☆張小強☆☆☆☆☆
//日期:2014/12/27/21:00-22:30
//版本:V0.1
//僅供參考
#include<stm8s105k4.h>
#include"key.h"
/////////////////8位輸入IO定義
#define KEYIO_01  0x01
#define KEYIO_02  0x02
#define KEYIO_04  0x04
#define KEYIO_08  0x08
#define KEYIO_10  0x10
#define KEYIO_20  0x20
#define KEYIO_40  0x40
#define KEYIO_80  0x80
//按鍵首次按下最小有效時間  連續按下觸發最小有效時間  連續按下狀態下最小反應時間
#define  keysonetime  2                //首次進入的最小時間段
#define  keysltime    50        //進入長按狀態的最小時間段
#define  keyslrtime                10        //長按狀態下反應速度
#define  keyshtime    10        //松開的最小保持時間
/////////PD口所用到的IO  1 2 3 4
#define   KEYIO_PC  (KEYIO_02|KEYIO_04|KEYIO_08|KEYIO_10)
/////////PC口所用到的IO  0 2
#define   KEYIO_PD        (KEYIO_01|KEYIO_04)

#define   KEY_PC  PC_IDR & KEYIO_PC  //過濾沒有選擇的端口
#define   KEY_PD  PD_IDR & KEYIO_PD
//識別的按鍵有效次數
unsigned  char key1num=0;
//按鍵確定有效標志位
_Bool key1flag=0;
//按鍵首次觸發時間
unsigned char  key1time=0;
//按鍵松開狀態保持時間
unsigned char  key1timeh=0;
//按鍵連續觸發時間條件
unsigned char  key1Ltime=0;
//按鍵處于連續觸發時反應時間
unsigned char  key1rtime=0;
//按鍵允許檢測標志位  1 允許檢測 0 不允許檢測 每次檢測后自動置0
_Bool  keystartflag=0,keysenable=0;   //根據按鍵靈敏度需要特定時間內置1將啟動按鍵檢測
/*
*        KEYGPIO_Config ()  可外部調用
* 初始化板級按鍵端口
* 無返回值
*/
void   KEYGPIO_Config(void)//端口配置
{
        PC_ODR&=~KEYIO_PC;
        PC_DDR&=~KEYIO_PC;
        PC_CR2&=~KEYIO_PC;
        PC_CR1|=KEYIO_PC;
       
        PD_ODR&=~KEYIO_PD;
        PD_DDR&=~KEYIO_PD;
        PD_CR1&=~KEYIO_PD;
        PD_CR1|=KEYIO_PD;
}

//下文給出一個按鍵的源碼供參考,包含短按 長按 松開以上都會觸發事件發生

/*
*按鍵檢測函數 在循環中調用
*根據keystartflag確定函數是否執行
*
*/
void  keysstart(void)
{
        if(keystartflag)
        {
                //端口c
                if((KEY_PC&KEYIO_02)==0x00)//是否有檢測到低電平
                {
                        if(key1flag==0)                                                //是否已經檢測到當前的低電平
                        {
                                key1time++;                                                        //記錄狀態保持時間
                                if(key1time>keysonetime)//是否達到首次按下的最小有效時間
                                {
                                        key1flag=1;                                                //更新標志位
                                        key1time=0;                                                //清楚記錄的保持時間
                                        key1num++;                                                //按鍵事件++
                                        key1timeh=keyshtime;        //將按鍵松開保持時間賦值
                                        key1Ltime=0;                                        //長按保持時間累積清零
                                }
                        }
                        if((key1Ltime<keysltime))key1Ltime++;        //是否低于長按檢測條件
                                else                                                                                                                                                 //進入長按狀態
                                {
                                        key1rtime++;                                                                                                        //長按反應時間累積
                                        if(key1rtime>keyslrtime)                                                        //是否到達長按反應時間的最小值
                                        {
                                                key1rtime=0;                                                                                                //清楚記錄時間                                               
                                                key1num++;                                                                                                        //按鍵事件++                                       
                                        }
                                }
                }
                else if(key1timeh>0)//是否已經進入松開狀態并保持設置時間
                        {
                                key1timeh--;        //記錄本狀態保持時間
                                key1Ltime=0;        //清除按下狀態保持時間的記錄值
                                key1time=0;
                                if(key1timeh==0)//到達松開狀態下的最小保持時間
                                {
                                        key1flag=0;                //允許下次按鍵的按下
                                        key1rtime=0;//清除長按下狀態保持時間的記錄值
                                        key1num++;
                                }
                        }
                keystartflag=0;
        }
       
}
/*
*讀取當前按鍵的事件數
*指針是外部調用函數的應用變量
*調用后事件值自動清零
*/
void   readkeysstatus(unsigned char  *key1ststus)
{
        *key1ststus=key1num;
        key1num=0;
}
/*
*使用按鍵外設,并初始化
*使能后開始按鍵檢測工作
*
*/
void usekeys(void)
{
        keysenable=1;
        key1num=0;
}



作者: 明白    時間: 2015-1-10 11:09
謝謝樓主共享




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一区二区三区免费 | 国产在线中文字幕 | 国产乱肥老妇国产一区二 | 欧美激情视频一区二区三区在线播放 | 亚洲人成一区二区三区性色 | 不卡一区 | 国产一区999 | 欧美激情视频一区二区三区在线播放 | 久久久不卡网国产精品一区 | 视频一区二区三区在线观看 | 一级毛片视频 | 亚洲不卡在线观看 | 中文字幕一区在线 | 亚洲国产精品久久久久秋霞不卡 | 一区二区三区国产在线观看 | 国产福利在线视频 | 国产成人一区二区三区精 | 超碰人人插 | 国产免费拔擦拔擦8x高清 | 成人在线免费观看 | 日韩在线免费 | a级在线观看| 丁香一区二区 | 91九色porny首页最多播放 | 国产黄色一级片 | 国产精品无码专区在线观看 | 天天操夜夜骑 | 欧美涩 | 国产一区二区在线免费 | 欧美一区二区在线免费观看 | 国产精品99久久久久久人 | 国产女人与拘做受视频 | 最新国产福利在线 | 黄色欧美在线 | 国产色99精品9i | 国产一级片久久久 | 狠狠做深爱婷婷综合一区 | 天天躁日日躁aaaa视频 | 青青久久av北条麻妃海外网 | 特级a欧美做爰片毛片 | 黄色一级片aaa |