⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key.c

📁 伺服控制器主要用于电动执行器的控制 在工业方面大量应用
💻 C
字号:

void KEY_SCAN()                             //按键、拨码开关扫描程序块
{
  unsigned char S1=0x00;                     //拨码开关
  unsigned char K1=0x00;                     //按键
  unsigned char S1_value = 0x00;             //拨码开关中间处理标志
/****************拨码开关读入程序*****************/
  {
    S1 = P1IN;          //P1.0口选择
    S1_value = S1|0xFE;
    if(S1_value == 0xFE)         //P1.X输入为低电平有效   参数:死区调整
    {
      key_S1_time++;
      key_S1_time = key_S1_time>30000?30000:key_S1_time;
      if(key_S1_time>=2)
      {
        flag = 0x7;               //状态6
      }
    }
    else
    {
      key_S1_time=0;
      S1_value = ~S1;                //低电平有效时取反操作 
      S1_value = (S1_value>>1)&0x07;             //只处理P1.1、P1.2、P1.3   
      switch(S1_value)
      {
      case 0:              //远程控制状态
        {
          flag = 0x1;               //状态1
        }
        break;
      case 1:              //就地手操控制状态
        {
          flag = 0x2;               //状态2
        }
        break;
      case 2:              //恢复出厂默认值
        {
          flag = 0x8;               //状态3
        }
        break;
      case 3:              //输入通道校准
        {
          flag = 0x3;               //状态3
        }
        break;
      case 5:              //输出通道零校准
        {
          flag = 0x4;               //状态4
        }
        break;
      case 6:              //输出通道满校准
        {
          flag = 0x5;               //状态5
        }
        break;
      case 7:              //校零、校满
        {
          flag = 0x6;               //状态6
        }
        break;
      default:             //其它状态值时为远程控制
        {
          flag = 0x1;               //状态1
        }
      }
    }
    
/**************按键控制程序****************/
    K1 = P1IN;
    S1_value = K1 | 0xDF;
    if(S1_value == 0xDF)             //开键状态读取  按键低电平有效  K1  P1.5
    {
      key_opentime++;
      key_opentime = key_opentime>250?250:key_opentime;
      if(key_opentime==2)              //时间累加,防抖动
      {
        key_open1 = 0xFF;               //确认键值有效
      }
      else
      {
        key_open1 = 0x00;               //清确认键值
      }
      if(key_opentime>10)
      {
        key_open = 0xFF;               //开阀有效
      }
      else
      {
        key_open = 0x00;
      }
    }
    else
    {
      key_opentime = 0;             //清按键时间
      key_open1 = 0x00;               //清确认键值
      key_open = 0x00;
    }
    
    S1_value = K1 | 0xBF;
    if(S1_value == 0xBF)             //关键状态读取    按键低电平有效  K2  P1.6
    {
      key_closetime++;
      key_closetime = key_closetime>250?250:key_closetime;
      if(key_closetime==2)              //时间累加,防抖动
      {
        key_close1 = 0xFF;               //确认键值有效
      }
      else
      {
        key_close1 = 0x00;               //清确认键值
      }
      if(key_closetime>10)
      {
        key_close = 0xFF;               //关阀有效
      }
      else
      {
        key_close = 0x00;
      }
    }
    else
    {
      key_closetime = 0;             //清按键时间
      key_close1 = 0x00;               //清确认键值
      key_close = 0x00;
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -