默れ

单双击检测主程序

0
阅读(2912)

寄存器的设置在前几篇的程序代码中有写出,参考一下就好了。

单双击检测的主程序代码在这里和大家分享一下,其实就是添加了一个中断程序,可以与旋转检测的主程序对比一下

 

#include "main.h"
#include "xl345.h"
#include "Common.h"
#include "irq_arm.c"
#include "myxl345.h"
#include 
//Three Axis Acceleration Flag
#define     X_CHANNEL   	0		
#define     Y_CHANNEL		1
#define     Z_CHANNEL		2
unsigned int r_data[20];
unsigned int fifo_flag;
long long_r_data[30];
long temp[30];
unsigned int xl345_all[29];
long mean_x;
long mean_y;
long mean_z;
long static_x;
long static_y;
long static_z;
int main(void)
{
  int i;
  lcd_initial();
  ADuC7026_Initiate();
  ADuC7026_once_2();
  fifo_flag = 0;
  ADuC7026_static_rotate();
  disp_str(0,0,"static");
  while(1)
  {
    if(fifo_flag==1)
    {
        SPI_ADXL345_READ(XL345_INT_SOURCE);
        SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
        mean_x = 0;
        mean_y = 0;
        mean_z = 0;
        for(i=0; i<1; i++)
    	{
            ADuC7026_once();
            long_r_data[6+i] = long_r_data[0];
            long_r_data[7+i] = long_r_data[1];
            long_r_data[8+i] = long_r_data[2];
            mean_x+=long_r_data[0];
            mean_y+=long_r_data[1];
            mean_z+=long_r_data[2];
    	}
        mean_x/=1;
        mean_y/=1;
        mean_z/=1;
        mean_x-=static_x;
        mean_y-=static_y;
        mean_z-=static_z;	
        fifo_flag=0;
        long_delay(500000);
            ADuC7026_once_2();
        if(static_z>200||static_z<-200)
    	{
            if(mean_x+mean_y>0)
                disp_str(0,0,"left       ");
            else if(mean_x+mean_y<=0)
                disp_str(0,0,"right      ");
    	}
        else if(static_x>200||static_x<-200)
        {  
            if(static_x>200)disp_str(0,0,"x down     ");
            else    disp_str(0,0,"x up       ");
    	}
        else if(static_y>200||static_y<-200)
        {  if(static_y>200)disp_str(0,0,"y down     ");
            else    disp_str(0,0,"y up       ");
    	}
        else 
    	{
            disp_str(0,0,"wait ...   ");
    	}
        long_delay(50000);
        ADuC7026_static_rotate();
    }
    else if(fifo_flag==2)
    {
        SPI_ADXL345_READ(XL345_INT_SOURCE);
        SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
        fifo_flag=0;
        long_delay(500000);
        ADuC7026_once_2();
        disp_str(0,2,"single tap   ");
        long_delay(50000);
        ADuC7026_static_rotate();
    }
    else if(fifo_flag==3)
    {
        SPI_ADXL345_READ(XL345_INT_SOURCE);
        SPI_ADXL345_WRITE(XL345_INT_ENABLE,0x00);
        fifo_flag=0;
        long_delay(500000);
        ADuC7026_once_2();
        disp_str(0,2,"double tap   ");
        long_delay(50000);
        ADuC7026_static_rotate();
    }
  };
}