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

📄 key.c

📁 LV4137显示驱动,自己做的,比较简单,但很实用,MCU用的是Myson MTV512,Keil下编译
💻 C
字号:
//----------------------------------------------------------------------------------------------------
// ID Code      : Key.c No.0001
// Update Note  : 
//
//----------------------------------------------------------------------------------------------------

#define __KEY__

#include "Header\Include.h"

//--------------------------------------------------
// Description  : Key scan process
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyHandler(void)
{
    // Clear the key message
    ucKeyMessage = _NONE_KEY_MESSAGE;
    
    if(1)//CKeyScanReady())
    {
        // Store previous key state
        ucKeyStatePrev = ucKeyStateCurr;
        
        // Get current key state
        ucKeyStateCurr = CKeyScan();

        // Convert key state to key message, store in (ucKeyNotify)
        CKeyMessageProc();
    }
}

//--------------------------------------------------
// Description  : Initial key status
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyInitial(void)
{
    CLR_KEYSCANREADY();
    CLR_KEYSCANSTART();
}

//--------------------------------------------------
// Description  : Key scan ready process. We wait 0.02 sec in order to keep the keypad debounce
// Input Value  : None
// Output Value : None
//--------------------------------------------------
bit CKeyScanReady(void)
{
    if(GET_KEYSCANSTART() && GET_KEYSCANREADY())
    {
        CLR_KEYSCANSTART();
        CLR_KEYSCANREADY();
        
        return _TRUE;
    }
    else if(!GET_KEYSCANSTART())
    {
        // Wait 0.02 sec in order to keep the keypad debounce
        SET_KEYSCANSTART();
        //CTimerReactiveTimerEvent(SEC(0.02), CKeyScanReadyTimerEvent);
		SET_KEYSCANREADY();
        return _FALSE;
    }
    else
    {
        return _FALSE;
    }
}

//--------------------------------------------------
// Description  : Key scan ready timer event
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyScanReadyTimerEvent(void)
{
    SET_KEYSCANREADY();
    if(!GET_KEYSCANREADY())	//V335
        SET_KEYSCANREADY();
}

//--------------------------------------------------
// Description  : Key repeat enable timer event
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyRepeatEnableTimerEvent(void)
{
    SET_KEYREPEATSTART();
}

//--------------------------------------------------
// Description  : Key message translation
// Input Value  : ucKeyMask     --> Key mask
//                ucKeyMsg      --> Key message
// Output Value : None
//--------------------------------------------------
void CKeyMessageConvert(BYTE ucKeyMask, BYTE ucKeyMsg)
{
    if((ucKeyStatePrev ^ ucKeyStateCurr) & ucKeyMask)
    {
        ucKeyMessage = ucKeyMsg;
    }
    else
    {
        if(GET_KEYREPEATENABLE())
        {
            if(GET_KEYREPEATSTART())
            {
                ucKeyMessage = ucKeyMsg;
            }
            else
            {
                CTimerActiveTimerEvent(SEC(_KEY_REPEAT_START_TIME),CKeyRepeatEnableTimerEvent);
            }
        }
    }
}

//--------------------------------------------------
// Description  : Get key status
// Input Value  : None
// Output Value : Return Key status
//--------------------------------------------------
BYTE CKeyScan(void)
{
    BYTE ucKeyState,m; 

	ucKeyState = 0;
	if(!bKEY1)
    {
            for(m=0;m<120;m++)		
            {
            	if (bKEY1)
            		return ucKeyState;            	
            	BitDly(); 
            }    	
            ucKeyState  = ucKeyState | _KEY1_MASK;
    }    
    if(!bKEY2)
    {
            for(m=0;m<120;m++)
            {
            	if (bKEY2)
            		return ucKeyState;            	
            	BitDly(); 
            }    	
            ucKeyState  = ucKeyState | _KEY2_MASK;
    }    
    return ucKeyState;
}

//--------------------------------------------------
// Description  : Convert keypad status into key message, stores in ucKeyNotify
// Input Value  : None
// Output Value : None
//--------------------------------------------------
void CKeyMessageProc(void)
{
    switch(ucKeyStateCurr)
    {
    case _KEY1_MASK:
        CKeyMessageConvert(_KEY1_MASK, _KEY1_MESSAGE);
        break;
        
    case _KEY2_MASK:
        CKeyMessageConvert(_KEY2_MASK, _KEY2_MESSAGE);
        break;
        
    case _KEY3_MASK:
        CKeyMessageConvert(_KEY3_MASK, _KEY3_MESSAGE);
        break;        
        
    default:
        CLR_KEYREPEATSTART();
        CLR_KEYREPEATENABLE();			//VYYY
        break;
    }
}



⌨️ 快捷键说明

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