⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key_fk.c

📁 此文件是一个完整的发动机转速表,用步进电机实现指示功能,利用HOLTECK的HT46R232作为MCU.
💻 C
字号:
/*
*********************************************************************************************************
*
* Filename   : KEY_HT.C
* Programmer : Haven
*********************************************************************************************************
*/
#define  FK_KEY_GLOBALS
#include "..\includes\INCLUDES.H"
#if FK_KEY_EN

#define KEY_STATE_UP                 1      
#define KEY_STATE_DEBOUNCE           2
#define KEY_STATE_RPT_START_DLY      3

bit Key2S;  
INT8U KeyScanState;  
INT8U KeyBufFk; 
INT8U KeyBufTemp;
INT8U KeyRptStartDlyCtr;
BOOLEAN  KeyIsKeyDown (void);
INT8U  KeyDecode (void);
 
void  KeyInit (void)
{
    KeyScanState = KEY_STATE_UP;
    KeyBufFk = 0;                 
}

INT8U  KeyGetKey (void)
{
    INT8U ccode;
    ccode = KeyBufFk;              
    if (ccode != 0){
        KeyBufFk = 0; 
        return (ccode); 
    } else {
        return (0);                           
    }
}
BOOLEAN  KeyIsKeyDown (void)
{
    if ((~KEY_IN_PORT)> 0) {
        return (TRUE);
    } else {
        return (FALSE);
    }
}

INT8U  KeyDecode (void)
{
    return (~KEY_IN_PORT);    
}
void KeyScan(void)//带长按功能,输出不同键值来代表某键长按,以使应用程序简单
{
    switch (KeyScanState) {
        case KEY_STATE_UP: 
            if (KeyIsKeyDown()) { 
                KeyScanState = KEY_STATE_DEBOUNCE;    
            }
            break;
        case KEY_STATE_DEBOUNCE:                       
            if (KeyIsKeyDown()) {   
                KeyBufTemp = KeyDecode(); 
                KeyRptStartDlyCtr = KEY_RPT_START_DLY;           
                KeyScanState      = KEY_STATE_RPT_START_DLY;
            }else{
                KeyScanState      = KEY_STATE_UP;    
            }
            break;
        case KEY_STATE_RPT_START_DLY:
            if (KeyIsKeyDown()) {  
                if (KeyRptStartDlyCtr > 0){
                    if ((-- KeyRptStartDlyCtr) == 0){
                        Key2S = TRUE;
                        KeyBufFk = KeyBufTemp + KeyValMax;    
                    }
                }                       
            }else{
                if(Key2S == FALSE){
                    KeyBufFk = KeyBufTemp;
                }else{
                    Key2S = FALSE;
                }  
                KeyScanState      = KEY_STATE_UP;    
            }
            break;
    }
    if(KeyBufFk != 0){
        ActObjEvtPost(1, KEYDOWN_SIG);//1为prio
    }
}

/*
void KeyScan(void)
{
    switch (KeyScanState) {
        case KEY_STATE_UP:                             
             if (KeyIsKeyDown()) {                     
                 KeyScanState = KEY_STATE_DEBOUNCE;    
                 KeyDownTmr   = 0;                     
             }
             break;

        case KEY_STATE_DEBOUNCE:                       
             if (KeyIsKeyDown()) {                     
                 code              = KeyDecode();      
                 KeyBufIn(code);                       
                 KeyRptStartDlyCtr = KEY_RPT_START_DLY;
                 KeyScanState      = KEY_STATE_RPT_START_DLY;
             } else {
                 KeySelRow(KEY_ALL_ROWS);              
                 KeyScanState      = KEY_STATE_UP;     
             }
             break;

        case KEY_STATE_RPT_START_DLY:
             if (KeyIsKeyDown()) {                     
                 if (KeyRptStartDlyCtr > 0) {          
                     KeyRptStartDlyCtr--;              
                     if (KeyRptStartDlyCtr == 0) {     
                         code         = KeyDecode();   
                         KeyBufIn(code);               
                         KeyRptDlyCtr = KEY_RPT_DLY;   
                         KeyScanState = KEY_STATE_RPT_DLY;
                     }
                 }
             } else {
                 KeyScanState = KEY_STATE_DEBOUNCE;    
             }
             break;

        case KEY_STATE_RPT_DLY:
             if (KeyIsKeyDown()) {                     
                 if (KeyRptDlyCtr > 0) {               
                     KeyRptDlyCtr--;                   
                     if (KeyRptDlyCtr == 0) {          
                         code         = KeyDecode();   
                         KeyBufIn(code);               
                         KeyRptDlyCtr = KEY_RPT_DLY;   
                     }
                 }
             } else {
                 KeyScanState = KEY_STATE_DEBOUNCE;    
             }
             break;
    }
}
*/
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -