单片机应用-陀螺仪&加速度玩法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzcggg/article/details/9951091

 /*******************************************************************************
这里有前提文件345.c和3050.c

分别是加速度和陀螺仪的程序,百度上也有,没有找我也罢- -!

用别的程序也行,这里只是直接调用结果(测量值)

然后偷了个懒——人家一般都把陀螺仪结果积分什么的,我这里没有

因为陀螺仪的测量的就是角速度,所以我根据我自己的那个陀螺仪(只是我自己这个哦)

测试了一下灵敏度,确定了角度和测量值的大致关系,可以得到角度的大致值

当然,必然是有误差的,相比积分方法当然不行,人家耗时间研究算法、调参数

我这个就是不停的找参数的,比较简单,如果想要在飞行器上用,那还是算了 o(∩_∩)o 哈哈                        *
********************************************************************************/

#include <REG52.H>
#include <stdio.h>
#define   uchar unsigned char
#define   uint unsigned int 
char  code  MESSAGE[][1]= {{'0'},{'1'},{'2'},{'3'},{'4'},{'5'},{'6'},{'7'},{'8'},{'9'},{'x'},{'y'},{'z'},{'a'},{'b'},{'c'},{'+'},{'-'},{'.'}};
/////////////////////////////////////////////////////////////////////////////////////////10----11----12----13----14----15----16----17----18----19----20

int x_345,y_345;
 int z_3050;//extern  =0

 int player=0;static

sbit light=P2^0;//调试信号

void delay(unsigned int i)
{
 unsigned char j;
 for(i; i > 0; i--)
 for(j = 200; j > 0; j--) ;
}
void run(int numin)
{
 unsigned int count;
 count=0; 
 // while(MESSAGE[numin][count] != '\0') //仅仅适用于字符串!!!
 {
  SBUF = MESSAGE[numin][count];         //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
  while(!TI);    // 等特数据传送 (TI发送中断标志)
  TI = 0;     // 清除数据传送标志    
  count++;         // 下一个字符
 }//while (MESSAGE[i][a] != '\0')
delay(50); 
}
/******************3050*********************/

void tellchar(int number)
{/**/ 
 int n1,n2,n3,n4,tempc;//正负,百位 ,十位,个位
 if(number<0){n1=17;tempc=-number;}
 else {n1=16;tempc=number;}
   n2   =tempc/100;//得到最高位
 tempc=tempc%100;//去除最高位
 n3   =tempc/10;//得到次低位低位
 n4   =tempc%10;//得到最低位
 run(n1);run(n2);run(n3);run(n4);

}
/******************345显示用函数************************/
void InitLcd();                     //初始化lcd1602
void  Multiple_Read_ADXL345();   //连续的读取内部寄存器数据
uchar Single_Read_ADXL345(uchar REG_Address);   
void Init_ADXL345();             //初始化ADXL345
int display_x();
int display_y();

/******************3050显示用函数************************/

void InitMPU3050();                 //初始化MPU3050
int display_z();

//****************************************

void main (void)
{

  uchar devid;
  delay(100);////delay(500);                    //上电延时  
  InitLcd();                  //液晶初始化ADXL345
  Init_ADXL345();                 //初始化ADXL345
  devid=Single_Read_ADXL345(0X00);//读出的数据为0XE5,表示正确
/**/

 SCON = 0x50;       //REN=1允许串行接受状态,串口工作模式2        
 TMOD|= 0x20;      //定时器工作方式2                      
 PCON|= 0x80;      //波特率提高一倍                                                   
 // TH1  = 0xcc;//0xd0     //baud*2  /* reload value 1200、数据位8、停止位1。效验位无(12MHz)    
 TH1 = 0xe6;     
 TL1 = 0xe6;
 TR1  = 1;        //开启定时器1                                                     
 ES   = 1;        //开串口中断                 
 EA   = 1;        // 开总中断
 // IE = 0x0;

 while(1)
  {
  light=0;
  
  Multiple_Read_ADXL345();       //连续读出数据,存储在BUF中
  x_345=display_x();                   //---------显示X轴
  y_345=display_y();                   //---------显示Y轴
  //z_3050=0;//display_z();
    
  //X
  run(13);/**/
  
  if(x_345<0){x_345=-x_345;run(17);}//x符号
  else run(16);
  run(x_345%10000/1000);//千位
  run(x_345%1000/100);  //百位
  run(x_345%100/10);    //十位
  
  //Y
  run(14);/**/
  
  if(y_345<0){y_345=-y_345;run(17);}//y符号
  else run(16);
  run(y_345%10000/1000);//千位
  run(y_345%1000/100);  //百位
  run(y_345%100/10);    //十位
  
  //Z
 // run(15);
 // if(z_3050<0){z_3050=-z_3050;run(17);}//y符号
 // else run(16);
 // run(z_3050%10000/1000);//千位
 // run(z_3050%1000/100);  //百位
 // run(z_3050%100/10);    //十位
 // tellchar(z_3050);
  
  
  light=1; 

  }//while(1)


}

/*


    a=0; 
      while(MESSAGE[i][a] != '\0') {
     SBUF = MESSAGE[i][a];         //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)
         while(!TI);    // 等特数据传送 (TI发送中断标志)
     TI = 0;     // 清除数据传送标志    
     a++;         // 下一个字符
       }//while (MESSAGE[i][a] != '\0')
      delay(100); 
    //for(i=0;i<20;i++)run(i);  //测试字符
*/

猜你喜欢

转载自blog.csdn.net/lzcggg/article/details/9951091