打印
[家电应用]

按键的处理

[复制链接]
1038|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w189708929|  楼主 | 2015-12-2 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面说的单片机也主要是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
沙发
bbapple| | 2015-12-8 21:41 | 只看该作者
整合按键统一处理!!这个也算是一个创新了。

使用特权

评论回复
板凳
会飞の鱼| | 2015-12-13 10:22 | 只看该作者
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;          //两次值不一样清除计数
          }
   }
这种处理方式很值得学习啊

使用特权

评论回复
地板
zxgpy| | 2015-12-18 13:41 | 只看该作者

使用特权

评论回复
5
Adam02115| | 2015-12-24 14:58 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

22

帖子

0

粉丝