标题:
[求助]这两种方式,哪种正确?
[打印本页]
作者:
wangyj
时间:
2007-7-2 16:28
标题:
[求助]这两种方式,哪种正确?
使用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;
}
作者:
strongchen
时间:
2007-7-2 17:05
运行一下不就知道了。
作者:
wangyj
时间:
2007-7-2 17:27
当初这么写的结果想着是一样的,但运行后结果不一样。
作者:
strongchen
时间:
2007-7-2 17:36
具体是如何不一样?
作者:
wangyj
时间:
2007-7-2 17:50
温度测量值直接打到串口为2C(44度,大概差不多),经过num2asc()转换,结果是23;经过t_tt()转换,结果是44;
说明:2C、23、44均为串口工具ComMax打出来的数据;
作者:
strongchen
时间:
2007-7-3 10:59
这两段程序是你自己编的吗?如果是,能否具体讲一下你的思路?如果按照你的程序运行,当然一个是将2C转换为23,一个是将2C转换为44,又没有错。
作者:
wangyj
时间:
2007-7-3 11:24
这两个程序都不是我写的,因此我不能确定其转换思路的正确性。在线仿真的时候,这两个函数的各个变量、MCU寄存器等的值都正确,说明这种运算是没错的。我想请教您的是:转换成ASCII码时,这两种方法哪个正确?
作者:
strongchen
时间:
2007-7-3 12:06
你是要将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用于屏幕显示的话,应转为两个字节的数。
如果是后者,你可以自己修改上面方法二的程序。
作者:
wangyj
时间:
2007-7-3 13:59
谢谢!非常感谢!
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0