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

📄 memu.c

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 C
字号:

#include "Includes.h"
/*Print:把需要显示的字符串传送给显示缓冲区---------------------------------*
*功能:把需要显示的字符串传送给显示缓冲区从(行号LineNo,列号RowNO)开始的区域 *
*参数:全局变量LcdShowBuff:64字节显示缓冲区(4行*16列)                       *
*     LineNo:在Lcd上显示的起始行号(1--4)                                   *
*     RowNO:在Lcd上显示的起始列号(1--16)                                   *
*     SringP:指向需在Lcd上显示的字符串的指针                               *
*     Num:字符串长度                                                       *
*调用实例:Print(2,3,"苏州大学",8)                                          *
*         在第2行第3列开始显示"苏州大学"4个汉字(共8个字符)                 *
*返回:无                                                                   *
*-------------------------------------------------------------------------*/
void Print(INT8U LineNo,INT8U RowNO,INT8U * SringP,INT8U Num)
{
     INT8U i;          //循环控制变量
     INT8U StartPos;   //在显示缓冲区(0--63)中的起始位置
     StartPos = (LineNo-1)*16+(RowNO-1);
     for(i=0;i<Num;i++)
     {
        //已超出Lcd显示缓冲区的边界,退出
        if((StartPos+i)>63)  break;
        LcdShowBuff[StartPos+i]=SringP[i];
     }
}  
/*Clear:清空显示缓冲区-----------------------------------------------------*
*功能:清空显示缓冲区,把显示缓冲区的内容全部赋为空格                       *
*参数:全局变量LcdShowBuff:64字节显示缓冲区(4行*16列)                       *
*返回:无                                                                   *
*-------------------------------------------------------------------------*/
void Clear(void)
{
     INT8U i;          //循环控制变量
     for(i=0;i<64;i++)
        LcdShowBuff[i]=' ';
} 
/*NumFormatChange:数据格式转换子程序---------------------------------------*
*功能:将3个字节的压缩BCD码数据转换为5个字节可显示的ASCII码数据             *
*参数:Data[0--2]三个字节的数据:前两个字节压缩BCD码(00 00 - 99 99)         *
*                               第三字节为符号位(-、+)                     *
*     ReP[0--4]存放5个字节的转换结果(注意:实际是ASCII码)                   *
*     flag:0-设定值调整,无小数位;1-显示值调整,有一位小数位                 *
*举例:Data[0--2]:12 35 +  ->ReP[0--5]:+ 1 2 3 . 5                        *
*     Data[0--2]:01 92 -  ->ReP[0--5]:-   1 9 . 2                        *
*返回:无                                                                   *
*-------------------------------------------------------------------------*/
void NumFormatChange(INT8U * ReP,INT8U * Data,INT8U flag)
{ 
     INT8U i,j,k;           //循环控制变量
     INT16U * IntDataP;  //数据
     INT8U sign;         //符号
     //1:得到可以显示的数据
     IntDataP=(INT16U *)Data;     
     sign=Data[2];
     
     ReP[4]=(*IntDataP)%10+'0';
     ReP[3]=((*IntDataP)/10)%10+'0';
     ReP[2]=((*IntDataP)/100)%10+'0';
     ReP[1]=(*IntDataP)/1000+'0';       
     
     //2:显示数据调整,有一位小数  
     ReP[5]=ReP[4];ReP[4]='.';   
     //3:调整前导的0为空格
     if(ReP[1]=='0')       
          ReP[1]=0x20;        
     for(i=2;i<5;i++)
     {if((ReP[i-1]==0x20)&&(ReP[i]=='0')&&(ReP[i+1]!='.'))
           ReP[i]=0x20;} 
     //4: 若为负数,添加负号     
     if(sign=='-') 
     {for(i=1;i<3;i++) 
         if(ReP[i+1]!=0x20) break;
      ReP[i]=sign;} 
      //SCISend1('A');
      //for(i=1;i<=5;i++) SCISend1(ReP[i]);
      //SCISend1('B');
NumFormatChange_End:; 
}  
/*PackShowBuf:封装LCD的显示缓冲区------------------------------------------*
*功能:将在LCD上显示的当前温度CurrentT、设定温度BasicT                      *
                     当前湿度CurrentH、设定湿度BasicH风机情况和时间进行封包*
*参数:当前温度CurrentT、设定温度BasicT、当前温度符号SignCT                 *
      设定温度符号SignBT、当前湿度CurrentH、设定湿度BasicH                 *
*返回:LCD的显示缓冲区LcdShowBuff                                           *
*-------------------------------------------------------------------------*/
void PackShowBuf(INT8U * LcdShowBuff)
{
  INT8U i;
  INT8U data[3],buf[6];  
  //1:当前温度
  data[0]=CurrentT>>8;data[1]=CurrentT; data[2]=SignCT; 
  NumFormatChange(buf,data,1);
  for(i=1;i<=5;i++) LcdShowBuff[i]=buf[i];
  //2:温度设定值
  data[0]=BasicT>>8;data[1]=BasicT; data[2]=SignBT; 
  NumFormatChange(buf,data,0);
  for(i=1;i<=3;i++) LcdShowBuff[i+8]=buf[i];
  data[2]='+';
  //3:当前湿度
  data[0]=CurrentH>>8;data[1]=CurrentH;
  NumFormatChange(buf,data,1);
  for(i=1;i<=5;i++) LcdShowBuff[i+16]=buf[i];
  //4:湿度设定值
  data[0]=BasicH>>8;data[1]=BasicH;
  NumFormatChange(buf,data,0);
  for(i=1;i<=3;i++) LcdShowBuff[i+8+16]=buf[i];
  //5:风机状态显示
  for(i=0;i<=3;i++) LcdShowBuff[i+2+32]=ColdHot[i+ColdHotFlag*4];  
}
/*CheckReFrame:验证接收到的帧----------------------------------------------*
*功能描述:验证接收到的帧                                                   *
*参数:ReFrameBuP指向接收帧缓冲区的指针                                     *
*     ReFrameLength当前接收到的帧的长度                                    *
*返回:0表示校验正确,1表示收到数据帧格式不正确,2表示异或校验和出错          *
*内部调用:GetCheckChar求数据流的异或校验码子程序                           *
*-------------------------------------------------------------------------*/
INT8U CheckReFrame(INT8U * ReFrameBuP,INT8U ReFrameLength)
{
    //定义出错标志字节,无错为0
    INT8U ErrCode=0;  
    //收到的数据帧格式不正确,出错标志1
    if((ReFrameBuP[0]!='S')||(ReFrameBuP[ReFrameLength-1]!='E'))
  	  {ErrCode=1;  goto CheckReFrame_End;}
    //收到的数据帧校验和出错,出错标志2
    if(GetCheckChar(ReFrameLength-1,ReFrameBuP))   
      {ErrCode=2;  goto CheckReFrame_End;}
    CheckReFrame_End:  //返回
    return ErrCode;  
}

