求一个在串口输入0--999 然后返回对应数值的串口
每次处理好了个位 十位百位就不对
百位对了 别的位有不对
ps:下面的是复制一位大佬的
下面是我学习后正在编写的串口接收工程文件
//--------
//串口接收,有串口接收数据时自动调用接收中断函数 USART1_IRQHandler(void)
//--------
if(USART_RX_STA&0x8000) //判断接收到的数据是否被调走,为1调走,调走后才能进入if下面的语句中进行新的数据接收,否则会出现误码。
{
w=USART_RX_BUF[1]-48; //用于返回PC字符提示信息
h=USART_RX_BUF[2]-48; //用于返回PC字符提示信息 对照ascii码表,收到的数字为ascii码的对应1~9字符(对应十进制48~57),而不是十进制的1~9.
y=(USART_RX_BUF[0]-48); //功能码 ascii码表中字符的0~9与十进制的0~9相差48,所以要把字符的0~9转换成10进制的0~9就减去48.
num=w+h+y; //
USART_RX_STA=0; //重新接收
}
无论加不加48 这个串口都有问题
哪位做过的可以帮助啊一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度 0011 1111 1111 1111
printf(" 您发送的消息为: ");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);//向串口1发送数据
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}//USART_FLAG_TC是发送完成的表示符
printf(" ");
num0=USART_RX_BUF[0]-48;
num1=USART_RX_BUF[1]-48;
num2=USART_RX_BUF[2]-48;
if(num1<0)
num1+=48;
if(num2<0)
num2+=48;
num=num0*100+num1*10+num2*1;
USART_RX_STA=0;//串口的标志位
printf("num0=%lf ",num0);
printf("num1=%lf ",num1);
printf("num2=%lf ",num2);
printf("num=%lf ",num);
}
这样只可以计算100-999啊
十位个位不对了 谢谢原子哥
atoi(str)
这样不是很好吗
一周热门 更多>