关键词不能为空

当前您在: 主页 > 英语 >

基于msp430的mpu6050陀螺仪程序

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 18:26
tags:

-

2021年2月1日发(作者:爱已逝去)


//includes.h



#include



#include



#include




//main.c



#include



void main()



{






WDTCTL = WDTPW + WDTHOLD;














BCSCTL1 &=~XT2OFF;











do











{













IFG1 &=~OFIFG;













for(uint i=0xff;i>0;i


--


);











}while((IFG1&OFIFG));




































//


等待时钟稳定










BCSCTL2 |=SELM_2+SELS;



































//


主、从系统时钟均为高频














DATA_DIR=0XFF;






DATA_OUT=0X00;






P6DIR=0XFF;






P6OUT=0X00;





init();





InitMPU6050();





while(1)





{









Dis play10BitData(GetData(ACCEL_XOUT_H),2,0);






Display10BitData(GetData(ACCEL_YOUT_H), 7,0);







Display10BitDat a(GetData(GYRO_XOUT_H),2,1);







Display10BitData(GetData(GYRO_YOUT_H),7,1 );







Display10BitData(GetData(GY RO_ZOUT_H),12,1);







delayms(300);





}



}



//


以下是传感器相关文件



//mpu6050.h




#define CPU_F ((double)8000000)



#define delayus(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))



//


宏定义延时函数



#define delayms(x) __delay_cycles((long )(CPU_F*(double)x/1000.0))




//


显示


X


轴 加速度



//


显示

Y


轴加速度











//< /p>


显示


X


轴角速度











//


显示


Y


轴角速 度







Display10BitData(GetData(AC CEL_ZOUT_H),12,0);



//


显示


Z


轴加速度




#define SCL1 P5OUT |=BIT0




#define SCL0 P5OUT &=~BIT0



#define SCLOUT P5DIR |= BIT0;




#define SDA1 P5OUT |=BIT1



#define SDA0 P5OUT &=~BIT1



#define SDAIN P5DIR &=~BIT1



#define SDAOUT P5DIR |=BIT1



#define SDADATA (P5IN & BIT1)




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



//


定义


MPU6050

< p>
内部地址



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



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define



#define






void I2C_Start();



void I2C_Stop();



void I2C_SendACK(uchar ack);



uchar I2C_RecvACK();



void I2C_SendByte(uchar dat);



uchar I2C_RecvByte();




SMPLRT_DIV



CONFIG






0x19



//


陀螺仪采样率,典型值:


0x07 (125Hz)



0x1A



//


低通滤波频率,典型值:


0x06(5Hz )



0x1B



//


陀螺仪自检及测量范围,典型值:


0x18(

< p>
不自检,


2000deg/s)






//IIC


数据引脚




GYRO_CONFIG




ACCEL_XOUT_H



0x3B



ACCEL_XOUT_L



0x3C



ACCEL_YOUT_H



0x3D



ACCEL_YOUT_L



0x3E



ACCEL_ZOUT_H



0x3F



ACCEL_ZOUT_L



0x40



TEMP_OUT_H



TEMP_OUT_L





ACCEL_CONFIG



0x1C



//


加速计自检、


测量范围及高通滤波频率,


典型值:

< p>
0x01(


不自检,


2G



5Hz)



0x41



0x42



0x43



0x44




0x45



0x46



0x47



0x48



0x6B



//


电源管理,典型值:


0x00(


正常启用

)




0x75



//IIC


地址寄存器


(


默认数值


0x6 8


,只读


)



GYRO_XOUT_H




GYRO_XOUT_L




GYRO_YOUT_H




GYRO_YOUT_L




GYRO_ZOUT_H




GYRO_ZOUT_L




PWR_MGMT_1




WHO_AM_I



SlaveAddress








0xD0



//IIC


写入时的地址字节数据,


+1


为读取

< br>


//


显示数字


(


-


511



512)


的字符数组



void Single_WriteI2C(uchar REG_Address,uchar REG_data);



uchar Single_ReadI2C(uchar REG_Address);



void InitMPU6050();



void lcd_printf(uchar *s,int temp_data);



void DisplayListChar(uchar X,uchar Y,uchar *DData,uchar L);



int GetData(uchar REG_Address);



void Display10BitData(int value,uchar x,uchar y);




//mpu6050.c



#include



uchar dis[4];



int dis_data;



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



//I2C


起始信号



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



void I2C_Start()



{







SDAOUT;







SDA1;





















//


拉高数据线







SCLOUT;







SCL1;





















//


拉高时钟线







delayus(5);


















//


延时







SDA0;





















//


产生下降沿







delayus(5);



















//


延时







SCL0;





















//


拉低时钟线



}



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



//I2C


停止信号



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



void I2C_Stop()



{







SDAOUT;







SDA0;





















//


拉低数据线







SCLOUT;







SCL1;





















//


拉高时钟线







delayus(5);




















//


延时







SDA1;





















//


产生上升沿







delayus(5);



















//


延时



}



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



//I2C


发送应答信号



//


入口参数


:ack (0:ACK 1:NAK)



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



void I2C_SendACK(uchar ack)




{







SDAOUT;







SCLOUT;







if(ack) SDA1;










else SDA0;



//





SDA = ack;



















//


写应答信号







SCL1;





















//


拉高时钟线







delayus(5);



















//


延时







SCL0;





















//


拉低时钟线







delayus(5);



















//


延时



}



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



//I2C


接收应答信号


< p>
//**************************************



uchar I2C_RecvACK()



{







uchar cy;







SCLOUT;







SCL1;





















//


拉高时钟线







SDAIN;







delayus(5);


















//


延时







if(SDADATA)







{











cy=1;







}







else







{











cy=0;







}



//





cy = SDA;




















//


读应答信号







SCL0;





















//


拉低时钟线







delayus(5);

















//


延时







SDAOUT;







return cy;








}



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



//



I2C


总线发送一个字节数据



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



void I2C_SendByte(uchar dat)



{







uchar i;







SDAOUT;







for (i=0; i<8; i++)










//8


位计数器







{











if((dat<











{















SDA1;











}











else











{















SDA0;











}










// SDA = cy;
















//


送数据口











SCLOUT;











SCL1;

















//


拉高时钟线











delayus(5);















//


延时











SCL0;

















//


拉低时钟线











delayus(5);















//


延时







}







I2C_RecvACK();



}



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



//



I2C


总线接收一个字节数据



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



uchar I2C_RecvByte()



{







uchar i;







uchar dat = 0,cy;







SDAOUT;







SCLOUT;







SDA1;





















//


使能内部上拉

< br>,


准备读取数据


,







SDAIN;







for (i=0; i<8; i++)










//8


位计数器







{



















dat <<= 1;











SCL1;

















//


拉高时钟线











delayus(5);














//


延时











if(SDADATA)











{















cy=1;











}













else













{

















cy=0;













}











dat |= cy;














//


读数据















-


-


-


-


-


-


-


-



本文更新与2021-02-01 18:26,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/594414.html

基于msp430的mpu6050陀螺仪程序的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文