|
陀螺儀的頭文件和i2c的基本函數(shù)
mpu6050.h頭文件:
- #ifndef _MPU6050_H_
- #define _MPU6050_H_
- #define SMPLRT_DIV 0x19 //采樣率分頻,典型值:0x07(125Hz) */
- #define CONFIG 0x1A // 低通濾波頻率,典型值:0x06(5Hz) */
- #define GYRO_CONFIG 0x1B // 陀螺儀自檢及測量范圍,典型值:0x18(不自檢,2000deg/s) */
- #define ACCEL_CONFIG 0x1C // 加速計自檢、測量范圍及高通濾波頻率,典型值:0x01(不自檢,2G,5Hz) */
- #define ACCEL_XOUT_H 0x3B // 存儲最近的X軸、Y軸、Z軸加速度感應(yīng)器的測量值 */
- #define ACCEL_XOUT_L 0x3C
- #define ACCEL_YOUT_H 0x3D
- #define ACCEL_YOUT_L 0x3E
- #define ACCEL_ZOUT_H 0x3F
- #define ACCEL_ZOUT_L 0x40
- #define TEMP_OUT_H 0x41 // 存儲的最近溫度傳感器的測量值 */
- #define TEMP_OUT_L 0x42
- #define GYRO_XOUT_H 0x43 // 存儲最近的X軸、Y軸、Z軸陀螺儀感應(yīng)器的測量值 */ #define GYRO_XOUT_L 0x44
- #define GYRO_YOUT_H 0x45
- #define GYRO_YOUT_L 0x46
- #define GYRO_ZOUT_H 0x47
- #define GYRO_ZOUT_L 0x48
- #define PWR_MGMT_1 0x6B // 電源管理,典型值:0x00(正常啟用) */
- #define WHO_AM_I 0x75 //IIC地址寄存器(默認(rèn)數(shù)值0x68,只讀) */
- #endif
復(fù)制代碼
單片機(jī)源程序如下:
- #include"Init_i2c.h"
- void Init_mpu6050()
- {
- write_add(PWR_MGMT_1, 0x00); //解除休眠狀態(tài)
- write_add(SMPLRT_DIV, 0x07);
- write_add(CONFIG, 0x06);
- write_add(ACCEL_CONFIG, 0x01);
- write_add(GYRO_CONFIG, 0x18);
- }
- int get_data(char address)
- {
- char High,Low;
- High=read_add(address); //讀取高八位
- Low=read_add(address+1); //讀取低八位
- return(High<<8)+Low;
- }
-
- //*******初始化****************
- void init()
- {
- SCL=1; //拉高時鐘線
- delay1);
- SDA=1; //拉高數(shù)據(jù)線
- delay1();
- }
- //***啟動信號***********************
- void start()
- {
- SDA=1; //拉高數(shù)據(jù)線
- delay1();
- SCL=1; //拉高時鐘線
- delay1();
- SDA=0; //拉低數(shù)據(jù)線
- delay1();
- SCL=0; //拉低時鐘線
- }
- //************停止信號**************
- void stop()
- {
- SDA=0; //拉低數(shù)據(jù)線
- delay1();
- SCL=1; //拉高時鐘線
- delay1();
- SDA=1; //拉高數(shù)據(jù)線
- delay1();
- }
- //***********回應(yīng)信號**************
- void respons()
- {
- uchar i=0;SCL=1;
- delay1();
- while((SDA==1)&&(i<255))
- i++;
- SCL=0;
- delay1();
- }
- //*************寫一個字節(jié)*************
- void writebyte(uchar date)
- {
- uchar i,temp;
- temp=date;
- for(i=0;i<8;i++)
- {
- temp=temp<<1; //送出最高位
- SCL=0; //拉低時鐘線
- delay1();
- SDA=CY; //送數(shù)據(jù)
- delay1();
- SCL=1; //拉高時鐘線
- delay1();
- }
- SCL=0;
- delay1();
- SDA=1;
- delay1();
- }
- //*************讀一個字節(jié)****************
- uchar readbyte()
- {
- uchar i,j,k;
- SCL=0; //拉低時鐘線
- delay1(); // 延時
- SDA=1; //拉高數(shù)據(jù)線
- for(i=0;i<8;i++)
- {
- SCL=1; //拉高數(shù)據(jù)線
- delay1();
- if(SDA==1) //判斷數(shù)據(jù)線是否為高電平
- j=1;
- else
- j=0;
- k=(k<<1)|j; //數(shù)據(jù)存入最低位
- SCL=0; //拉低時鐘線
- delay1();
- }
- delay1();
- return k;
- }
- //***************指定地址讀一個字節(jié)數(shù)據(jù)****************
- uchar read_add(uchar address)
- {
- uchar dd;
- start(); //啟動信號
- writebyte(0xd0); //寫入
- respons();
- writebyte(address); //發(fā)送寄存器地址
- respons();
- start();
- writebyte(0xd1); //讀取
- respons();
- dd=readbyte();
- stop(); //終止信號
- return dd; //返回值
- }
- //*************指定地址寫一個字節(jié)數(shù)據(jù)*********
- void write_add(uchar address,uchar info)
- {
- start();
- writebyte(0xd0); //寫入
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
Init_i2c.zip
(1.96 KB, 下載次數(shù): 37)
2019-5-6 02:02 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|