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

📄 smd380.c

📁 三轴加速度传感器读数据
💻 C
字号:

						  

#include <REG51F.H>
#include <intrins.h>
#include <math.h>  


								
typedef    unsigned char Byte;   		   
typedef    bit  bool;
typedef    signed int  sint;
typedef    unsigned  int Word;
typedef    unsigned  int uint;
typedef    signed long slong;



#define uchar 	unsigned char	
#define uint 	unsigned int

#define Nop_() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();








//SMD380

sbit	CSB_380	=	P2^5;
sbit	SCK_380	=	P0^4;
sbit	SDO_380	=	P3^0;
sbit	SDI_380	=	P3^1;





typedef union 
{ unsigned int i;
  float f;
} value;


//----------------------------------------------------------------------------------
// modul-var
//----------------------------------------------------------------------------------
enum {TEMP,HUMI};

value humi_val,temp_val;
value humi_val_buf,temp_val_buf;


const float code pi=3.1415926;
float dew_point;

									
#define noACK 0
#define ACK   1
                            //adr  command  r/w
#define STATUS_REG_W 0x06   //000   0011    0
#define STATUS_REG_R 0x07   //000   0011    1
#define MEASURE_TEMP 0x03   //000   0001    1
#define MEASURE_HUMI 0x05   //000   0010    1
#define RESET        0x1e   //000   1111    0



idata float angle;

idata unsigned int heading,heading_buff;
idata unsigned int OffsetAngle;
idata unsigned int OffsetAngleBuf;
idata unsigned char ModuleStatus=0;
idata unsigned char cnt1=0,cnt2;
idata unsigned char	CharTmp1;

idata	unsigned	char	smd380_add,smd380_data,smd380_buff[18];



				  

void  Delay10us(Word  n); 







	
/*-----------------------延时-----------------------*/

void Delay10us(Word n) //delay n 10us
{
Word t,cnt;
	for(t=0;t<n;t++)
 		for(cnt=0;cnt<5;cnt++);
}



void read_smd380(void)
{
	idata	unsigned	char i,j,z;
	z=smd380_data;
	//smd380_add+=1;
	//smd380_add=0x9a;
	j=smd380_add|0x80;	   
	CSB_380=1;  
	SCK_380=1;
	SDI_380=1;
	SDO_380=1;
	Delay10us(2);
	CSB_380=0; 
	Delay10us(2);

	SCK_380=0;
	for(i=0;i<8;i++)
	{	 
		SCK_380=0;	
		z=0;
		if(j&0x80) SDI_380 = 1;
    		else SDI_380 = 0; 	 
				
		z=0;
		z=0;
		SCK_380=1;	 
		j	<<=1;
		z=0;

	}
	j=0;
	for(i=0;i<8;i++)
	{		
		SCK_380=0;	 
			
		if(SDO_380==1) j |= 0x01;
    		else j |= 0x00;  
		SCK_380=1;
		j	<<=1; 
		
	}			
	SCK_380=1;		
	CSB_380=1;  
	smd380_data=j;



		
}




main()
{		 
 		uchar i;
	    uchar disp_buff[6];		/* 定义显示缓冲区			*/
		uint	z;
		bit	acce_bit;
		float	angle_x,x_value;

			
		P2M1=0X00;
		P2M2=0X00;
		P1M1=0X2C;
		P1M2=0X2C;
		P0M1=0X00;
		P0M2=0X00; 
		P3M1=0X00;
		P3M2=0X00;
	 
		disp_buff[0]=0x70;
		disp_buff[1]=0xD8;
		disp_buff[2]=0x80;
		disp_buff[3]=0xE0;
		disp_buff[4]=0xF8;	
		disp_buff[5]=0xF0;	 
		disp_buff[5]=0xF0;
		PT0AD=0X00;
		TRIM=0;



 		while(1)
 		{			 
			
			//X:smd380_buff[3];Y:smd380_buff[5];Z:smd380_buff[7];


			for(i=0;i<16;i++)
			{				 
				smd380_add=i;
  				read_smd380();
				smd380_buff[i]=smd380_data;

			}
			
						 
			acce_bit=1;  //	acce_bit=1角度为正,acce_bit=0角度为负
		   if(smd380_buff[3]>0x7f)
		   {			
		  		 smd380_buff[3]=0x100-smd380_buff[3];
				 acce_bit=0;
		   }
			x_value=smd380_buff[3]*8;
			x_value=x_value/1024.000;
			angle_x=asin(x_value)*180.0/pi; //angle_x为角度值,acce_bit=1角度为正,acce_bit=0角度为负


			for(z=0;z<2;z++)
			{				  
				Delay10us(2);  
			}		 

  	 		smd380_data=0;
			i=0;
 	 }



}

⌨️ 快捷键说明

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