论坛元老
- 积分
- 3308
- 金钱
- 3308
- 注册时间
- 2013-4-10
- 在线时间
- 328 小时
|
发表于 2016-3-27 23:37:18
|
显示全部楼层
本帖最后由 likunxue 于 2016-3-28 02:01 编辑
方法见下面的两个函数, 我就不多说了, 相信你能看懂的
/********************************************************************************************
函 数 名: 有符号整数转换为字符串函数,高位为0,则不显示
调 用: CX_printh(u8 *str, s32 Dat,u8 len)
参 数: *str 字符串转换后保存的首地址
Dat:数值(+-0~4294967295);
len:长度(即要显示的位数,最大只转换8位有效值)
返 回 值: 转换结果保存 字符串指针所指向的地址中
********************************************************************************************/
void CX_printh(u8 *str, s32 Dat,u8 len)
{
u8 i,tem,at,af;
at = 0; //清标志位
af = 0; //清标志位
if(len>10)len=10;
if(Dat < 0){Dat =-Dat; *str = '-'; str++; af = 0xff;}//如果是负数,先转为正数,并装入符号位
for(i=0;i<len;i++)
{
tem=(Dat/CX_pow(10,len-i-1))%10;//取得当前位数字
if(tem == 0){if(at != 0){*str = 0x30; str ++;}}
else{
at = 0xff; //置标位位
*str = tem + 0x30;
str ++;
}
}
if(at == 0 && af == 0xff)
{
str --;
*str = '0';
str ++;
}
else{
if(at == 0 && af ==0){*str = '0'; str ++;}
}
*str = '\0'; //写入结束符号
}
/********************************************************************************************
函数名:浮点数转化为字符串函数
调 用:CX_printf(*str, float Fdat,u8 Hc,u8 Fl);
参 数:*str 字符串转换后保存的首地址
Fdat:数值(+-0.0005~999999.9999);
Hc:整数长度(即要显示的位数)
Fl:小数长度(即要显示的位数)
返回值:转换结果保存 字符串指针所指向的地址中
********************************************************************************************/
void CX_printf(u8 *str, float Fdat,u8 Hc,u8 Fl)
{
u32 const Pow[]={1,10,100,1000,10000,100000,10000000,100000000,1000000000};
u32 Dat1, Dat2;
u8 i,tem,at;
if(Fdat < 0){Fdat = -Fdat; *str ='-'; str ++; }
if(Hc>8)Hc=8; //限制整数部份最多8个位
if(Fl>4)Fl=4; //限制小数部份最多4个位的精度
Dat1 = Fdat; //取整数部份
Dat2 = (Fdat-Dat1) * Pow[Fl];//取小数部份并将其转换为整数
i = ((Fdat-Dat1)*Pow[Fl+1])- Dat2 *10; //四舍五入处理
if(i>=5)
{
Dat2 += 1;
if(Dat2 ==Pow[Fl]){Dat2 =0;Dat1 += 1;}
}
at = 0; //清标志位
for(i=0;i<Hc;i++) //处理整数部份
{
tem = (Dat1/Pow[Hc-i-1])%10; //取得当前位数字
if(tem == 0){if(at != 0){*str = 0x30; str ++;}}
else{
at = 0xff; //置标位位
*str = tem + 0x30;
str ++;
}
}
if(at == 0){*str = 0x30; str ++;} //如果整数部份为零则补零
*str = '.'; //写入小数点
str ++;
for(i=0;i<Fl;i++) //处理小数部份
{
tem = (Dat2/Pow[Fl-i-1])%10; //取得当前位数字
*str = tem + 0x30;
str ++;
}
*str = '\0' ; //装入结束符号
}
调用, 方法 定义一个数组,用内存管理申请的指针也行
u8 Br[20];
u16 Dat = 12345; 这是要显示的数据(整数)
float F = 123.123;
CX_printh(Br,Dat,5); //先把数据转为指定的显示格式
LCD_word(10,24,(const char *)Br);//显示参数
CX_printf(Br,F,3,3); //将浮点数转为字符串
LCD_word(10,24,(const char *)Br);//显示参数
这是在 19264 液晶屏中的显示调用, 你可以参考一下
|
|