关键词不能为空

当前您在: 主页 > 英语 >

基于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陀螺仪程序的相关文章

  • 余华爱情经典语录,余华爱情句子

    余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,

    语文
  • 心情低落的图片压抑,心情低落的图片发朋友圈

    心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得

    语文
  • 经典古训100句图片大全,古训名言警句

    古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事

    语文
  • 关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅

    鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而

    语文
  • 三国群英单机版手游礼包码,三国群英手机单机版攻略

    三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,

    语文
  • 不收费的情感挽回专家电话,情感挽回免费咨询

    免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。

    语文