📄 show.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 + -