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

📄 show_module(eric).c.bak

📁 一个电表的程序
💻 BAK
📖 第 1 页 / 共 2 页
字号:

//输入参数:  1、 "DispDataBuff"(显示数据结构体)的数据,见结构体;2、输入数据属性。

//输出参数:  无

//********************************************************************************



  //       显示- 小数点处理

  /*
   void LcdDispPontApi(unsigned char Pont_Val)
   {
     if (Pont_Val & P1_Code)
       Set_Lcd_P1();
//     else
//       Close_Lcd_P1();
     if (Pont_Val & P2_Code)
       Set_Lcd_P2();
//     else
//       Close_Lcd_P2();
     if (Pont_Val & P3_Code)
       Set_Lcd_P3();
//     else
//       Close_Lcd_P3();
     if (Pont_Val & P4_Code)
       Set_Lcd_P4();
//     else
//       Close_Lcd_P4();
     if (Pont_Val & P5_Code)
       Set_Lcd_P5();
//     else
//       Close_Lcd_P5();
     if (Pont_Val & P6_Code)
       Set_Lcd_P6();
//      else
//       Close_Lcd_P6();

   }

 */
 //----------------------------------------------------------------

 //       显示- 状态处理

// void LcdDispStatApi(unsigned char Stat_Val)
//   {
//     if (Stat_Val & S1_Code)                    //D4位
//       Set_Lcd_S1();
//     if (Stat_Val & S6_Code)                    //D5位
//       Set_Lcd_S6();
//     LcdBuffer[11] =  Stat_Val & 0x0F;          //D0~D3位
//   }



// -------------------------------------------------------------------------

//          处理显示的数据                          need modify


void LcdDispDataApi(unsigned char __idata Data[],unsigned char Len,unsigned char Data_Attr)
{
  unsigned char i;

  if (Len>4)
    return;
  for (i=0;i<7;i++)                        //清数码显示缓冲区
    LcdBuffer[i+3]=0;                                                       // modified by Eric 
  if (Data_Attr== Source_Code)              //数据为显示码
   {
    for(i=0;i<Len;i++)
      LcdBuffer[i+2]= GetDispCode(Data[i]);
    return;
   }
  if (Data_Attr == BCD_Code)                   //数据为BCD码
   {
    for(i=0;i<Len;i++)
        {
         LcdBuffer[2*i+2] =GetDispCode((Data[i]) & 0x0F);                //取低位BCD码
         LcdBuffer[2*i+3] =GetDispCode(((Data[i])>>4)&0x0F);             //取高位BCD码
        }
    return;
   }
  if (Data_Attr == Hex_Code)                        //数据为十六进制码
    {
      Temp32 = 0;

      for (i=0;i<Len;i++)
        {
         TempChar[i] = Data[i];
        }

      Temp32 = Hex32BCD(Temp32);            //数进制转换      number
      for(i=0;i<4;i++)
        {
         LcdBuffer[2*i+2] =GetDispCode((TempChar[i]) & 0x0F);                //取低位BCD码
         LcdBuffer[2*i+3] =GetDispCode(((TempChar[i])>>4)&0x0F);             //取高位BCD码
        }
     }
}


//====================================================================================
//          显示error的内容

void ShowError(unsigned char err)
{
  unsigned char i;

  TempChar[0]= E_Code;
  for (i=0;i<11;i++)                        //清数码显示缓冲区           modified by Eric
    LcdBuffer[i]=0;
  LcdBuffer[3] = E_Code;
  LcdBuffer[4] = R_Code;
  LcdBuffer[5] = R_Code;
  LcdBuffer[6] = _Code;
  LcdBuffer[7] = GetDispCode((err>>4)&0x0F);
  LcdBuffer[8] = GetDispCode( err & 0x0F);
//  LcdDispStatApi(StatFlg);                             //          S---状态显示

  //         上传显示数据

  LcdUpData();                //刷新显示缓冲区的数据


}

//====================================================================================
//          显示ID的内容

