int TQ( char n)//将字符转换成数字
{
if(n>=0x30 && n<=0x39) //如果接收的字符在指定的范围内
{
switch(n) //根据不同字符的十六进制码,返回相应的十进制数
{
case 0x30 : { return 0; }
case 0x31 : { return 1; }
case 0x32 : { return 2; }
case 0x33 : { return 3; }
case 0x34 : { return 4; }
case 0x35 : { return 5; }
case 0x36 : { return 6; }
case 0x37 : { return 7; }
case 0x38 : { return 8; }
case 0x39 : { return 9; }
}
}
else{ return 0; } //否则返回数字 0
}
void HB()//数据合并
{
for(j=0;j<4;)
{
if(aa[i]==0x20){ break; } //如果遇到空格,则结束
bb[j]=TQ(aa[i]); //将字符数据转换成数值数据
j++;i++;
}
switch(j)
{
case 4 : { m=bb[0]*1000 + bb[1]*100 + bb[2]*10 + bb[3]*1 ; return m; }
case 3 : { m=bb[0]*100 + bb[1]*10 + bb[2]*1 ; return m; }
case 2 : { m=bb[0]*10 + bb[1]*1 ; return m; }
case 1 : { m=bb[0]*1; return m; }//根据数据的有效位数来计算步数
default : { m=0; return m; }
}
我这是以空格作为结束符号的,你可以改成你自己使用的
如果有不懂或不知道如何使用,可以看我的资料有联络方式
/* 假如PC传送1234#,则ser[]={'1','2','3','4'},该如何将它转换为变量run=1234 */
/* PC传送的数据长度是不确定的,取值范围从1~4800之间的任意值 */
----
如下即可:
serial() interrupt 4 //单片机接收PC指令字符串
{
if(RI) {
RI = 0;
ser[k] = SBUF;
if(ser[k] == '#') {
run = 0;
for (i = 0; i < k; i++) run = run * 10 + (ser[i] - 48); //run 就是1234
k = 0;
}
else k++;
}
}
字符比十进制多48,‘0’+48=十进制了