谁给看看这部分是不是有什么问题,为什么程序执行有错

2019-07-15 13:48发布

本帖最后由 烈焰123 于 2016-5-30 15:28 编辑

这是一部分程序,void transformation()主要是分象限执行相应的操作,pow为平方函数,sqrt为开平方函数,acos为反三角函数。谁给看看为什么程序编译没错,但是实际上硬件出错(显示R和jd值)主要看看是不是IF函数有问题。
#include <reg51.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char          //、、
#define pi 3.1415926
unsigned int t1,t2;   
unsigned int x0,y0; //X,Y为相对于触摸屏原点(516,498)的距离坐标。x0,y0为触摸屏坐标,x5,y5为实际坐标
float X,Y,x5,y5;
float jd,R;
unsigned char fg;
#define         a 27185.4144+pow(Y,2)                                 
#define         b Y*sqrt(pow(Y,2)+54370.8288)                  
#define         bu 164.88-b
#define         bd 164.88+b
#define         e 516                        //触摸屏原点x坐标
#define         d 498                        //触摸屏原点Y坐标
void transformation()
{
if(x0>e&&y0>d)        //第一象限
{
X=x0-e;
Y=y0-d;
fg=1;
x5=3.607*a/bu;
y5=841.21*b/bu;
R=sqrt(pow(x5,2)+pow(y5,2));
jd=acos(x5/R);
t1=R/52;
t2=0.394*jd/pi;
}
else if(x0<e&&y0>d)        //第二象限
{
Y=y0-d;
X=e-x0;
fg=2;
x5=3.607*a/bu;
y5=841.21*b/bu;
R=sqrt(pow(x5,2)+pow(y5,2));
jd=acos(x5/R);        
t1=R/52;
t2=142-0.394*jd/pi;                                        //180-jd
}
else if(x0<e&&y0<d)           //第三象限 //反转
{
fg=3;
X=e-x0;
Y=d-y0;
x5=3.607*a/bd;
y5=841.21*b/bd;
R=sqrt(pow(x5,2)+pow(y5,2));
jd=acos(x5/R);                //180-jd
t1=R/52;
t2=142-0.394*jd/pi;                                        //180-jd
}
else if(x0>e&&y0<d)//第四象限
{
fg=4;
X=x0-e;
Y=d-y0;
x5=3.607*a/bd;
y5=841.21*b/bd;
R=sqrt(pow(x5,2)+pow(y5,2));
jd=acos(x5/R);
t1=R/52;
t2=0.394*jd/pi;
}
else
{
fg=0;
R=0;
jd=0;
}
}void main()
{
x0=        610;        //e=516
y0=        592;        //d=498
  transformation();
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。