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

📄 key.c

📁 基于c8051f020的应用
💻 C
字号:
//**************************************************************************************************************************
#include <c8051F020.h>
#include "HEAD.H"
//**************************************************************************************************************************
xdata unsigned char con_press_mark;
//**************************************************************************************************************************
bit key_line_in(void)
{
	IN_KEY_ROW = 1;	
  	
	return ( IN_KEY_ROW ) ;

}
//**************************************************************************************************************************

void key_line_out(unsigned char out_data)
{
   xdata unsigned char i;

   KEY_CLK_0
   for (i = 0 ;  i< 8 ; i ++)
  	{	
	    out_data <<= 1;
		if(CY)
			KEY_DATA_1
		else
			KEY_DATA_0
 	    KEY_CLK_1
 	    KEY_CLK_0
	}
	KEY_DATA_1
}
//**************************************************************************************************************************

unsigned char get_key( unsigned char countinue_dir )
{
	key_line_out(0);
	if(key_line_in())
	{
		IN_KEY_ROW = 0;	
		Delay_ms( 100 ) ;
		return (0);//判断无键输入  
	}
 	Delay_ms( 10 ) ;
	if(key_line_in()) return (0);
   //有键输入
	key_line_out(0xfe) ;
	if(!key_line_in())
	{
		KEYLED=1;
		while(!key_line_in() && countinue_dir);//	WDTCR = 0x37;
		KEYLED=0;
		if(!countinue_dir) 
		{
			if(con_press_mark < 4) 
			{
				countinue_dir = 10;
				while(!key_line_in() )
				{
				    Delay_ms((5 - con_press_mark) * 20);
					if(!countinue_dir-- ) {con_press_mark++; break;} 
				}
			}
		}
		else con_press_mark = 0;
		return (UP_ARROW_KEY);
	}

	key_line_out(0xfd) ;
	if(!key_line_in())
	{
		KEYLED=1;
		while(!key_line_in() && countinue_dir);//	WDTCR = 0x37;
		KEYLED=0;
		if(!countinue_dir) 
		{
			if(con_press_mark < 4) 
			{
				countinue_dir = 10;
				while(!key_line_in() )
				{
				    Delay_ms((5 - con_press_mark) * 20);
					if(!countinue_dir-- ) {con_press_mark++; break;} 
				}
			}
		}
		else con_press_mark = 0;
		return (LEFT_ARROW_KEY);
	}

	key_line_out(0xfb) ;
	if(!key_line_in())
	{
		KEYLED=1;
		while(!key_line_in() && countinue_dir);//	WDTCR = 0x37;
		KEYLED=0;
		if(!countinue_dir) 
		{
			if(con_press_mark < 4) 
			{
				countinue_dir = 10;
				while(!key_line_in() )
				{
				    Delay_ms((5 - con_press_mark) * 20);
					if(!countinue_dir-- ) {con_press_mark++; break;} 
				}
			}
		}
		else con_press_mark = 0;
		return (DOWN_ARROW_KEY);
	}

	key_line_out(0xf7) ;
	if(!key_line_in())
	{
		KEYLED=1;
		while(!key_line_in() && countinue_dir);//	WDTCR = 0x37;
		KEYLED=0;
		if(!countinue_dir) 
		{
			if(con_press_mark < 4) 
			{
				countinue_dir = 10;
				while(!key_line_in() )
				{

				    Delay_ms((5 - con_press_mark) * 20);
					if(!countinue_dir-- ) {con_press_mark++; break;} 
				}
			}
		}
		else con_press_mark = 0;
		return (RIGHT_ARROW_KEY);
	}

	key_line_out(0xef) ;
	if(!key_line_in())
	{
		KEYLED=1;
		while(!key_line_in());
		KEYLED=0;
		return (RETURN_KEY);
	}
	return(0);
}

//**************************************************************************************************************************
// The End
//**************************************************************************************************************************

⌨️ 快捷键说明

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