📄 mada.c
字号:
#include"display.h"
#include"mada.h"
#include"ad12.h"
#define MDCTDIR P4DIR |=BIT0+BIT1
#define RMOVE P4OUT = BIT1
#define LMOVE P4OUT = BIT0
#define stop P4OUT =BIT0 +BIT1
#define numdata 280
#define L 37.78 //移动范围
float reff=3.27;
int initsucces=0;//初绐化是否完成
float la_data0[numdata]={0};
float lb_data0[numdata]={0};
float lcddatax;
float la_count;
void delaymt(int x)
{
int m=1200*x;
for(;m>0;m--)_NOP();
}
void DELAY0()
{
int m;
m=1200;
for(;m>0;m--);
}
void stop_MOVE()
{
stop;//DELAY0();
}
void R_MOVE()//左
{
RMOVE;
DELAY0();
stop_MOVE();
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
}
void L_MOVE()//右
{
LMOVE;
DELAY0();
stop_MOVE();
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
}
void Go_where(float a,float b)
{
int i=la_count/2+1,x0,y0;
float y1;
if(a>=la_data0[i])
for(;a>=la_data0[i]&&i>=0;i--);
else
for(;a<la_data0[i]&&i<=la_count;i++);
x0=i;
i=la_count/2+1;
if(b>=lb_data0[i])
for(;b>lb_data0[i]&&i<la_count;i++);
else
for(;b<lb_data0[i]&&i>=0;i--);
y0=i;
y1=(float)(0.5*(x0+y0)/la_count*L-L/2);
countvalue(y1);
if(DON==1)
{
Writenumber(y1,3,1,4);
Writenumber((la_data0[x0]-lb_data0[y0])/(la_data0[x0]+lb_data0[y0]),3,1,6);
}
if(XON==1) Writenumber(y1,3,1,6);
}
void go_that(float keydata,int q) //9.2
{
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
int check=0;
int i=la_count/2+1,x0,y0,m=1099;
float a=A0results[1],b=A1results[1],x1,y1;
if(a>=la_data0[i])
for(;a>=la_data0[i]&&i>=0;i--);
else
for(;a<la_data0[i]&&i<la_count;i++);
x0=i;
i=la_count/2+1;
if(b>=lb_data0[i])
for(;b>lb_data0[i]&&i<la_count;i++);
else
for(;b<lb_data0[i]&&i>=0;i--);
y0=i;
if(q==0)
{
x1=(float)L/2+keydata;
if(x1<=L) m=x1*la_count/L;
else m=1099;
}
if(q==1)
{
y1=(float)L/2-keydata;
if(y1>0)m=y1*la_count/L;
else m=1099;
}
if(m!=1099&&q!=99&&m<la_count)
{
for(check=8;check>0;check--)
{
while(la_data0[m]>A0results[1])
{
R_MOVE();
_EINT();
delaymt(8);
}
while(la_data0[m]<A0results[1])
{
L_MOVE(); _EINT();
delaymt(8);
}
while(la_data0[m]>A0results[1])
{
R_MOVE();
_EINT();
delaymt(8);
}
while(la_data0[m]<A0results[1])
{
L_MOVE();
_EINT();
delaymt(8);
}
}
}
else Writestring(2,6,"error");
}
void INIT_MADA()
{
int i;
MDCTDIR;
P4OUT &=~(BIT0+BIT1);
while(A0results[1]<reff||A1results[1]>0.6)
{
R_MOVE();
};
DELAY0();
for(i=0;i<numdata;i++)
{
la_data0[i]= A0results[1];
lb_data0[i]= A1results[1];
L_MOVE();
if(i!=0)
{
if((la_data0[i]>=la_data0[i-1])&&(lb_data0[i]>=lb_data0[i-1]))i--;
if((la_data0[i]<=la_data0[i-1])&&(lb_data0[i]<=lb_data0[i-1]))i--;
}
if(A1results[1]>reff)
{
stop_MOVE();
break;
}
countvalue1(i);
Writenumber(i,0,1,6);
}
la_count=i;
DELAY0();
initsucces = 1;
XON=1;
go_that(0,1);
XON=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -