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

📄 key.c.bak

📁 键盘处理
💻 BAK
字号:
/***************************************************************
功能:实现16只按键的识别,并在数码管上显示对应的按下的那只键                             
作者:SG                                                         
时间:2004-03-15                                                 
版本:V1.0                                                       
***************************************************************/

/*-------------------------------------------------------------
#define 分别定义按键key1 --- key16对应的数值
-------------------------------------------------------------*/
#define key1 1    
#define key2 2    
#define key3 3    
#define key4 4    
#define key5 5    
#define key6 6    
#define key7 7    
#define key8 8    
#define key9 9    
#define key10 0   
#define key11 0x0a
#define key12 0x0b
#define key13 0x0c
#define key14 0x0d
#define key15 0x0e
#define key16 0x0f

sfr  KeyPort 	= 0x80;
sbit  _ReadKey 	= 0xa5;
sbit  row1 		= 0xa6;
sbit  row2 		= 0xa7;
sbit KD0 = 0x80;
sbit KD1 = 0x81;
sbit KD2 = 0x82;
sbit KD3 = 0x83;
sbit KD4 = 0x84;
sbit KD5 = 0x85;
sbit KD6 = 0x86;
sbit KD7 = 0x87;

/*-------------------------------------------------
功能:判别有无按键,并返回按下的是哪个键
-------------------------------------------------*/
bit ReadKeyVal(unsigned char *key)
{
       unsigned char i,temp[2];
       _ReadKey = 0;
       KeyPort = 0xFF;
       row1 = 0;
       row2 = 0;
       temp[0] = KeyPort ;
       if( temp[0] == 0xFF )
       {
           _ReadKey = 1;
           return(1);
       }
       temp[0] = 0xFF;
       temp[1] = 0xFF;
       for( i = 0;i < 2;i++ )
       {
           row1 = 0;
           row2 = 1;
           if ( !KD0 )
               temp[i] = key1;
           else if ( !KD1 )
               temp[i] = key3;
           else if ( !KD2 )
               temp[i] = key5;
           else if ( !KD3 )
               temp[i] = key7;
            else if ( !KD4 )
               temp[i] = key9;
           else if ( !KD5 )
               temp[i] = key11;
           else if ( !KD6 )
               temp[i] = key13;
           else if ( !KD7 )
               temp[i] = key15;
           row1 = 1;
           row2 = 0;
           if ( !KD0 )
               temp[i] = key2;
           else if ( !KD1 )
               temp[i] = key4;
           else if ( !KD2 )
               temp[i] = key6;
           else if ( !KD3 )
               temp[i] = key8;
            else if ( !KD4 )
               temp[i] = key10;
           else if ( !KD5 )
               temp[i] = key12;
           else if ( !KD6 )
               temp[i] = key14;
           else if ( !KD7 )
               temp[i] = key16;
           Delay_xMs(10);
       }
       if ( temp[0] != 0xFF && temp[0] == temp[1] )
       {
                *key = temp[0];
                _ReadKey = 1;
                return(0);
       }
       _ReadKey = 1;
       return(1);
}

/*-------------------------------------------------
主程序
功能:实现16只按键的识别,并在数码管上显示
  对应的按下的那只键 
-------------------------------------------------*/
void main()
{
      unsigned char key;
      Hc164(16);						//关闭显示
      while(1)
      {
           if ( !ReadKeyVal(&key))		//识别有无按键
           {
                Hc164(key);				//显示按下的键
           }
      }
}

⌨️ 快捷键说明

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