void ShowXH(unsigned int id)
{
  unsigned char i;

  for (i=0;i<(sizeof Disp_Table);i++)
  {
    if  (id == (Disp_Table[i].ID))       //查找显示ID
        break;
  }
  if   (i==(sizeof Disp_Table))         //有可显示ID
      ShowError(0x02);                  //显示序号库没有这序号"error-02"
  else
  {
// -------------------------------------------------------------------------
      //          处理显示序号

    LcdBuffer[0] = GetDispCode(Disp_Count & 0x0F);      // 处理显示序号

// -------------------------------------------------------------------------
     //          处理显示的数据

    LcdDispDataApi(Disp_Table[i].Adr,Disp_Table[i].Len,BCD_Code);       //          处理显示的数据

// -------------------------------------------------------------------------
            //       显示数据汉字提示

    LcdBuffer[10] = Disp_Table[i].Icons2 ;
    i = Disp_Table[i].Icons1  ;

    if ( i & Gu_seg)
    {
      LcdBuffer[1]=0;
      switch (i & 0x17)
       {
        case Gu_seg:
          LcdBuffer[1] = i;
          break;
        case Point_1:
          Set_Lcd_P5();                         //P5   第一位小数点
          break;
        case Point_2:
          Set_Lcd_P4();                         //P5   第二位小数点
          break;
        case Point_3:
          Set_Lcd_P3();                         //P5   第三位小数点
          break;
        case Point_4:
          Set_Lcd_P2();                         //P5   第四位小数点
          break;
       }
      if ((i & U_FH)==U_FH)                        //D4,D3=11,
        {                            // 显示电压值
          for (i=0;i<7;i++)
             LcdBuffer[9-i] = LcdBuffer[8-i];
          LcdBuffer[2]=u_Code;                 //输出电压符号u
        }
      else  if ((i & TEMP_FH)==TEMP_FH)
        {                                   //显示温度符号'C
           LcdBuffer[5] = LcdBuffer[3];
           LcdBuffer[4] = LcdBuffer[2];
           LcdBuffer[3] = 0x02;                 //'
           LcdBuffer[2] = C_Code;                 //C
        }
    }
    else
       LcdBuffer[1] = i ;



// -------------------------------------------------------------------------

//          Pont---小数点处理

      if (LcdBuffer[1] &  DianLiang_seg)       //置电量小数点
         Set_Lcd_P4();                         //P4


      if (LcdBuffer[10] & (RiQi_seg ))
         {                                     //显示20xx年xx月xx日
     //     Set_Lcd_P4();
          LcdBuffer[9]= GetDispCode(2);
          LcdBuffer[8]= GetDispCode(0);
          Set_Lcd_P6();
         }
      if ((LcdBuffer[10] & Shi_Time) && ( LcdBuffer[10] & Jian_Time))
         {                                                               //显示时间 :xx 时xx 分xx 秒
          Set_Lcd_P6();
          Set_Lcd_P2();
          Set_Lcd_P4();
         }

     if ((LcdBuffer[10] & Shi_Time) && ( LcdBuffer[10] & Duan_seg))
         {                                                           //显示时段 :xx 时xx 分-X
          Set_Lcd_P4();
          Set_Lcd_P2();
          LcdBuffer[3] = GetDispCode(0x17);        //显示代码序号17为 "-"
         }


// -------------------------------------------------------------------------

//          S---状态显示处理

     LcdDispStatApi(StatFlg);


 // -------------------------------------------------------------------------

 //         上传显示数据

     LcdUpData();                //刷新显示缓冲区的数据
   }
 }

 // ---------------------------------------------------------------------------------------------

//          固定循环显示 ,显示序号在:Disp_Count 中
//



   void LcdDispApi(void)
   {

     unsigned char  i;

     if (Disp_Flg)                               //显示标志
     {
        if (Disp_Time)
        {
          if (Disp_XH_Buffer[Disp_Count])
             ShowXH(Disp_XH_Buffer[Disp_Count]);    //刷新显示缓冲区的数据
          else
             ShowError(0x01) ;
        }
        else
        {
         Disp_Flg = 0;                         // 置停显标志
         Disp_Time =1;
         LcdSetDisplay(0);                     // 清显示屏  (也可以置lcd不使能)
        // Stop_DispTime = 1;                    // 置停显时间  (也可由e2prom中的数据修改)
       }
     }
     else
      {
       if (!Disp_Time)
         {
           Disp_Time = 5;                       //显示时间(也可由e2prom中的数据修改)
           Disp_Flg = 1;                         // 置显示标志

           for (i=0;i<Disp_idLen;i++)
           {
             Disp_Count++;                             // 显示序号+1
             if (Disp_Count >= Disp_idLen)
                Disp_Count=0;
             if (Disp_XH_Buffer[Disp_Count])                             //序号值=0,为无显示序号
                break;
           }
           if (i==Disp_idLen)
             ShowError(0x01) ;                                      //显示序号为空"error-01"
           else
             ShowXH(Disp_XH_Buffer[Disp_Count]) ;
         }
      }
   }

 //********************************************************************************

//函数名称:   LcdDisp_Module

//函数描述:   将显示缓冲区"DispDataBuff"(显示数据结构体)的数据送液晶屏显示

//输入参数:  1、 "DispDataBuff"(显示数据结构体)的数据,见结构体;2、输入数据属性。

//输出参数:  无

//********************************************************************************


  unsigned long __idata Vall;

  void DelyMs(unsigned int dely)
  {
    unsigned long  __idata *val;
 //   unsigned char i;
    unsigned int k;
    for (k=0;k<dely;k++)
    {
     val = (unsigned long  __idata *)KWhPwrT ;
    *val = Vall = BCD32Inc(Vall);
    }
  }

 //===========================================================================================
     unsigned long   __idata * __idata cp32;

  void  LcdDisp_Module(void)
  {
     unsigned char i;
     unsigned int temp;

     if (S_Flg)
     {
       LcdDispApi ();
//       LcdInit();                   //LCD初始化
       cp32 =(__idata unsigned long *) KWhPwrT;
       *cp32 = BCD32Inc(*cp32);

        P_LED ^= 1;

       EnergyModule();
       MeasurementModule();


         temp =10;//(unsigned int)(&SysDataTree[0]);// (unsigned int)(&rMtNo_Dtr[0]);
         temp += pROM_Adr;
       i=I2C_Write(I2C_SlvAdr,0x210,temp,4);//        (unsigned int)(&SysDataTree[0])+pROM_Adr

   //    i = MoveData_Api((unsigned int)(&SysDataTree[0])+pROM_Adr,0x210+0x8000, 4);
   //    i |= MoveData_Api((unsigned int)KWhPwrT,     eSY_PPwrTtl_Dtr + 0x8000,   4);
   //    i |= MoveData_Api(eSY_PPwrTtl_Dtr + e2RAM_Adr,  temp + xRAM_Adr, 4);
   //    i |= MoveData_Api(temp + xRAM_Adr, (unsigned int)(&KWhPwrT[0]), 4);

       if (i==ErrorTrue)
           P_LED ^= 1;

 //      i = MoveData_Api((unsigned int)(&KWhPwrT[0]),0x210+0x8000, 4);

       I2C_Read (I2C_SlvAdr,0x210,(unsigned int)(&KWhPwrT[4]),4);

       S_Flg=0;

      S_Flg=0;
     }
  }

//--------------------------------------------------------------------------------

#endif

⌨️ 快捷键说明

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