📄 key.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 + -