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

📄 keypad.c

📁 MST726驱动TFT屏程序,源代码!很好的资料
💻 C
字号:
#define _KEYPAD_C_

#include <math.h>
#include "types.h"
#include "board.h"
#include "ms_reg.h"
#include "global.h"
#include "keypaddef.h"
#include "DEBUG.h"
#include "misc.h"
#include "ms_rwreg.h"
#include "Reg52.h"
#include "ir.h"
#include "menu.h"
#include "keypad.h"

//===============================================================
#define MAX_KEYVALUE        0x3F
#define HIGHLEVEL           0x3A
#define KeyJitterCounter	15
#define KeyStableCounter	1
#define KEY_Idle            0xFF

BYTE Key_ScanValue(BYTE KeyAdcPort)
{
    if(KeyAdcPort==ADCKEY1)
        g_ucCurrentKeyADC[KeyAdcPort]=PKEYADC1;
    else
        g_ucCurrentKeyADC[KeyAdcPort]=PKEYADC2;

	return g_ucCurrentKeyADC[KeyAdcPort];
}


BYTE Key_GetKeypadStatus(void)
{
	    //BYTE KeyData = KEY_NOTHING;
	    BYTE ADCValue;

#if(KEY_TYPE==Single_ADCKey)
//------------------------------------------------
		ADCValue=Key_ScanValue(ADCKEY1);

		if (ADCValue < (KEY_AD_L0 + KEY_AD_DELTA)&&ADCValue > (KEY_AD_L0 - KEY_AD_DELTA))
		    {
		    if(g_ucKeyStableCountBuff[KEY_POWER]++>KeyStableCounter)
		        {
        		    return KEY_POWER;
		        }
		    }
    	else if (ADCValue < (KEY_AD_L1+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L1 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_MENU]++>KeyStableCounter)
		        {
        		    return KEY_MENU;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L2+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L2 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_LEFT]++>KeyStableCounter)
		        {
        		    return KEY_LEFT;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L3+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L3 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_RIGHT]++>KeyStableCounter)
		        {
        		    return KEY_RIGHT;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L4+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L4 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_DOWN]++>KeyStableCounter)
		        {
        		    return KEY_DOWN;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L5+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L5 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_UP]++>KeyStableCounter)
		        {
        		    return KEY_UP;
		        }
    	    }

#elif(KEY_TYPE==Dual_ADCKey)
//------------------------------------------------
		ADCValue=Key_ScanValue(ADCKEY1);
		if (ADCValue < (KEY_AD_L0 + KEY_AD_DELTA)&&ADCValue > (KEY_AD_L0 - KEY_AD_DELTA))
		    {
		    if(g_ucKeyStableCountBuff[KEY_RIGHT]++>KeyStableCounter)
		        {
        		    return KEY_RIGHT;
		        }
		    }
    	else if (ADCValue < (KEY_AD_L1+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L1 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_LEFT]++>KeyStableCounter)
		        {
        		    return KEY_LEFT;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L2+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L2 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_UP]++>KeyStableCounter)
		        {
        		    return KEY_UP;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L3+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L3 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_DOWN]++>KeyStableCounter)
		        {
        		    return KEY_DOWN;
		        }
    	    }

		ADCValue=Key_ScanValue(ADCKEY2);
		if (ADCValue < (KEY_AD_L0 + KEY_AD_DELTA)&&ADCValue > (KEY_AD_L0 - KEY_AD_DELTA))
		    {
		    if(g_ucKeyStableCountBuff[KEY_POWER]++>KeyStableCounter)
		        {
        		    return KEY_POWER;
		        }
		    }
    	else if (ADCValue < (KEY_AD_L1+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L1 - KEY_AD_DELTA))
    	    {
		    if(g_ucKeyStableCountBuff[KEY_MENU]++>KeyStableCounter)
		        {
        		    return KEY_MENU;
		        }
    	    }
    	else if (ADCValue < (KEY_AD_L2+KEY_AD_DELTA)&&ADCValue > (KEY_AD_L2 - KEY_AD_DELTA))
    	    { //printf("\r\nADCValue===<%x>", ADCValue);
		    if(g_ucKeyStableCountBuff[KEY_SOURCE]++>KeyStableCounter)
		        {
        		    return KEY_SOURCE;
		        }
    	    }
#endif

		if(!g_ucKeyCounter)
            return KEY_NOTHING;

        g_ucKeyCounter--;

        return KEY_Idle;
}

void Key_ScanKeypad(void)
{
	BYTE keypadStatus;

    keypadStatus=Key_GetKeypadStatus();

    if (keypadStatus!=KEY_Idle)
	{
        if(keypadStatus!=KEY_NOTHING)
            {
                printf("\r\nKEY<%x>", keypadStatus);

        	   	if (keypadStatus == g_ucLastKeypad)
        	    {
        	    	//printMsg("repeat key pad");
        	        EventRepeatProcess(keypadStatus, 2);
        	    }
        	    else
        	    {
        	    	//printMsg("Single key pad");
        	        EventProcess(keypadStatus);
        	    }
            }
        g_ucLastKeypad = keypadStatus;
        Key_KeyInit();
	}
}

void Key_KeyInit(void)
{
    g_ucKeyCounter=KeyJitterCounter;

    g_ucKeyStableCountBuff[0]=0;
    g_ucKeyStableCountBuff[1]=0;
    g_ucKeyStableCountBuff[2]=0;
    g_ucKeyStableCountBuff[3]=0;
    g_ucKeyStableCountBuff[4]=0;
    g_ucKeyStableCountBuff[5]=0;
    g_ucKeyStableCountBuff[6]=0;
    g_ucKeyStableCountBuff[7]=0;
}

void CheckFactoryKeyStatus(void)
{ 
	BYTE keypadStatus, i;

	for(i=0;i<10;i++)
	{
  		keypadStatus=Key_GetKeypadStatus();
	}
	
  	Clr_FactoryModeFlag();
	
  	if (keypadStatus==KEY_MENU)
    	{ 
    		Set_FactoryModeFlag();
      		Set_PowerOnFlag();
    	}
}

⌨️ 快捷键说明

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