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

📄 key.c

📁 本程序是38kHz的红外线发射接收程序。发射部分为AVR单片机
💻 C
字号:

void delay(unsigned char time)
{
    for (;time != 0;time--){
        #asm("nop")
        #asm("nop")
        #asm("nop")
        #asm("nop")
        #asm("nop")
        #asm("nop")
    }
}

unsigned char PollingKey (void)
{
    unsigned char   i;
    unsigned char   j;
    unsigned char   key;
    
    KEY_OUTPUT &= (~OUTPUT_MASK);
    delay(20);
    key = (~KEY_INPUT) & INPUT_MASK;
    if (key != 0){
        for (i = 0;i < KEY_MAX_X;i++){
            key = KEY_OUTPUT & (~OUTPUT_MASK);
           
            KEY_OUTPUT =(((~Num2Bit[i])&OUTPUT_MASK)|key);
            
            delay(20);
            key = (~KEY_INPUT) & INPUT_MASK;
            if (key != 0){
                for (j = 0;j < KEY_MAX_Y;j++){
                    if (key & 0x80) break;
                    key <<= 1;
                }
                return TransKey[(i * 4) + j];
            }
        }
    }else{
        return KEY_NONE;
    }
}



void ClearKeyFlag(void)
{
    KeyDebounce = 0;
    KeyRelease = 0;
    KeyCnt = 0;
    KeyCode = KEY_NONE;
}
    
void ScanKey(void)
{   if(Time1m == 0 ) return;
    Time1m = 0;
    KeyCode = PollingKey();
    if (KeyCode != KEY_NONE){
        if (KeyDebounce){
            if (DebounceCnt < DEBOUNCE_TIME){
                KeyCode = KEY_NONE;
            }else{
                if (KeyCode != OldKey){
                    ClearKeyFlag();
                }else{
                    KeyDebounce = 0;
                    KeyRelease = 1;
                }
            }
        }else{
            if (KeyRelease){
                if (KeyCode != OldKey){
                    ClearKeyFlag();
                 //   Flag = 0;
                }
                else{                             ///当按键一直按着着码不变
                    KeyCode = KEY_NONE;
                  //  Flag = 1;
                  //  if (DebounceCnt > DEBOUNCE_TIME) KeyCnt++;
                }
            }else{
                KeyDebounce = 1;
                OldKey = KeyCode;
                DebounceCnt = 0;
               // KeyCnt = 0;
                KeyCode = KEY_NONE;            
            }
        }
    }else{
        ClearKeyFlag();
    }       
}
#pragma optsize+

⌨️ 快捷键说明

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