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

📄 flowunit.c

📁 采用STC89C54RD实现的一个完整的流量计控制系统源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
** 修 改 人:
** 日  期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void FuncKeyDone(void)
{
  if (gbStarted || gbLogo)                       // 在启动键按下后或在显示LOGO标志时不能执行功能键处理程序
    return;
  gnParamID  = pnFillTime;                       // 设置第一个参数的序号
  gbParamSel = !gbParamSel;                      // 进入或退出参数选择状态
  gbParamSet = FALSE;                            // 清除参数修改标志(尚未进入参数修改状态)
  if (gbParamSel)                                // 已进入参数选择状态,载入第一个参数的符号名称及参数值
    LoadParam();
}

// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: SetKeyDone
** 功能描述: 处理设置键。当在许可范围内按下设置键后,即可对当前参数进行修改(上下键)或移位(左右键)。
** 输  入: 无
** 输  出: 无
** 全局变量: gbParamSel>>>>>>>>>指示当前是否工作在参数选择状态,0~不是,1~是;
**			 gbParamSet>>>>>>>>>指示当前是否工作在参数修改状态,0~不是,1~是;
**           gnParamID>>>>>>>>>>代表当前用户选择的参数在参数组中的序号,取值0~PARAMS_NUMS-1;
**           gnCursorID>>>>>>>>>代表当前选择的修改位(闪烁位)的序号,取值0~4;
**           gnSegBuf[1][]>>>>>>代表两组段选缓冲区在SEG_CODE段选码数组中的数字索引。
** 全局常量:无
** 调用模块: ReadBytes()>>>>>>>>从STC89C54RD+单片机EEPROM读取连续K个字节数据到指定缓冲区中;
**           WriteBytes()>>>>>>>将缓冲区中的连续K个字节数据写入STC89C54RD+单片机EEPROM中。
** 其它说明:
**
** 作  者: 罗建
** 日  期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人: 罗建
** 日  期: 2007年03月23日
**-------------------------------------------------------------------------------------------------------
** 修 改 人: 罗建
** 日  期: 2008年06月20日,增加了流量分段系数设置功能。
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SetKeyDone(void)
{
  INT8U   nBuf[5];
  INT32U  nAddr;
  INT32U* nData;

  if (gbParamSel)                                // 检查是否已经处于参数选择状态,若不是则退出
  {
    if (gbParamSet)                              // 检查是否已经处于参数修改状态,若是则保存数据并退出参
	{                                            // 数修改状态
	  switch (gnParamID)
	  {
	    case pnFillTime:                         // 保存填充时间
		  nAddr = ADDR_FILL_TIME;
		  nData = &gnFillTime;		  
		  break;
		case pnTestTime:                         // 先向EEPROM中写测试时间,如果写成功再读出来
		  nAddr = ADDR_TEST_TIME;
		  nData = &gnTestTime;
		  break;
		case pnMaxPress:                         // 保存压力上限值
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的压力上限小于压力下限,则不允许修改
		  if (nAddr < gnMinPress)
		    return;
		  nAddr = ADDR_MAX_PRESS;
		  nData = &gnMaxPress;
		  break;
		case pnMinPress:                         // 保存压力下限值
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的压力下限大于压力上限,则不允许修改
		  if (nAddr > gnMaxPress)
		    return;
		  nAddr = ADDR_MIN_PRESS;
		  nData = &gnMinPress;
		  break;
		case pnMaxLeak:                          // 保存流量上限值
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的流量上限小于流量下限,则不允许修改
		  if (nAddr < gnMinLeak)                 // (2007.03.23)
		    return;
		  nAddr = ADDR_MAX_LEAK;
		  nData = &gnMaxLeak;
		  break;
		case pnMinLeak:                          // 保存流量下限值
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的流量下限大于流量上限,则不允许修改
		  if (nAddr > gnMaxLeak)
		    return;
		  nAddr = ADDR_MIN_LEAK;
		  nData = &gnMinLeak;
		  break;
        case pnLeakArea1:                        // 保存第1段分段流量最大值(2008.06.20)
          Encode(&nAddr, gnSegBuf[1]);           // 如果设定的第1段流量分段最大流量大于第2段分段最大流量,则不允许修改
		  if (nAddr > gnLeakArea[1])
		    return;
		  nAddr = ADDR_LEAK_AREA1;
		  nData = &gnLeakArea[0];
          break;
		case pnLeakCoef1:                        // 保存第1段流量比例系数(2008.06.20)
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的流量比例系数大于100.00,则不允许修改
		  if (nAddr > 10000)
            return;
          nAddr = ADDR_LEAK_COEF1;
          nData = &gnLeakCoef[0];
          break;
        case pnLeakArea2:                        // 保存第2段分段流量最大值(2008.06.20)
          Encode(&nAddr, gnSegBuf[1]);           // 如果设定的第2段流量分段最大流量大于第3段分段最大流量,则不允许修改
		  if (nAddr > gnLeakArea[2])
		    return;
		  nAddr = ADDR_LEAK_AREA2;
		  nData = &gnLeakArea[1];
          break;
		case pnLeakCoef2:                        // 保存第2段流量比例系数(2008.06.20)
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的流量比例系数大于100.00,则不允许修改
		  if (nAddr > 10000)
            return;
          nAddr = ADDR_LEAK_COEF2;
          nData = &gnLeakCoef[1];
          break;
        case pnLeakArea3:                        // 保存第3段分段流量最大值(2008.06.20)
          Encode(&nAddr, gnSegBuf[1]);           // 如果设定的第3段流量分段最大流量大于第4段分段最大流量,则不允许修改
		  if (nAddr > gnLeakArea[3])
		    return;
		  nAddr = ADDR_LEAK_AREA3;
		  nData = &gnLeakArea[2];
          break;
		case pnLeakCoef3:                        // 保存第3段流量比例系数(2008.06.20)
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的流量比例系数大于100.00,则不允许修改
		  if (nAddr > 10000)
            return;
          nAddr = ADDR_LEAK_COEF3;
          nData = &gnLeakCoef[2];
          break;
        case pnLeakArea4:                        // 保存第4段分段流量最大值(2008.06.20)
          Encode(&nAddr, gnSegBuf[1]);           // 如果设定的第4段流量分段最大流量大于50.00Ln/min,则不允许修改
		  if (nAddr > 5000)
		    return;
		  nAddr = ADDR_LEAK_AREA4;
		  nData = &gnLeakArea[3];
          break;
		case pnLeakCoef4:                        // 保存第4段流量比例系数(2008.06.20)
		  Encode(&nAddr, gnSegBuf[1]);           // 如果设定的流量比例系数大于100.00,则不允许修改
		  if (nAddr > 10000)
            return;
          nAddr = ADDR_LEAK_COEF4;
          nData = &gnLeakCoef[3];
          break;
      }
      if (WriteBytes(nAddr, 5, gnSegBuf[1]))     // 先向EEPROM中写入要保存的数值,如果写成功再读出来
      {
        ReadBytes(nAddr, 5, nBuf);
        Encode(nData, nBuf);
      }
      gbParamSet = FALSE;
    }
    else                                         // 尚未进入参数修改状态,设置gbParamSet标志为TRUE
    {
      gnCursorID = 0;
      gbParamSet = TRUE;
    }
  }  
}

// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: LeftKeyDone
** 功能描述: 处理左移键,将光标向左移动一位。
** 输  入: 无
** 输  出: 无
** 全局变量: gbParamSet>>>>>>>>>指示当前是否工作在参数修改状态,0~不是,1~是;
**           gnCursorID>>>>>>>>>代表当前选择的修改位(闪烁位)的序号,取值0~4。
** 全局常量:无
** 调用模块: 无
** 其它说明:左移键仅在参数修改状态下有效。
**
** 作  者: 罗建
** 日  期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日  期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LeftKeyDone(void)
{
  if (gbParamSet)                                // 检查是否已经处于参数修改状态,若是则向左移动光标位置
  {
    if (++gnCursorID > 4)
      gnCursorID = 0;
  }
}

// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: RightKeyDone
** 功能描述: 处理右移键,将光标向右移动一位。
** 输  入: 无
** 输  出: 无
** 全局变量: gbParamSet>>>>>>>>>指示当前是否工作在参数修改状态,0~不是,1~是;
**           gnCursorID>>>>>>>>>代表当前选择的修改位(闪烁位)的序号,取值0~4。
** 全局常量:无
** 调用模块: 无
** 其它说明:右移键仅在参数修改状态下有效。
**
** 作  者: 罗建
** 日  期: 2007年02月09日
**-------------------------------------------------------------------------------------------------------
** 修 改 人:
** 日  期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void RightKeyDone(void)
{
  if (gbParamSet)                                // 检查是否已经处于参数修改状态,若是则向右移动光标位置
  {
    if (--gnCursorID > 4)
      gnCursorID = 4;
  }
}

// ------------------------------------------------------------------------------------------------------
/********************************************************************************************************
** 函数名称: UpKeyDone
** 功能描述: 处理上翻键。
** 输  入: 无
** 输  出: 无
** 全局变量: gbParamSel>>>>>>>>>指示当前是否工作在参数选择状态,0~不是,1~是;
**           gbParamSet>>>>>>>>>指示当前是否工作在参数修改状态,0~不是,1~是;
**           gnParamID>>>>>>>>>>代表当前用户选择的参数在

⌨️ 快捷键说明

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