因仑“3+1”工程特种兵精英论坛

标题: 按键扫描C语言程序 [打印本页]

作者: XJzy    时间: 2015-9-24 16:13
标题: 按键扫描C语言程序
如何增加按键扫描,同样不需要用到Delay,而按键消抖又不能省略,请看下面的例子
前面例子中函数不变
主函数里面增加一句read_key();


void  main(void)
{
  uchar temp=15;
    init();       //初始化
while(1)
{
if(flag)
  {
    flag=0;
             display(); //显示函数
read_key();
}
}
}


char read_key(void)
{
   static char key_state = 0;
   char key_press;
   key_press = P1; // 读按键 I/O 电平
key_press &=0x01;   //假设我们要读P1的第一个I/O
   switch (key_state)
   {
        case 0: // 按键初始态
if (key_press==0) key_state = 1; // 键被按下,状态转换到键确认态
break;
        case 1: // 按键确认态
if (key_press==0)
                {
                        key_state = 2; // 状态转换到键释放态
//....................................
               //在这里写你按键按下要执行的代码
//例:
date[0]++;
date[1]+=2;
date[2]+=3;
                }
                else
                key_state = 0; // 按键已抬起,转换到按键初始态
break;
        case key_state_2:
                if (key_press) key_state = 0; //按键已释放,转换到按键初始态
break;
   }
}


这样就轻松实现了按键扫描操作。





欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4