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

📄 key.c

📁 电磁流量计的源程序。将流体流量用电磁转换方式变换成弱电信号
💻 C
字号:
/************************************************************************/
/*                                                                      */
/*			key scan 			                                        */
/*                                                                      */
/*              Author: zhiqiang huo                                    */
/*         left key P2.7                                                */
/*          mid key p2.6                                                */
/*         right key P2.5                                               */
/************************************************************************/

#include "reg52.h"
#include "typedef.h"
#include "function.h"
#include "define.h"
#include "varible.h"

#define LEFTKEY 0x01            //LEFF KEY
#define MIDDLEKEY 0x02      //
#define RIGHTKEY 0x03
#define SETMIMA 0x04       //left and mid key
#define BIAODIN 0x05       //mid and right key
#define KEY_TM 4
#define NOKEY  0
#define KEYOK  1

sbit POP_PORT = P3^7 ;
//***************function declare******************
void Key_init(void);
void Key_hd(void);
void Key_scan(void);
unsigned char Key_judge(void);
void Con_key(void);
//***************8*********************************


 /****************************/
 /****************************/
 void Key_init(void)
 {
  unsigned char i;
  for(i=0;i<4;i++)
     key_data[i] = 0 ;
  key_tmr = 0;
  keyvld = 0;
  keyvld_old = 0 ;
  key_flag_F = (bit)0;
  judge_pop = 0;
  empty_pop_F = 0 ;
  set_dp_F = 0;
  return;
  }

  /****************************/
  /****************************/
void Key_hd(void)
{
 Key_scan();
 if(key_tmr != 0)
    key_tmr--;
 else {
      key_tmr = KEY_TM;
	  if(Key_judge() == KEYOK)
	     Con_key();
	  if(judge_pop >= 3)
	     empty_pop_F = EMPTY;
	  else if(judge_pop <= 1)
	     empty_pop_F = FULL ;
	  }
 return;
 }


/***************************************/
/***************************************/
void Key_scan(void)
 
{
  unsigned char i;
  P2=P2|0xe0;     
  key_data[0]=(~P2)&0xe0;    // get P2.5,P2.6,P2.7
  for(i=3;i>0;i--)
   {
    key_data[i]= key_data[i-1];
    }
  if(POP_PORT == EMPTY)
  {
  	if(judge_pop <= 3)
  	   judge_pop++;
  }
  else
  {
  	if(judge_pop > 1)
  	   judge_pop--;
  }

return;	   

}
 

/******************************/
/******************************/
unsigned char  Key_judge(void)
{
 if((key_data[0] == key_data[1])&&(key_data[1] == key_data[2])
        &&(key_data[2] == key_data[3]))
        
     return(1);
 else 
     return(0);

}

/*************************/
/*************************/
void Con_key(void)
{
  switch(key_data[1])
  {
   case 0x80:
         keyvld = LEFTKEY;
		 break;
   case 0x40:
         keyvld = MIDDLEKEY;
		 break;
   case 0x20:
         keyvld = RIGHTKEY;
	     break;
   case 0xc0:
         keyvld = SETMIMA;
		 break;
   case 0x60:
         keyvld = BIAODIN;
		 break;
	default :
	     keyvld = NOKEY;
		 break;
   }
   if(keyvld == NOKEY)
      {
	     keyvld_old = keyvld ;
		 key_flag_F = 0;
		 multi_key_F = 0;
	   }

   else if(keyvld != keyvld_old)
        {
        	if(multi_key_F == 1)
        	 ;
            else
             {
	            keyvld_old = keyvld;
	            key_flag_F = 1;
	         }
	    }
	    
      return;
  }

⌨️ 快捷键说明

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