首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]这两种方式,哪种正确?

[求助]这两种方式,哪种正确?

使用QG8的Temperature Sense时,想把采集到的值转换成ASCII码,请问下面两种转换方法那种正确,有什么区别?谢谢了!
方法一:
char * num2asc(byte n) {
n_str[0] = (n>>0x04)+0x30;
if(n_str[0]>0x39)
n_str[0]+=0x07;

n_str[1] = (n&0x0f)+0x30;
if(n_str[1]>0x39)
n_str[1]+=0x07;

n_str[0]=((n_str[0]<<4)&0xF0)|(n_str[1]&0x0F);
n_str[1] = 0x00; // add null
return n_str;
} //end num2asc
/********************************************************/
方法二:
char *t_tt(int m)
{ byte mm=0;
mm=(m%100)/10;
mm=mm+0x30;
if(mm>0x39) // if mm is $a or larger...
mm+=0x07;
t_str[0]=mm;

mm=(m%10);
mm=mm+0x30;
if(mm>0x39) // if mm is $a or larger...
mm+=0x07;
t_str[1]=mm;

t_str[0]=((t_str[0]<<4)&0xF0)|(t_str[1]&0x0F);
t_str[1] = 0x00; // add null

return t_str;
}

我爱单片机。
运行一下不就知道了。
海纳百川  有容乃大
当初这么写的结果想着是一样的,但运行后结果不一样。
我爱单片机。
具体是如何不一样?
海纳百川  有容乃大
温度测量值直接打到串口为2C(44度,大概差不多),经过num2asc()转换,结果是23;经过t_tt()转换,结果是44;
说明:2C、23、44均为串口工具ComMax打出来的数据;
我爱单片机。
这两段程序是你自己编的吗?如果是,能否具体讲一下你的思路?如果按照你的程序运行,当然一个是将2C转换为23,一个是将2C转换为44,又没有错。
海纳百川  有容乃大
这两个程序都不是我写的,因此我不能确定其转换思路的正确性。在线仿真的时候,这两个函数的各个变量、MCU寄存器等的值都正确,说明这种运算是没错的。我想请教您的是:转换成ASCII码时,这两种方法哪个正确?
我爱单片机。
你是要将2C本身转换成ASCII码,然后在电脑屏幕上显示,还是要将它先转换成十进制数,然后将十进制数的两位数值转换成ASCII码,用于在电脑屏幕上显示?如果是前者,这样就可以了:
char * num2asc(byte n) {
n_str[0] = (n>>0x04)+0x30;
if(n_str[0]>0x39)
n_str[0]+=0x07;

n_str[1] = (n&0x0f)+0x30;
if(n_str[1]>0x39)
n_str[1]+=0x07;

return n_str;
} //end num2asc
要注意一个字节的数变为ASCII用于屏幕显示的话,应转为两个字节的数。
如果是后者,你可以自己修改上面方法二的程序。
海纳百川  有容乃大
谢谢!非常感谢!
我爱单片机。
返回列表