打印

单片机数值转换问题

[复制链接]
2705|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tjlxq6|  楼主 | 2010-11-17 10:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
char code TargetYieldBuf[7];   //目标(设定)产量

  char code CurrentYieldBuf[7];  //当前产量
char code CompleteRateBuf[6];  //完成率


  Uint16 xdata gTrigCnt=0;
  unsigned int TargetYield=0;
  unsigned int CurrentYield=0;
  float CompleteRate;


     CurrentYield =  gTrigCnt;       //触发次数= 当前产量
     sprintf(CurrentYieldBuf,"%7x", CurrentYield);
     CompleteRate =  CurrentYield/gsSetValue.Int;   //完成率= 当前产量/目标(设定)产量
     sprintf(CompleteRateBuf,"%6x",(unsigned int)CompleteRate);
     sprintf(TargetYieldBuf,"%7x", gsSetValue.Int);    //目标(设定)产量


     问题是1.如何把目标产量的十进制数TargetYield 装换为16进制数后存放到TargetYieldBuf数组中,

              2.如何用程序表示完成率,完成率= 当前产量/目标(设定)产量,是sprintf 强制转换是否能达到目的

相关帖子

沙发
liang7143| | 2010-11-17 12:04 | 只看该作者
sprintf是可以达到LZ目的的,但是sprintf这个函数使用起来有点麻烦,很容易出错!

LZ代码有如下问题:
1、CurrentYieldBuf和CompleteRateBuf,TargetYieldBuf都加有关键字code,进行sprintf操作时,会失败。
2、CompleteRate =  CurrentYield/gsSetValue.Int;   //完成率= 当前产量/目标(设定)产量
    CurrentYield是unsigned int,做除法运算,小数部分会损失

使用特权

评论回复
板凳
tjlxq6|  楼主 | 2010-11-18 11:06 | 只看该作者
不加CODE  KEIL 就会报错, 那应该怎么处理呢, 想使用sprintf 函数时,                               前提是十进制转换 为十六进制的数组, 自己写程序怎么处理呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