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

📄 input_080627.h

📁 51单片机项目集
💻 H
字号:

#define int8 unsigned char
/*---------------------------------------------------------------------
键值检测程序
                  
   RB4(KEY_OUT1)   KEY_ONOFF
   RB5(KEY_OUT2)   KEY_ACCU
   RB6(KEY_OUT3)   KEY_BUZZER
   RB7(KEY_OUT4)   KEY_BACKLED
------------------------------------------------------------------------*/

#define  KEY1     4
#define  KEY2     5
#define  KEY3     6
#define  KEY4     7


//键值定义
#define   KEY_NONE       	0x00
#define   KEY_ONOFF       	0x10
#define   KEY_ACCU       	0x20
#define   KEY_BUZZER      	0x40     
#define   KEY_BACKLED      	0x80     

#define   KEYCOUNT_DEF 		1             	//10ms*1=10ms  去抖时间

int8  keyvalue=KEY_NONE;
int8  key1count_dn =0,key1count_up =0;		//按键去抖计数器
int8  key2count_dn =0,key2count_up =0;
int8  key3count_dn =0,key3count_up =0;
int8  key4count_dn =0,key4count_up =0;

void keyinput(void)
{
	int8  portb_temp;
    portb_temp=P2;
	//Power
    if(!(portb_temp&0x10))  //键按下(dn)处理
    {
    	if (key1count_up<KEYCOUNT_DEF) key1count_up= 0;	//清弹起计数器,保证弹起的脉宽必须大于2*KEYCOUNT_DEF
    	key1count_dn++;
     	if (key1count_dn==KEYCOUNT_DEF) 	{ keyvalue|=0x10;key1count_up= 0; }  
     	if (key1count_dn> KEYCOUNT_DEF) 	key1count_dn = KEYCOUNT_DEF;	//保持按下计数器
	}
	else //键弹起(up)处理
	{
		if (key1count_dn<KEYCOUNT_DEF) key1count_dn=0; //清按下计数器,保证按下的脉宽必须大于2*KEYCOUNT_DEF
		key1count_up++;
	 	if (key1count_up==KEYCOUNT_DEF) 	{ keyvalue&=0xef;key1count_dn=0;}
     	if (key1count_up>KEYCOUNT_DEF)		key1count_up = KEYCOUNT_DEF;	
	}   
    // ACCU KEY
    if(!(portb_temp&0x20))  //键按下(dn)处理
    {
    	if (key2count_up<KEYCOUNT_DEF) key2count_up= 0;	//清弹起计数器,保证弹起的脉宽必须大于2*KEYCOUNT_DEF
    	key2count_dn++;
     	if (key2count_dn==KEYCOUNT_DEF) 	{ keyvalue|=0x20;key2count_up= 0; }  
     	if (key2count_dn> KEYCOUNT_DEF) 	key2count_dn = KEYCOUNT_DEF;	//保持按下计数器
	}
	else //键弹起(up)处理
	{
		if (key2count_dn<KEYCOUNT_DEF) key2count_dn=0; //清按下计数器,保证按下的脉宽必须大于2*KEYCOUNT_DEF
		key2count_up++;
	 	if (key2count_up==KEYCOUNT_DEF) 	{ keyvalue&=0xdf;key2count_dn=0;}
     	if (key2count_up>KEYCOUNT_DEF)		key2count_up = KEYCOUNT_DEF;	
	}      
     
    // BUZZER KEY
    if(!(portb_temp&0x40))  //键按下(dn)处理
    {
    	if (key3count_up<KEYCOUNT_DEF) key3count_up= 0;	//清弹起计数器,保证弹起的脉宽必须大于2*KEYCOUNT_DEF
    	key3count_dn++;
     	if (key3count_dn==KEYCOUNT_DEF) 	{ keyvalue|=0x40; key3count_up= 0;}  
     	if (key3count_dn> KEYCOUNT_DEF) 	key3count_dn = KEYCOUNT_DEF;	//保持按下计数器
	}
	else //键弹起(up)处理
	{
		if (key3count_dn<KEYCOUNT_DEF) key3count_dn=0; //清按下计数器,保证按下的脉宽必须大于2*KEYCOUNT_DEF
		key3count_up++;
	 	if (key3count_up==KEYCOUNT_DEF) 	{ keyvalue&=0xbf;key3count_dn=0;}
     	if (key3count_up>KEYCOUNT_DEF)		key3count_up = KEYCOUNT_DEF;	
	}      
	//灯光键检测
    if(!(portb_temp&0x80))  //键按下(dn)处理
    {
    	if (key4count_up<KEYCOUNT_DEF) key4count_up= 0;	//清弹起计数器,保证弹起的脉宽必须大于2*KEYCOUNT_DEF
    	key4count_dn++;
     	if (key4count_dn==KEYCOUNT_DEF) 	{ keyvalue|=0x80; key4count_up= 0;}  
     	if (key4count_dn> KEYCOUNT_DEF) 	key4count_dn = KEYCOUNT_DEF;	//保持按下计数器
	}
	else //键弹起(up)处理
	{
		if (key4count_dn<KEYCOUNT_DEF) key4count_dn=0; //清按下计数器,保证按下的脉宽必须大于2*KEYCOUNT_DEF
		key4count_up++;
	 	if (key4count_up==KEYCOUNT_DEF) 	{ keyvalue&=0x7f;key4count_dn=0;}
     	if (key4count_up>KEYCOUNT_DEF)		key4count_up = KEYCOUNT_DEF;	
	}   	
}

⌨️ 快捷键说明

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