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

📄 keypaddrive.h

📁 这是用proteus做的基于51核的一个菜单仿真的程序开发环境keil 没有使用os在裸机上跑
💻 H
字号:
//---------------------------------------------
// the 4*4 keypad driver 
// write by liujianwei 2005-6-25
// e-mail:liujianwei@ruyi.com
// qq:361299856
//---------------------------------------------


#include <absacc.h>
#define ENTER_KEY		0x0d
#define ESC_KEY			0x01
#define UP_KEY			0x80
#define DOWN_KEY		0x81
#define LEFT_KEY		0x82
#define RIGHT_KEY		0x83
#define KEY_ROW_PORT 		0x2000
#define KEY_VERTICAL_PORT       0xA000
#define unchar unsigned char 
#define KEY_ROW 		XBYTE[KEY_ROW_PORT]
#define KEY_VERTICAL	XBYTE[KEY_VERTICAL_PORT]
#define EMPTY 				0
#define NOTEMPTY 			2
#define FULL 				1
#define NOTFULL				3
//-------------------------------------------
// the globle varible declar   here 
//---------------------------------------------
 unchar  KeyBuf[16];
 unchar  idata  KeyPadStatus=0;
 unchar  idata Front=0;
 unchar  idata Real=0;
 unchar  BufFlag=EMPTY;  //0= empty
  const unchar code  Row[4]={ 0x01,0x02,0x04,0x08}; 
  const unchar code KeyElement0[4]={'1','2','3','4'};
  const unchar code KeyElement1[4]={'5','6','7','8'};
  const unchar code  KeyElement2[4]={'9','0',ESC_KEY,ENTER_KEY};
  const unchar code KeyElement3[4]={UP_KEY,DOWN_KEY,LEFT_KEY,RIGHT_KEY};
 unchar bdata  Key;
   sbit   Vertical0= Key^0;
   sbit   Vertical1= Key^1;
   sbit   Vertical2= Key^2;
   sbit   Vertical3= Key^3;

 unchar idata  Temp,Temp1;
 unchar Delay10ms;
//--------------------------------------
// put the  char into  the  key buffer
//--------------------------------------
	PutInBuf(unchar x)
 		{
		  if (BufFlag!=FULL)
           		{
				 KeyBuf[Real]=x;
				 
				 Real++;
				 Real&=0x0f;
				 BufFlag=NOTEMPTY;
				 if (Real==Front)
					BufFlag=FULL;
				}
		}
//----------------------------------------
//  get char from the key bufffer
//---------------------------------------
 
 unchar GetKey()
	     { unchar x;
		  if (BufFlag!=EMPTY)
			  {
			    x=KeyBuf[Front];
			    Front++;
				Front&=0x0f;
				BufFlag=NOTFULL;
				if (Real==Front)
					BufFlag=EMPTY;
				return(x);	
			  }
			 //else 	
    		return(0);	
	     }
  
