本帖最后由 烈焰123 于 2016-5-30 15:28 编辑
这是一部分程序,void transforma
tion()主要是分象限执行相应的操作,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();
}
一周热门 更多>