STC单片机2个按键封装
//头文件代码
#ifndef _KEY_H
#define _KEY_H
#include <reg52.h>
sbit KEY1=P3^0;
sbit KEY2=P3^1;
extern unsigned char keySta[2];//按键当前状态
void KeyInit();//按键初始化
void KeyDriver();//按键动作
void KeyScan();//按键扫描
#endif
//源文件代码
#include"key.h"
unsigned char keyCodeMap[2]={0x30,0x31};//标准键盘映射表
unsigned char keySta[2]={1,1};//按键当前状态
void KeyInit()
{
SetGpioMode(GPIOP3,PIN_0|PIN_1,GPIO_Mode_Out_IN);//设置GPIO模式 GPIO_Mode_Out_IN准双向 GPIO_Mode_Out_PP推挽 GPIO_Mode_AIN高阻GPIO_Mode_Out_OD开漏
IoModeInit();//IO口模式初始化
KEY1=1;//
KEY2=1;//
}
void KeyAction(unsigned char KeyCode)//按键动作处理
{
if(KeyCode==0x30)
{
}else if(KeyCode==0x31)
{
}
}
void KeyDriver()
{
unsigned char i;
static unsigned char backUp[2]={1,1};//按键值备份,保存前一次的值
for(i=0;i<2;i++)
{
if(keySta[i]!=backUp[i])
{
if(backUp[i]==0)//弹起才执行
{
KeyAction(keyCodeMap[i]);//按下点亮LED
}
}
backUp[i]=keySta[i];
}
}
void KeyScan()//按键扫描
{
unsigned char i;
static unsigned char keyBuf[2]={0xFF,0xFF};//按键状态缓存
keyBuf[0]=(keyBuf[0]<<1)|KEY1;
keyBuf[1]=(keyBuf[1]<<1)|KEY2;
for(i=0;i<2;i++)
{
if(keyBuf[i]==0x00)
{
keySta[i]=0;//按下
}else if(keyBuf[i]==0xFF)
{
keySta[i]=1;//弹起
}
}
}