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

📄 kb.c

📁 嵌入式系统
💻 C
字号:
#include "pio.h"
#include "intc.h"
unsigned short GetKeycode(void)
{
	unsigned short key=0;
	key=apd_PIOReadPort(APD_PIOD);
	return key;

}
/*
  status = 0 - WAITING FOR KEY DOWN
		   1 - KEY DOWN - START WAITING FOR 2 SEC
		   2 - KEY DOWN - 2 SEC PASSED - START FOR REPEAT 1 SEC
*/
//KEYSTATUS keystatus[NUM_KEY];
//static unsigned long const holdtime[]=
//					{3000/*power key*/, 2000, 2000, 2000, 2000, 2000, 2000};
//static unsigned long const repeattime[]=
//					{0xFFFFFFFF, 1000, 1000, 1000, 1000, 1000, 1000};
//unsigned char const key_ctlmask[]=
//					{0x15, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F};

enum key_status
{
	S_WAIT,
	S_KEYDOWN,
	S_KEYUP
};
static enum key_status	status;
unsigned short gKBDelayControl;
static unsigned char prev_key,key_number,key_down_flag;

void IntKey(void)
{
	if(key_down_flag==0)
	{
	 key_down_flag=1;
	}
}

unsigned char GetKey(void)
{
	unsigned char key=0;
	
	if( key_down_flag )
	{	key = GetKeycode();
		key_down_flag = 0;
	}
	return key;
}


unsigned char CheckKeyIntFlag(void)
{
	return key_down_flag;
}

void ClrKeyIntFlag(void)
{
	key_down_flag=0;
}
///////////////////////////////
void KeyInit(void)
{
	unsigned char i;

	apd_INTCEnableIRQ(APD_INTC_INT1);
	status=S_WAIT;
	gKBDelayControl=0;
	prev_key=0;
	key_down_flag=0;
}
//extern void Delay(unsigned long ms_numbers);//in swi1.c

void Delay(unsigned int m){
	unsigned int i,j;
	for(i=0;i<=0xffff;i++)
		for(j=0;j<m;j++)
		;
}
/*
void KeyProcess(void)//TASK=void
{
	unsigned char key;//, prev_key;
	unsigned char i; //, mystatus;
	unsigned short transmit_msg;

	{
 	  switch(status)
	   {
	     case S_WAIT:
		if(key_down_flag==1)
		  { 
		    key=GetKeycode();
		    if (key)
		     {
			Delay(10);
			key=GetKeycode();
			if (key)
			   { 
			     for(i=0;i<NUM_KEY;i++)
				if ((key>>i)&0x01)break;
				 prev_key=(unsigned char)(0x01<<i);
				 key_number=i;
				 status=S_KEYDOWN;
				 break;
			   }
		   }
		 KeyOn();
		 key_down_flag=0;
	}
	break;
	case S_KEYDOWN:
		key=GetKeycode();
		Delay(10);
		key=GetKeycode();
		if ((key&prev_key)==0)
		status=S_WAIT;
		}

		if(prev_key)
		{
			switch(keystatus[key_number].status)
			{
				case K_WAIT:
					{
						keystatus[key_number].status=K_DOWN;
						gKBDelayControl=
						   (unsigned short)keystatus[key_number].holdtime;
					}
					break;

	case K_DOWNWAIT:
					if (key&prev_key)
					{
						if(gKBDelayControl==0)
						{
						 keystatus[key_number].status=K_HOLD1;
						 gKBDelayControl=
							(unsigned short)keystatus[key_number].repeattime;
						}
					}
					else
					{
						keystatus[key_number].status=K_UP;
					}
					break;

				case K_HOLDWAIT:
					if (key&prev_key)
					{
						if(gKBDelayControl==0)
						{
						 keystatus[key_number].status=K_HOLD2;
						 gKBDelayControl=
							(unsigned short)keystatus[key_number].repeattime;
						}
					}
					else
					{
						keystatus[key_number].status=K_UP;
					}
					break;
			}
		}
		if(prev_key)
		{
			{
				switch(keystatus[key_number].status)
				{
					case K_WAIT:
					case K_DOWNWAIT:
					case K_HOLDWAIT:
						transmit_msg=K_WAIT;
						break;
					case K_DOWN:
						if ((keystatus[key_number].ctlmask&0x08) //&&
						   )
						{
							transmit_msg=K_DOWN;
						}
						else
							transmit_msg=K_WAIT;
						keystatus[key_number].status=K_DOWNWAIT;
						break;

					case K_HOLD1:
						if ((keystatus[key_number].ctlmask&0x04) //&&
						   )
						{
							transmit_msg=K_HOLD;
						}
						else
							transmit_msg=K_WAIT;
						keystatus[key_number].status=K_HOLDWAIT;
						break;

					case K_HOLD2:
						if ((keystatus[key_number].ctlmask&0x02)// &&
						   )
						{
							transmit_msg=K_HOLD;
						}
						else
							transmit_msg=K_WAIT;
						keystatus[key_number].status=K_HOLDWAIT;
						break;

					case K_UP:
						if ((keystatus[key_number].ctlmask&0x01))
						{
							transmit_msg=K_UP;
						}
						else
							transmit_msg=K_WAIT;
						keystatus[key_number].status=K_WAIT;
						break;
				}

				if (transmit_msg!=K_WAIT)
				{
					PostMessage((MSGID)MSG_EVT_KEY,
						   (unsigned long)prev_key,
						   (unsigned long)transmit_msg);
					if(transmit_msg==K_UP)
					{prev_key=0;
					 KeyOn();
					 key_down_flag=0;
					}
				}
			}
		}
	}
}*/

⌨️ 快捷键说明

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