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

📄 key.c

📁 电气仪表资料
💻 C
字号:
/***********************************************************
Key scan progrem
************************************************************/
#include <comm.h>
 extern       uchar key_press_flag;
 extern        uchar key_save_port;
 extern       uchar keyin_point;
 extern       uchar keyout_point;
 extern       uchar interrupt_request;
 extern       uchar key_buf[KEY_BUFF_MAX];
 extern        uchar     SETUPLOCK;
 

void Key_Initialize_Wait(void)
{
	keyin_point=0;
	keyout_point=0;
	key_save_port=0XF0;
	interrupt_request=interrupt_request&~KEY_PRESS;
}

void Key_Scan(void)
{
        static  uchar i,k,j;
	EA=0;
       SELECT_KEY_PORT;
       P2MDOUT=0;
	P2=0xff;
 	i=P2;//Read key port 
 	SETUPLOCK=P2&0x01;
	EA=1;
	i=i&0xf0;
	if(i==0xf0)
	{//No key pressed
	    key_press_flag=0;
		key_save_port=i;
		return;
	}
	if(0xf0==key_save_port)
	{//The first time Key pressed 
		key_save_port=i;
		return;
	}
	//The second time key pressed
	if(i!=key_save_port)
	{
		key_save_port=0xf0;
		return;//two times not same
	}
	if(key_press_flag) return;
	key_press_flag=1;
	
	k=0X10;
	for(j=0;j<4;j++)
	{
	       RESET_WATCHDOG;
		if((i&k)==0) break;
		k=k<<1;
	}
	if(j<=3)
	{
		key_buf[keyin_point++]=j+0x30;
		if(keyin_point==KEY_BUFF_MAX) keyin_point=0;
		interrupt_request=interrupt_request|KEY_PRESS;
	}
}

uchar Key_Get(void)        
{
	uchar i;
	if(keyin_point==keyout_point)//Key buffer is empty,no key be read
	{
		interrupt_request=interrupt_request&~KEY_PRESS;//Clear int event
		return(0);
	}
	i=key_buf[keyout_point++];
	if(keyout_point==KEY_BUFF_MAX) keyout_point=0;
	if(keyin_point==keyout_point)
    {//Key buffer is read end,clear interrupt flag
    	interrupt_request=interrupt_request&~KEY_PRESS;//Clear int event
    }
	return(i);
}
void Key_Buffer_Clear(void) 
{
	keyin_point=0;
	keyout_point=0;
	key_save_port=0xF0;
	interrupt_request=interrupt_request&~KEY_PRESS;
}

⌨️ 快捷键说明

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