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

📄 show.c

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 C
字号:
#include "Show.h"

//内部函数声明
void NumFormatChange(INT8U * ReP,INT8U * Data);
void Show1Data(INT16U showdata,INT8U showline,INT8U fbflag,INT8U *Buff);

//InBuff:LCD显示数据合并子函数---------------------------------------------*
//功  能:将需要显示的4行数据按LCD显示位置放入一个64字节的缓冲区           *
//参  数:                                                                 *
//       tmp1:第2行左对齐显示的数据                                        *
//       tmp2:第2行右对齐显示的数据                                        *
//       time1:第3行左对齐显示的数据                                       *
//       time2:第3行右对齐显示的数据                                       *
//       Buff:存放显示64字节数据的缓冲区                                   *
//返  回:内存Buff开始连续的64个地址内即为转换后要显示的数据               *
//调  用:Show1Data                                                        *
//说  明:第4行显示“青星科技有限公司”                                    *
//-------------------------------------------------------------------------*
void InBuff(INT16U tmp1,INT16U tmp2,INT16U time1,INT16U time2,INT8U *Buff)
{
    INT8U *p;
    INT8U i;
    
    //1 显示当前温度和设定温度
    //1.1空1格,因为汉字要从奇数位开始显示,否则为乱码
//    Buff[16]=' ';
    //1.2在第2行左对齐显示当前温度及其单位,共占用7字节
//    Show1Data(tmp1,2,0,Buff+1);
    p="℃";      //当1个汉字(2字节)显示
    Buff[22]=*p;
    Buff[23]=*(p+1);
    //1.3中间用1个空格分开左右的显示
    Buff[24]=' ';
    //1.4在第2行右对齐显示设定温度及其单位,也占用7字节
    Show1Data(tmp2,2,1,Buff);
    Buff[30]=*p;
    Buff[31]=*(p+1);
    
    //2 同样显示当前温度和设定温度
    Buff[32]=' ';
    Show1Data(time1,3,0,Buff+1);
    p="分";
    Buff[38]=*p;
    Buff[39]=*(p+1);
    Buff[40]=' ';
    Show1Data(time2,3,1,Buff);
    Buff[46]=*p;
    Buff[47]=*(p+1);
/*    
    //3 在第4行显示“青星科技有限公司”
    p="青星科技有限公司";
    for(i=48;i<65;i++)
    {
       Buff[i]=*p;
       p++;
    }*/
}



//Show1Data:LCD单个数据显示子函数------------------------------------------*
//功  能:将需要显示的showdata按LCD显示位置放入一个64字节的缓冲区          *
//        在LCD第showline行左对齐或右对齐显示1个整型数据showdata           *
//参  数:                                                                 *
//       showdata:需要显示的1个整型数据                                    *
//       showline:数据显示在LCD上的行数                                    *
//       lrflag:左对齐或右对齐的标志                                       *
//       Buff:存放显示64字节数据的缓冲区                                   *
//返  回:将数据放入内存Buff[(showline-1)*16]开始连续的5个地址内           *
//       或将数据放入内存Buff[(showline-1)*16+9]开始连续的5个地址内        *
//调  用:NumFormatChange                                                  *
//-------------------------------------------------------------------------*
void Show1Data(INT16U showdata,INT8U showline,INT8U lrflag,INT8U *Buff)
{
   INT8U *p;
   INT8U data[3];
   INT8U redata[5];
   INT8U line;
   INT8U i,j;
   
   //数据的格式转换
   p=(INT8U *)&showdata;
   data[0]=*p;
   data[1]=*(p+1);
   data[2]=0;
   NumFormatChange(redata,data);
   //根据showline和lrflag把转换后的数据放入缓冲区的相应位置
   if(lrflag==0)
     line=(showline-1)*16;
   else
     line=(showline-1)*16+9;
   for(i=0;i<5;i++)
      Buff[i+line]=redata[i];
}
//NumFormatChange:数据格式转换子程序---------------------------------------*
//功能:将3个字节的压缩BCD码数据转换为5个字节可显示的ASCII码数据            *
//参数:Data[0--2]三个字节的数据:前两个字节压缩BCD码(00 00 - 99 99)        *
//                               第三字节为小数点位数(0-2)                 *
//     ReP[0--4]存放5个字节的转换结果(注意:实际是ASCII码)                  *
//举例:Data[0--2]:99 88 1  ->ReP[0--4]:9 9 8 . 8                         *
//     Data[0--2]:00 87 0  ->ReP[0--4]:      8 7                         *
//     Data[0--2]:02 36 2  ->ReP[0--4]:  2 . 3 6                         *
//返回:无                                                                  *
//说明:步骤4表示若有2个及以上空格就将数据居中存放 (ZY 07.04.27)            *
//-------------------------------------------------------------------------*
void NumFormatChange(INT8U *ReP,INT8U *Data)
{ 
     INT8U i,j,k;           //循环控制变量
     INT16U * IntDataP;
/*     
     //0.处理汉字显示
     if(Data[2]>=200)
       {ReP[0]=' ';ReP[1]=Data[1];ReP[2]=' ';
        ReP[3]=' ';ReP[4]=' ';goto NumFormatChange_End;}
*/     
     //1:得到可以显示的数据
     IntDataP=(INT16U *)Data;
     ReP[3]=(*IntDataP)%10+'0';
     ReP[2]=((*IntDataP)/10)%10+'0';
     ReP[1]=((*IntDataP)/100)%10+'0';
     ReP[0]=(*IntDataP)/1000+'0';
     
     //2:插入小数点
     if(Data[2]==1)         //有一位小数
     {ReP[4]=ReP[3];ReP[3]='.';}
     else if(Data[2]==2)    //有两位小数
     {ReP[4]=ReP[3];ReP[3]=ReP[2];ReP[2]='.';}
     else if(Data[2]==0)    //没有小数
     {
      for(i=4;i>0;i--)      //调整整数显示位置
        ReP[i]=ReP[i-1];    //在最前面补零
      ReP[0]='0';
     }
     
     //3:调整前导的0为空格
     if(ReP[0]=='0')       
          ReP[0]=0x20;        
     for(i=1;i<4;i++)
     {if((ReP[i-1]==0x20)&&(ReP[i]=='0')&&(ReP[i+1]!='.'))
           ReP[i]=0x20;}
     
     //4:调整显示的位置,把空格一起移到最后
     for(i=1;i<4;i++)
      if(ReP[i]!=0x20) break;
     for(k=1,j=i;j<=4;j++,k++)
     { 
      ReP[k]=ReP[j];
      if(k!=j) ReP[j]=0x20;
     }
     
     NumFormatChange_End:;  
}  

⌨️ 快捷键说明

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