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

📄 key.c

📁 在AVR 平台下的控制代码,通过CAN控制
💻 C
字号:
#include "std.h"
#include "buffer.h"
#include "key.h"
#include "Platform.h"
#include "sleep.h"

Un_Sizet_1          g_ucVK_Value;	/* 转换好的标准按键信息 */
KeyboardDataStruct  t_KeyboardData; /* 用于按键扫描的信息 */
KeyInfo             g_KeyInfo;
Byte                t_VirtualKeyBuffer[VIRTUALKEYBUFFERSIZE];
/* 所有按键处理都由这里进入
    这里会读取已经转换好的标准键值,并进行处理
*/
void KeyProcess(void)
{
}

Bool tdClearKeyInFIFO(FifoHandle fh, Byte ucKeyCode)
{
    Byte ucTemp, ucRealIndex;
    Bool bHeadChanged = _FALSE_;
    Bool bTailChanged = _FALSE_;
    Bool bFinishSwap = _FALSE_;

    if (fh->ucHead == fh->ucTail || ucKeyCode == 0)
        return _FALSE_;

    ucTemp = fh->ucHead;
    ucRealIndex= fh->ucHead;
    while (ucRealIndex != fh->ucTail)
    {
        if (!bFinishSwap)
        {
            if (fh->ucData[ucRealIndex] == ucKeyCode)
            {
                ucTemp = ucRealIndex;
                while ((ucTemp != fh->ucTail) && (fh->ucData[ucTemp] == ucKeyCode))
                {
                    ucTemp++;
                    if (ucTemp >= fh->ucSize)
                        ucTemp = 0;
                }
                if (ucTemp != fh->ucTail)   //find fh->ucData[ucTemp] != ucKeyCode
                {
                    fh->ucData[ucRealIndex] = fh->ucData[ucTemp];
                    fh->ucData[ucTemp] = ucKeyCode;
                }
                else        //ucTemp == fh->ucTail
                {
                    fh->ucData[ucRealIndex] = 0;
                    bFinishSwap = _TRUE_;
                }
            }
        }
        else
            fh->ucData[ucRealIndex] = 0;
            
        ucRealIndex++;
        if (ucRealIndex >= fh->ucSize)
            ucRealIndex = 0;
    }

    //reset tail
    ucTemp = fh->ucHead;
    while (ucTemp != fh->ucTail)
    {
        if (fh->ucData[ucTemp] == 0)
        {
            fh->ucTail = ucTemp;
            break;
        }
        ucTemp++;
        if (ucTemp >= fh->ucSize)
            ucTemp = 0;
    }

    return _TRUE_;
}

Bool KeyboardScan(Void)
{
    Un_Sizet_1 ucVirtualKey = GetKeyCode();
    if ( ucVirtualKey )
    {
        if ( ucVirtualKey == t_KeyboardData.ucLastKey )
        {
            if ( t_KeyboardData.wFirstDelay &&
                 tdCompareTickCount(t_KeyboardData.dwLastTick, t_KeyboardData.wFirstDelay))
            {
                if(g_KeyInfo.bFastRepeatKeyEnable||g_KeyInfo.bSlowRepeatKeyEnable)
                {
                    tdAddVirtualKey(ucVirtualKey);
                    g_KeyInfo.bRepeatKeyDown = _TRUE_;
                }
                 //set g_KeyInfo.bKeyboardDown flag
                g_KeyInfo.bKeyboardDown = _TRUE_;

                if(g_KeyInfo.bSlowRepeatKeyEnable)
                    t_KeyboardData.dwLastTick = tdGetTickCount() - t_KeyboardData.wFirstDelay
                                                + t_KeyboardData.wRepeatDelay*4;
                else
                    t_KeyboardData.dwLastTick = tdGetTickCount() - t_KeyboardData.wFirstDelay
                                                + t_KeyboardData.wRepeatDelay;
            }
        }
        else
        {
            g_KeyInfo.bFastRepeatKeyEnable = _FALSE_;
            g_KeyInfo.bSlowRepeatKeyEnable = _FALSE_;
            g_KeyInfo.bRepeatKeyDown = _FALSE_;
            tdAddVirtualKey( ucVirtualKey );

            //set g_KeyInfo.bKeyboardDown flag
            g_KeyInfo.bKeyboardDown = _TRUE_;
 
            t_KeyboardData.ucLastKey = ucVirtualKey;
            t_KeyboardData.dwLastTick = tdGetTickCount();
        }
        return _TRUE_;
    }
    else
    {
        if (g_KeyInfo.bKeyboardDown)
        {
            if (g_KeyInfo.bRepeatKeyDown)       //clear repeat key in fifo
                tdClearKeyInFIFO((FifoHandle)t_VirtualKeyBuffer, t_KeyboardData.ucLastKey);
            
            g_KeyInfo.bKeyboardDown = _FALSE_;
            g_KeyInfo.bRepeatKeyDown = _FALSE_;
            if (g_KeyInfo.bKeyStatusUpEnable)
                tdAddVirtualKey(t_KeyboardData.ucLastKey | _VK_STATUS_UP_);
        }
        
        t_KeyboardData.ucLastKey = 0;
        return _FALSE_;
    }
}

⌨️ 快捷键说明

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