/*GetCheckChar:求数据流的异或校验码子程序----------------------------------*
*功能描述:得到数据流的一个字节异或校验码                                *
*参数:DataP指向数据流的指针                                                *
*     DataNum为数据流的字节长度                                            *
*返回:CheckChar:一个字节的异或校验码                                *
*内部调用:无                                                               *
*-------------------------------------------------------------------------*/
INT8U GetCheckChar(INT8U DataNum,INT8U * DataP)
{
   INT8U i;                    //用于循环的计数位
   INT8U CheckChar=0;          //存放一个字节的异或校验码
   /*循环求异或校验码*/  
   for(i=0;i<DataNum;i++)  
      CheckChar^=DataP[i];
   return(CheckChar); 
}

/*DePackReBuf:解包接受到的接受缓冲区的内容---------------------------------*
*功能:将接受缓冲区ReBuf的内容解包                                          *
*参数:接受缓冲区ReBuf                                                      *
*返回:当前温度CurrentT、设定温度BasicT、当前温度符号SignCT                 *
      设定温度符号SignBT、当前湿度CurrentH、设定湿度BasicH,系统时间Hour    *
      错误编号ErrorNo
*-------------------------------------------------------------------------*/
INT8U DePackReBuf(INT8U *buf)
{
  INT8U ErrorNo=0;
  INT8U tmp[2],i;
  //1:验证接收到的帧
  ErrorNo=CheckReFrame(buf,15);
  if(ErrorNo!=0) goto Exit; //接收到的帧错误,退出操作
  if(buf[1]!=MACHINE_NO) return 3;
  tmp[0]=buf[2];tmp[1]=buf[3];
  BasicT=*(INT16U *)tmp;SignBT=buf[4];//温度设定值
  tmp[0]=buf[5];tmp[1]=buf[6];
  BasicH=*(INT16U *)tmp;              //湿度设定值
  for(i=0;i<6;i++) Hour[i]=buf[i+7];  //系统时间
Exit:  
  return ErrorNo;
}

⌨️ 快捷键说明

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