![]() |
發(fā)布時間: 2018-5-4 15:29
正文摘要:接受數(shù)據(jù)后,對receiveData進(jìn)行算法處理,比如加上5,或者乘以5之類的,最后返回電腦是計算好的值。 |
hexinghua666 發(fā)表于 2018-5-4 20:58 請問輸入 5*2= ,結(jié)果輸出為0,是什么原因 |
你可以用 printf函數(shù) 試試,可好玩了![]() |
#include "reg52.h" #include "string.h" #include "stdlib.h" #include "stdio.h" #define uchar unsigned char #define uint unsigned int unsigned char flag,c; uchar receivedata[12] ; double number1,number2,result1; uint number3,number4; uchar number[1][4] ; uint length,count,i,point,j,k,result2; uchar yunsuanfu; uchar senddata[10]; void UsartInit() { SCON=0x50; TMOD=0X20; PCON=0X80; TH1=0XF3; TL0=0XF3; ES=1; EA=1; TR1=1; } void Usart() interrupt 4 { if(RI==1) { receivedata[count]=SBUF; if(receivedata[count]=='=') { flag=1; length=count; } count++; RI=0; } } void main() { UsartInit(); while(1) { if(flag==1) { ES=0; while(receivedata[i]) { if(receivedata[i]=='=') break; if((receivedata[i]>=48 && receivedata[i]<=57) || receivedata[i]=='.') { if(receivedata[i]=='.') point=1; number[j][i-k]=receivedata[i]; i++; } else { yunsuanfu=receivedata[i]; i++; k=i; j++; } } if(point==1) { number1=atof(number[0]); number2=atof(number[1]); switch(yunsuanfu) { case '+':result1=number1+number2;break; case '-':result1=number1-number2;break; case '*':result1=number1*number2;break; case '/':result1=number1/number2;break; default: break; } sprintf(senddata,"%.3f",result1); } else { number3=atoi(number[0]); number4=atoi(number[1]); switch(yunsuanfu) { case '+':result2=number3+number4;break; case '-':result2=number3-number4;break; case '*':result2=number3*number4;break; case '/':result2=number3/number4;break; default: break; } sprintf(senddata,"%d",result2); } for(c=0;c<10;c++) { SBUF=senddata[c]; while(!TI); TI=0; } ES=1; flag=0; } } } 你發(fā)送的字符,程序的操作對象其實是它的ASCII碼,你可以先用函數(shù)轉(zhuǎn)化成整型或者浮點型數(shù) Atof()函數(shù): 其作用是把括號內(nèi)的一個字符串轉(zhuǎn)化為浮點數(shù): Atoi()函數(shù): 其作用是把括號內(nèi)的一個字符串轉(zhuǎn)化為整數(shù); Sprintf()函數(shù): 其作用是將一個數(shù)變成字符串存到一個數(shù)組中去; sprintf(senddata,"%d",result2);例如這個的意思就是把數(shù)據(jù)result2變成字符串再存到senddata數(shù)組中去。 |
可以給你一個最簡單的串口計算器的程序參考一下。 |
sacredyy 發(fā)表于 2018-5-4 20:07 串口助手按16進(jìn)制數(shù)或字符傳送,在上位機發(fā)10其實是0x10,就是16,乘以2當(dāng)然是32,你再把32回傳,在串口助手上顯示20. |
wulin 發(fā)表于 2018-5-4 17:53 不是,這是我注釋的,我想在這里添加算法,如果直接用加法或者乘法,比如10加2,結(jié)果會顯示32.(兩位同時相加了) |
此處注釋只是告訴你可以對收到的數(shù)據(jù)進(jìn)行處理,如無此必要就不必處理,就按原樣回傳給上位機。 |
Powered by 單片機教程網(wǎng)