下面说的单片机也主要是51与台系芯片,也就是现在的工作。其它应用不在讨论范围。才识有限,也敬请前辈们勘误,指教。
你首先要设置按键IO设置成输入 开上拉 (算我废话)
/*********************************************************************
函 数 名: void KeyScanPor(void)
功能 描述: 按键扫描程序 整合按键统一处理
说 明 : 得到按键的值 Key_Val
***********************************************************************/
u8 KeyScanPor(void)
{
u8 KeyScan_Val; //按键扫描值
KeyScan_Val=0;
if(P3_4==0)
KeyScan_Val|=0X01;
if(P2_5==0)
KeyScan_Val|=0X02;
if(P3_6==0)
KeyScan_Val|=0X04;
if(P1_7==0)
KeyScan_Val|=0X08;
return(KeyScan_Val); //返回按键扫描值
}
/*********************************************************************
函 数 名: void KeyValPor(void)
功能 描述: 按键值处理程序
说 明 :
***********************************************************************/
void KeyValPor(void)
{
u8 i ;
Key_Val=KeyScanPor(); //读取按键
if(Key_Val!=0) //判断是否有按键
{
if(Key_Val==Key_Price) //判断两次值是否一样
{
Key_Count++;
if(Key_Count==15) //记录15次 一般就是15MS
{
Key_Count=0;
//可在此处进行长按按键处理
if(Key_Flag==0)
{
Key_Flag=1;
//只有单按键 //若要多按键则需要重新配置下面这段程序
switch(Key_Val)
{
case 1: Key_temp=1; break;
case 2: Key_temp=3; break;
case 4: Key_temp=5; break;
case 8: Key_temp=6; break;
default: break;
}
}
}
}
else
{
Key_Price=Key_Val; //两次按键值不一样,将值送入
Key_Count=0; //两次值不一样清除计数
}
}
//========================================================
else //没有检测到按键
{
Key_Flag=0;
Key_Count=0;
Key_Price=0;
}
}
最后感谢大家能看完,在下还是菜鸟,希望能得到前辈们的指导,拜谢
2014/4/9
四非人
QQ:189708929
|