⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mada.c

📁 该代码来自2008年湖北电子设计大赛位移测量装置制作,主要实现位移的自动测量和手动测量,msp430单片机
💻 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 + -