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

📄 key.c

📁 初学者首选各种实验原代码
💻 C
字号:
/***************************************************************
功能:实现16只按键的识别,并在数码管上显示对应的按下的那只键                             
作者:SG                                                         
时间:2004-03-15                                                 
版本:V1.0                                                       
***************************************************************/

/*-------------------------------------------------------------
#define 分别定义按键key1 --- key16对应的数值
-------------------------------------------------------------*/
#include "REG52.H"
#define key1 1    
#define key2 2    
#define key3 3    
#define key4 4    
 

/*-------------------------------------------------------------
sbit分别定义CPU 管脚对应的硬件连接
-------------------------------------------------------------*/
sfr  KeyPort 	= 0x90;
sbit  col1 		= 0x96;
sbit  col2 		= 0x97;
sbit  KD0  		= 0x94;
sbit  KD1       = 0x95;
sbit led4		= 0x93;

/*------------------------------------------------
功能:对应0--F显示码.
-------------------------------------------------*/
unsigned char code Led_Show[]={0x50,0xf5,0x68,0x4a,0x47,0xc2,0xc0,0x5b,0x40,0x42,0x41,0xc4,0xf0,0x4c,0xe0,0xe1,0xff};


/*-------------------------------------------------
功能:1MS延时子程序
-------------------------------------------------*/
void Delay_xMs(unsigned int x)
{
    unsigned int i,j;
    for( i =0;i < x;i++ )
    {
        for( j =0;j<500;j++ );
    }
}

void LED_SHOW2(unsigned char dat)
{
	led4=0;
	P0=Led_Show[dat];
}

/*-------------------------------------------------
功能:判别有无按键,并返回按下的是哪个键
-------------------------------------------------*/
bit ReadKeyVal(unsigned char *key)
{
      unsigned char i,temp[2],temp2;
       KeyPort = 0xFF;
 	   col1 = 0;						//扫描线置低
       col2 = 0;						//扫描线置低
       temp[0]= 0xFF;
       temp2 = KeyPort ;					//读键盘端口
       if( (temp2 & 0x30) == 0x30 )				//等于FF表示没键按下
       {
           return(0);					//无按键返回0
       }
  					
       for( i = 0;i < 2;i++ )
       {
           col1 = 0;
           col2 = 1;
           if ( !KD0 )
               temp[i] = key1;
           else if ( !KD1 )
               temp[i] = key2;
           col1 = 1;
           col2 = 0;
           if ( !KD0 )
               temp[i] = key3;
           else if ( !KD1 )
               temp[i] = key4;
           Delay_xMs(10);
       }
       if ( temp[0] != 0xFF && temp[0] == temp[1] )
       {
                *key = temp[0];
                return(0);
       }
       return(1);
}

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

⌨️ 快捷键说明

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