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

📄 mma7455l.c

📁 MMA7455发送资料
💻 C
字号:
/*************************************************************
   本实验演示P89LPC9221与MMA7455L的基本操作 
   MMS7455L在IIC端口为0的情况下,地址为0x3A;
   MMS7455L在IIC端口为1的情况下,地址为0x38;
   (BRGR1 BRGR0)= 737300/1200 – 16 =  = 0x17F0
   最后得BRGR1 = 0x17 BRGR1= 0xF0
**************************************************************/
#include <reg922.h>
#include <function.h>
#include <intrins.h>
#include <math.h>
sbit Left_Led=P0^1;
sbit Right_Led=P0^2;
sbit Up_Led=P0^3;
sbit Down_Led=P0^4;
sbit Up_Up_Led=P0^5;
sbit Down_Down_Led=P0^7;
unsigned char ReceiveTemp;
unsigned char X_Y_Z_data[3];
bit ReceiveFlag; /* 接收标志位*/
unsigned char Ready;//
unsigned  char 	 X_Y_Z_data_Temp[6];
bit NeedForLight;
int Number;

/*********************************
   读三轴数据函数 
*********************************/
ReadData()
{
    IRcvStr(0x3A,0x6,&X_Y_Z_data[0],1);//x轴 
	_Nop();
	IRcvStr(0x3A,0x7,&X_Y_Z_data[1],1);//y轴 
	_Nop();
	IRcvStr(0x3A,0x8,&X_Y_Z_data[2],1);//z轴 
}

/*********************************
   主函数 
*********************************/
void main()
{
  _Nop();
  IO_Init();
  UART_Init();
  Ready = 0;
  ReceiveFlag = 0 ;
  NeedForLight=0;
  EA =1;
  MMA7455L_Init();
  InitTimer();
 
  while (1)
  { 
  /*
    if (ReceiveFlag ==1)
    {
      SBUF=ReceiveTemp; //发送数据 
      while(TI==0); //当TI为1时发送完毕 
      TI=0; //TI清0准备下一次发送 
      ReceiveFlag = 0;
    }
	*/  
	if (Ready == 1)
	{	 

	   //ISendStr(0x3A,0x17,0x03); //清中断标志 
	   //_Nop();
	   //ISendStr(0x3A,0x17,0x00);
	   
	   
	   ReadData();	
	   
	   X_Y_Z_data_Temp[0]=X_Y_Z_data[0];
	   X_Y_Z_data_Temp[1]=X_Y_Z_data[1];
	   X_Y_Z_data_Temp[2]=X_Y_Z_data[2];
	   
	  
	   Ready+=1;
	 }

	 

	 if (Ready==3)
	 {
	 
	   ReadData();
	   X_Y_Z_data_Temp[3]=X_Y_Z_data[0];
	   X_Y_Z_data_Temp[4]=X_Y_Z_data[1];
	   X_Y_Z_data_Temp[5]=X_Y_Z_data[2];
	   
	   Ready=0;

	   
	   if (
	        (abs(X_Y_Z_data_Temp[0]-X_Y_Z_data_Temp[3])>0x10)
	      ||(abs(X_Y_Z_data_Temp[1]-X_Y_Z_data_Temp[4])>0x10)
	      ||(abs(X_Y_Z_data_Temp[2]-X_Y_Z_data_Temp[5])>0x10)
		  )

		 { 
		   
		    Left_Led=0;
		   	Number=0;
		   

		 }
		           			 		   		   
		 
		else
		{
		  Number++;
		  if(Number>50)
		  {
		   Left_Led=1;
		   Number=0;
		  }
		}

		}
		  
	  

////////////////调试用,用户可以屏蔽///////////////////////////	   
	   SendData (X_Y_Z_data[0]);//发送到上位机 
	   _Nop();
	   SendData (X_Y_Z_data[1]);
	   Nop();
	   SendData (X_Y_Z_data[2]);
//////////////////////////////////////////////////////////////

	
	   
}


}
/*********************************
  中断接收函数 
*********************************/
void Rcv_ISR() interrupt 4//当接收完一个字节RI置1进入Recieve中断 
{
  ReceiveTemp=SBUF; //保存所读取的数据 
  RI=0; //RI清0以等待下次发送 
  ReceiveFlag = 1;
}
/*
*********************************
  按键中断函数,在此用做MMA7455L的中断  
**********************************
void Key_Press() interrupt 7
{
 EKBI = 0;
 KBCON = 0x00;
 Ready = 1; 
}
*/
/*********************************
  定时器中断函数,定时读MMA7455L  
**********************************/
void Timer1() interrupt 1
{
  
  TH0=0X00;
  TL0=0X00;
  Ready+=1;

 
  
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -