key.c

来自「芯片at89s52」· C语言 代码 · 共 103 行

C
103
字号
/******************************************************************************
 * File   Name: key.c														  *
 * Create Time: 2007/07/14													  *
 * Description:																  *
 * Copyright  :																  *
 * History    :																  *
 * |---Data---|---Author---|--Version--|--------------Description-------------|
 *****************************************************************************/
 //#define KEY_ONOFF
 #ifdef  KEY_ONOFF
/******************************
 *      Head File			  *
 *****************************/
 #include"key.h" 
/******************************
 *     Global Variable		  *
 *****************************/
 int row=0; //键盘行数
 int column=0;//键盘列数
 uchar keybuf=0x00;//键盘按钮显示内容中间量*/
 uchar keybit = 0;//用以计数键盘扫描行数
/******************************
 *	   Const Segment		  *
 *****************************/
 uchar key_row[4] = {0x0e,0x0d,0x0b,0x07};//令键盘1-4行依次有效
/******************************
 *      Function  Implement	  *
 *****************************/
 
/**********************************************************************************************
Function Name:按键显示函数																	  *
Target : 将按键相应的数值显示在数码管上														  *
Input  Parameter : 8位的unsigned char														  *
Output Parameter : 无																		  *
Function Description : 																		  *
**********************************************************************************************/
uchar keyValue(uchar temp)
{
	 switch(temp&0xf0)	//判断高四位的值
		{
			case 0x70:column = 0x00;break; //7位
			case 0xb0:column = 0x04;break; //6
			case 0xd0:column = 0x08;break; //5
			case 0xe0:column = 0x0c;break; //4		
		}
		switch(temp&0x0f) //判断第四位的值
		{
			case 0x0e:row = 0x00;break;	//0
			case 0x0d:row = 0x01;break;	//1
			case 0x0b:row = 0x02;break;	//2
			case 0x07:row = 0x03;break;	//3
		}
		return 	row+column;
}
/**********************************************************************************************
Function Name:键盘按下函数																	  *
Target  : 判断键盘是否按下																	  *
Input  Parameter : 无																		  *
Output Parameter : 1或0																		  *
Function Description : 用全扫描的方法判断键盘是否有键按下,有键按下返回1,键值保存在中间量	  *
					   temp中,没有返回0.													  *
**********************************************************************************************/
uchar isKeyDown(void)
{	 
	 P2=0xf0;          //将低四位置0
	 if((P2&0xf0)<0xf0)//判断是否有键按下,即高四位不全为1即有键按下		  	 	
	 	{
		 keybuf=P2&0xf0;//保存高四位的值
	     P2=0x0f;	  //将高四位置0
	  	 keybuf|=P2&0x0f;//保存低四位的值		 
		 return 0x01;
		}			   		
	 return 0x00;	  //输出该键值
}
/**********************************************************************************************
Function Name:对按下键的操作函数															  *
Target   : 按下相应键做相应功能																  *
Input  Parameter : 无																		  *
Output Parameter : 无																		  *
Function Description : 若有键按下,显示键码													  *
**********************************************************************************************/
void keyOperate(void)
{
	 if(isKeyDown()==0x01)
		DisPrint(keyValue(keybuf));
}

uchar downKeyValue()
{
	return keybuf;
}
/**********************************************************************************************
Function Name:定时器0中断函数																  *
Target   : 定时器中断并产生相应功能															  *
Input  Parameter : 无																		  *
Output Parameter : 无																		  *
Function Description : 间隔2.5ms产生一次中断												  *
**********************************************************************************************/
#endif

/*******************************************************************************
 *                        The end of the entire file			               *
 ******************************************************************************/

⌨️ 快捷键说明

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