//--------------------------------------
// key scan  function 
// scan the key and put the key into key  buffer 
//-----------------------------------------------
  KeyScan()
	{unchar x0,x1,x2,x3;
	 
	 switch(KeyPadStatus)
        {
	 case 0  : 
//--------------------------------------------------------------------------
// scan the first row
//--------------------------------------------------------------------------
                      KEY_ROW = Row[0];
					 
                      Key=KEY_VERTICAL;
					//	while(1);
					  
					 if (Key )
						{
					  if (Vertical0)
						  {
                          Temp=KeyElement0[0];
						   KeyPadStatus=1;
                          break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp=KeyElement0[1];

                          KeyPadStatus=1;
                          break;
					      }
                      if  (Vertical2)
                          {
                          Temp=KeyElement0[2];

                          KeyPadStatus=1;
                          break;
					      }
					 if  (Vertical3)
                          {
                          Temp=KeyElement0[3];

                          KeyPadStatus=1;
                         break;
					      }
						}
//------------------------------------------------------------------------------
// scan the secend  row
//------------------------------------------------------------------------------
					  KEY_ROW = Row[1];    
                      Key=KEY_VERTICAL;
					 if (Key)
						{
					  if (Vertical0)
						  {
                          Temp=KeyElement1[0];
						   KeyPadStatus=1;
                          break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp=KeyElement1[1];

                          KeyPadStatus=1;
                          break;
					      }
                      if  (Vertical2)
                          {
                          Temp=KeyElement1[2];

                          KeyPadStatus=1;
                          break;
					      }
					 if  (Vertical3)
                          {
                          Temp=KeyElement1[3];

                          KeyPadStatus=1;
                          break;
					      }
						}
//------------------------------------------------------------------------------
// scan the third  row
//------------------------------------------------------------------------------
					  KEY_ROW = Row[2];    
                      Key=KEY_VERTICAL;
					 if (Key)
						{
					  if (Vertical0)
						  {
                          Temp=KeyElement2[0];
						   KeyPadStatus=1;
                          break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp=KeyElement2[1];

                          KeyPadStatus=1;
                          break;
					      }
                      if  (Vertical2)
                          {
                          Temp=KeyElement2[2];

                          KeyPadStatus=1;
                          break;
					      }
					 if  (Vertical3)
                          {
                          Temp=KeyElement2[3];

                          KeyPadStatus=1;
                          break;
					      }
						}
//------------------------------------------------------------------------------
// scan the fourth  row
//------------------------------------------------------------------------------
					  KEY_ROW = Row[3];    
                      Key=KEY_VERTICAL;
					if (Key)
						{
					  if (Vertical0)
						  {
                          Temp=KeyElement3[0];
						   KeyPadStatus=1;
                         break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp=KeyElement3[1];

                          KeyPadStatus=1;
                          break;
					      }
                      if  (Vertical2)
                          {
                          Temp=KeyElement3[2];

                          KeyPadStatus=1;
                          break;
					      }
					 if  (Vertical3)
                          {
                          Temp=KeyElement3[3];

                          KeyPadStatus=1;
                          break;
					      }
						}
					///FirstScan();

					 break; 
    case   1:
     				if (Temp!=0)
						{
						Delay10ms=0;
						KeyPadStatus=2;

						}
						break;
   case  2:
					if (Delay10ms>=1)
						{
						  Delay10ms=0;
//--------------------------------------------------------------------------
// scan the first row
//--------------------------------------------------------------------------
                      KEY_ROW = Row[0];
                      Key=KEY_VERTICAL;
					if (Key)
						{
					  if (Vertical0)
						  {
                          Temp1=KeyElement0[0];
						  if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						}
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp1=KeyElement0[1];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
                      if  (Vertical2)
                          {
                          Temp1=KeyElement0[2];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
					 if  (Vertical3)
                          {
                          Temp1=KeyElement0[3];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						}
						 
//------------------------------------------------------------------------------
// scan the secend  row
//------------------------------------------------------------------------------
					  KEY_ROW = Row[1];    
                      Key=KEY_VERTICAL;
					if (Key)
						{

					  if (Vertical0)
						  {
                          Temp1=KeyElement1[0];
						 if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp1=KeyElement1[1];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
                      if  (Vertical2)
                          {
                          Temp1=KeyElement1[2];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
					 if  (Vertical3)
                          {
                          Temp1=KeyElement1[3];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						}
//------------------------------------------------------------------------------
// scan the third  row
//------------------------------------------------------------------------------
					  KEY_ROW = Row[2];    
                      Key=KEY_VERTICAL;
					if (Key)
						{
					  if (Vertical0)
						  {
                          Temp1=KeyElement2[0];
						 if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp1=KeyElement2[1];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
                      if  (Vertical2)
                          {
                          Temp1=KeyElement2[2];

                         if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
					 if  (Vertical3)
                          {
                          Temp1=KeyElement2[3];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						}
//------------------------------------------------------------------------------
// scan the fourth  row
//------------------------------------------------------------------------------
					  KEY_ROW = Row[3];    
                      Key=KEY_VERTICAL;
					if (Key)
						{
					  if (Vertical0)
						  {
                          Temp1=KeyElement3[0];
						  if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
						    
					  if  (Vertical1)
                          {
                          Temp1=KeyElement3[1];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
                      if  (Vertical2)
                          {
                          Temp1=KeyElement3[2];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
					 if  (Vertical3)
                          {
                          Temp1=KeyElement3[3];

                          if (Temp==Temp1)
						{
						  PutInBuf(Temp1);
						  KeyPadStatus=4;
						  break;
						 
						}

 
						KeyPadStatus=0;
						Temp=0;
						break;
					      }
					     }
					KeyPadStatus=0;
					Temp=0;
					break;
					 }
//---------------------------------------------------------------------------
   // case    3:  
				  
   case 4:           
					  KEY_ROW = Row[0];    
                      x0=KEY_VERTICAL&0x0f;
					  KEY_ROW = Row[1];    
                      x1=KEY_VERTICAL&0x0f;
				      KEY_ROW = Row[2];    
                      x2=KEY_VERTICAL&0x0f;
					  KEY_ROW = Row[3];    
                      x3=KEY_VERTICAL&0x0f;
					   if ((x0==0)&(x1==0)&(x2==0)&(x3==0))
					      {
							KeyPadStatus=0;
							Temp=0;
							
					      }
						break;
   
						
	}
   }


⌨️ 快捷键说明

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