key_scan.c

来自「uccos2的的源码文件」· C语言 代码 · 共 65 行

C
65
字号
/****************************************Copyright (c)**************************************************

********************************************************************************************************/
#define  IN_KEYSCAN
#include "config.h"

/******************************************************************************
	4X4 矩阵键盘
四个输入引脚:	EINT0 -----( GPF0  )----INPUT
				EINT2 -----( GPF2  )----INPUT
				EINT11-----( GPG3  )----INPUT
				EINT19-----( GPG11 )----INPUT
				
四个输出引脚:	KEYSCAN0---( GPE11 )----OUTPUT
				KEYSCAN1---( GPG6  )----OUTPUT
				KEYSCAN2---( GPE13 )----OUTPUT
				KEYSCAN3---( GPG2  )----OUTPUT
******************************************************************************/
uint8 Key_Scan( void )
{	
	uint8 cur_value;
	
	rGPGDAT = rGPGDAT & (~(1<<6));			//GPG6---output 0
	rGPEDAT = rGPEDAT | (1<<13) ;			//GPE13-- output 1
	
	if( (rGPGDAT&(1<< 2)) == 0 )			
		cur_value =19 ;		//--------------kscan2
	else if( (rGPGDAT&(1<< 3)) == 0 )		
		cur_value=17 ;		//--------------kscan3

	rGPGDAT = rGPGDAT | (1<<6);				//GPG6---output 1
	rGPEDAT = rGPEDAT & (~(1<<13)) ;		//GPE13-- output 0
	
	if( (rGPGDAT&(1<< 2)) == 0 )			
		cur_value= 20 ;		//--------------kscan2
	else if( (rGPGDAT&(1<< 3)) == 0 )		
		cur_value= 18 ;		//--------------kscan3

	switch(cur_value)  {
		case 19 :
			return 'U';		//加速
		case 17 :
			return 'D';		//减速
		case 20 :
			return 'Z';		//正转
		case 18 :
			return 'F';		//反转
	}
	
	return 'N';
}

void KeyScanInit(void)
{
	rGPGCON = rGPGCON & (~(0x0f<<4));					//GPG2,3--INPUT

	rGPGCON = rGPGCON & (~(0x03<<12)) | (0x01<<12);	//GPG6--output
	rGPGDAT= rGPGDAT & (1<<6);							//output 1
	
	rGPECON = rGPECON & (~(0x03<<26)) | (0x01<<26); 	//GPE13--output
	rGPEDAT = rGPEDAT & (1<<13);						//output 1
}

//----------------------------end---------------------------

⌨️ 快捷键说明

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