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

📄 keyscan.c

📁 LCD显示的ENGLISH键盘
💻 C
字号:
/******************************************************
说	明:	4*4扫描程序,能自动读取键值,输出对应的值
		P10-P14接列(读状态),P14_P17接行(送扫描)
功	能:	实现键盘扫描功能
时	间:	2007/03/14
作	者:	李早红
******************************************************/

/******************************************************
修改时间:2007/03/15
这段程序实现4*4键盘的基本功能,如检查是否有按键,输出自定义的键盘值
输出字符串等功能:
有两个能在主程序里调用的函数:
1.unsigned char keyscan(void)   //按键扫描程序,根据反回值的不同,确定是否有键按下
当键值为0表示没有键按下。键值为1~16则对应相应的键值按下。
2.keystring(unsigned char *keystingvalue)    //按键字符串输入
有两个参数。第一个为要输入字符要存入的数组,另一个为确定输入字符串的长度。调用此函数据前要确认有键按下
********************************************************/

/******************************************************
函数名称:delay()
功    能:实现延时
入口参数:time
出口参数:无
********************************************************/
void delay(unsigned int delaytime)
{
	unsigned char i,j;
	for(i=0;i<delaytime;i++)
	{
		for(j=0;j<200;j++);
	}
}


/******************************************************
函数名称:keyscan()
功    能:认键盘直的按下,并返回键值
入口参数:无
出口参数:keyvalue
********************************************************/
unsigned char keyscan(void)
{	
	unsigned char temp,keyvalue=0;

	P1=0x0f;
	delay(2);									//延时    可以不要
	temp=P1;
	if(temp!=0x0f)								//有键按下
	{
		delay(1);
		temp=P1;
		if(temp!=0x0f)							//去抖动
		{
			P1=0x0ef;
			temp=P1;
			switch	(temp&0x0f)					//计算键值
			{
				case 14: keyvalue=1; return keyvalue;
				case 13: keyvalue=2; return keyvalue;
				case 11: keyvalue=3; return keyvalue;
				case 7: keyvalue=4; return keyvalue;
			}
			P1=0x0df;
			temp=P1;
			switch(temp&0x0f)
			{
				case 14: keyvalue=5;  return keyvalue;
				case 13: keyvalue=6;  return keyvalue;
				case 11: keyvalue=7;  return keyvalue;
				case 7: keyvalue=8;   return keyvalue;
			}
			P1=0x0bf;
			temp=P1;
			switch(temp&0x0f)
			{
				case 14: keyvalue=9;  return keyvalue;
				case 13: keyvalue=10;  return keyvalue;
				case 11: keyvalue=11;  return keyvalue;
				case 7: keyvalue=12;   return keyvalue;
			}
			P1=0x07f;
			temp=P1;
			switch(temp&0x0f)
			{
				case 14: keyvalue=13;  return keyvalue;
				case 13: keyvalue=14;  return keyvalue;
				case 11: keyvalue=15;  return keyvalue;
				case 7: keyvalue=16;   return keyvalue;
			}
		}
	}
	keyvalue=0;	
	return keyvalue;					//没有键按下
		
}
			
/******************************************************
函数名称:valuechange()
功    能:键值转换
入口参数:keyrealvalue
出口参数:keydisvalue
********************************************************/
#define KEY_0 0				//定义键值
#define KEY_1 1
#define KEY_2 2
#define KEY_3 3
#define KEY_4 4
#define KEY_5 5
#define KEY_6 6
#define KEY_7 7
#define KEY_8 8
#define KEY_9 9
#define KEY_ADD 10
#define KEY_SUB 11
#define KEY_MUL 12
#define KEY_DIV 13
#define KEY_CLO 14
#define KEY_EQU	15

unsigned char valuechange (unsigned char keyrealvalue)
{
	unsigned char i;
	code unsigned char keydisvalue[]={KEY_7,KEY_8,KEY_9,KEY_DIV,KEY_4,KEY_5,KEY_6,KEY_MUL,KEY_1,KEY_2,KEY_3,KEY_SUB,KEY_CLO,KEY_0,KEY_EQU,KEY_ADD};
	for(i=1;i<=16;i++)
	{
		if(i==keyrealvalue)
		{
			return keydisvalue[i-1];
		}
	}
}

/******************************************************
函数名称:keystring()
功    能:输入一串字符
入口参数:*keystringvalue
出口参数:无
说书  明:调用此函数之前要确认有键按下。
********************************************************/
keystring(unsigned char *keystringvalue)                 //调用此函数之前要确认有键按下。
{
    unsigned char i=0,temp=0;
//	for(i=20;i>0;i--)									//数组清零
//	{
//		keystringvalue[i]=0;
//	}
    while(1)
    {
        while(keyscan()==0);                              //等待按键
        temp=keyscan();
        if(temp==KEY_EQU)
        {
            keystringvalue[i]='\0';
            return;
        }
        keystringvalue[i]=valuechange(temp)+48;			//对应CGROM码
        while(keyscan()!=0);                             //松开按键
        i++;                                             
    }
}
           





/********2007-3-15 16:48

//#include <reg51.h>
main()
{	
	delay(10);
	while(1)
	{
		unsigned  char b,a,keystringvalue[10],*stringlongth;
		unsigned  char i;
		a=keyscan();
		b=valuechange(a);
		while(1)
		{
			//P2=b;	                	
			if(keyscan()!=0)
			{
				*stringlongth=0;
			    keystring(keystringvalue,stringlongth);  
 			    //P1=0x0f;
			    for(i=0;i<*stringlongth;i++)
			    {
					
			        P2=keystringvalue[i];
					delay(50);
			    }
			}
		}
	}
}
*********/

⌨️ 快捷键说明

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