找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2301|回复: 0
打印 上一主题 下一主题
收起左侧

mpu6050头文件mpu6050.h下载

[复制链接]
跳转到指定楼层
楼主
ID:528135 发表于 2019-5-6 02:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
陀螺仪的头文件和i2c的基本函数
mpu6050.h头文件:
  1. #ifndef _MPU6050_H_
  2. #define _MPU6050_H_

  3. #define SMPLRT_DIV 0x19                  //采样率分频,典型值:0x07(125Hz) */
  4. #define CONFIG 0x1A                       // 低通滤波频率,典型值:0x06(5Hz) */
  5. #define GYRO_CONFIG 0x1B                  // 陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) */  
  6. #define ACCEL_CONFIG 0x1C                 // 加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) */   
  7. #define ACCEL_XOUT_H 0x3B                   // 存储最近的X轴、Y轴、Z轴加速度感应器的测量值 */
  8. #define ACCEL_XOUT_L 0x3C
  9. #define ACCEL_YOUT_H 0x3D
  10. #define ACCEL_YOUT_L 0x3E
  11. #define ACCEL_ZOUT_H 0x3F
  12. #define ACCEL_ZOUT_L 0x40   
  13. #define TEMP_OUT_H  0x41               // 存储的最近温度传感器的测量值 */
  14. #define TEMP_OUT_L  0x42   
  15. #define GYRO_XOUT_H  0x43              // 存储最近的X轴、Y轴、Z轴陀螺仪感应器的测量值 */ #define GYRO_XOUT_L  0x44  
  16. #define GYRO_YOUT_H  0x45
  17. #define GYRO_YOUT_L  0x46
  18. #define GYRO_ZOUT_H  0x47
  19. #define GYRO_ZOUT_L  0x48   
  20. #define PWR_MGMT_1  0x6B                      // 电源管理,典型值:0x00(正常启用) */
  21. #define WHO_AM_I  0x75                        //IIC地址寄存器(默认数值0x68,只读) */   

  22. #endif
复制代码



单片机源程序如下:
  1. #include"Init_i2c.h"

  2. void Init_mpu6050()
  3. {
  4.         write_add(PWR_MGMT_1, 0x00);                 //解除休眠状态
  5.         write_add(SMPLRT_DIV, 0x07);
  6.         write_add(CONFIG, 0x06);
  7.         write_add(ACCEL_CONFIG, 0x01);
  8.         write_add(GYRO_CONFIG, 0x18);       
  9. }

  10. int get_data(char address)
  11. {
  12.         char High,Low;
  13.         High=read_add(address);                  //读取高八位
  14.         Low=read_add(address+1);                 //读取低八位
  15.         return(High<<8)+Low;
  16. }
  17.        
  18. //*******初始化****************
  19. void init()               
  20. {
  21.         SCL=1;                      //拉高时钟线     
  22.         delay1);
  23.         SDA=1;                       //拉高数据线
  24.         delay1();
  25. }

  26. //***启动信号***********************
  27. void start()         
  28. {
  29.         SDA=1;                      //拉高数据线
  30.         delay1();
  31.         SCL=1;                      //拉高时钟线
  32.         delay1();
  33.         SDA=0;                        //拉低数据线
  34.         delay1();
  35.         SCL=0;                     //拉低时钟线
  36. }

  37. //************停止信号**************
  38. void stop()       
  39. {
  40.         SDA=0;               //拉低数据线
  41.         delay1();
  42.         SCL=1;             //拉高时钟线
  43.         delay1();
  44.         SDA=1;               //拉高数据线
  45.         delay1();
  46. }

  47. //***********回应信号**************
  48. void respons()       
  49. {
  50.         uchar i=0;SCL=1;
  51.         delay1();
  52.   while((SDA==1)&&(i<255))
  53.         i++;
  54.         SCL=0;
  55.         delay1();
  56. }

  57. //*************写一个字节*************
  58. void writebyte(uchar date)        
  59. {
  60.         uchar i,temp;
  61.         temp=date;
  62.         for(i=0;i<8;i++)
  63.         {
  64.                 temp=temp<<1;                //送出最高位
  65.                 SCL=0;                        //拉低时钟线
  66.                 delay1();
  67.                 SDA=CY;                       //送数据
  68.                 delay1();
  69.                 SCL=1;                          //拉高时钟线
  70.                 delay1();       
  71.         }
  72.         SCL=0;
  73.         delay1();
  74.         SDA=1;
  75.         delay1();
  76. }

  77. //*************读一个字节****************
  78. uchar readbyte()            
  79. {
  80.         uchar i,j,k;
  81.         SCL=0;                    //拉低时钟线
  82.         delay1();                 // 延时
  83.         SDA=1;                    //拉高数据线
  84.         for(i=0;i<8;i++)                    
  85.         {
  86.                 SCL=1;                 //拉高数据线
  87.                 delay1();
  88.                 if(SDA==1)             //判断数据线是否为高电平
  89.                   j=1;
  90.                 else
  91.                   j=0;
  92.                 k=(k<<1)|j;                //数据存入最低位
  93.                 SCL=0;                   //拉低时钟线
  94.                 delay1();
  95.         }
  96.         delay1();
  97.         return k;
  98. }

  99. //***************指定地址读一个字节数据****************
  100. uchar read_add(uchar address)
  101. {
  102.         uchar dd;
  103.         start();                 //启动信号
  104.         writebyte(0xd0);           //写入
  105.         respons();
  106.         writebyte(address);          //发送寄存器地址
  107.         respons();
  108.         start();
  109.         writebyte(0xd1);         //读取
  110.         respons();
  111.         dd=readbyte();
  112.         stop();                       //终止信号
  113.         return dd;                    //返回值
  114. }

  115. //*************指定地址写一个字节数据*********
  116. void write_add(uchar address,uchar info)
  117. {
  118.         start();
  119.         writebyte(0xd0);              //写入
  120. ……………………

  121. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
Init_i2c.zip (1.96 KB, 下载次数: 37)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表