找回密码
 立即注册

QQ登录

只需一步,快速开始

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

分享一个基于K60读取显示姿态传感器MPU6050的源程序

[复制链接]
跳转到指定楼层
楼主
K60使用山外K60DN,姿态传感器使用GY-25(串口输出式的MPU6050),LCD使用1.44寸128*128的山外液晶屏,传感器自带卡尔曼滤波输出,单片机控制简单稳定。

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

  3. unsigned char Re_buf[11],counter=0;
  4. int Pitch,Roll,Yaw;    //串口mpu6050输出的3个角度
  5. char angle_reflash=0;

  6. void uart4_handler(void)        //串口4中断函数
  7. {
  8.   if(uart_query(UART4) == 1)   //接收数据寄存器满
  9.   {
  10.      uart_getchar(UART4,Re_buf+counter);
  11.      if (counter==0 && Re_buf[0]!=0xAA) return; //第0号数据不是帧头,跳过,重新接收
  12.      counter++;
  13.      if (counter==8 && Re_buf[0]==0xAA && Re_buf[7]==0x55) //接收到8个正确数据
  14.      {
  15.        counter=0;//重新赋值,准备下一帧数据的接收   
  16.        Yaw   =((short)(Re_buf[1]<<8|Re_buf[2]))/100+180; //航向角Yaw
  17.        Pitch =((short)(Re_buf[3]<<8|Re_buf[4]))/100+180; //俯仰角Pitch
  18.        Roll  =((short)(Re_buf[5]<<8|Re_buf[6]))/100+180; //横滚角Roll
  19.        angle_reflash=1;     //标志角度更新完成
  20.      }
  21.   }  
  22. }

  23. void main()
  24. {   
  25.     char i=0,j=1;
  26.     Site_t site41 = {88,16};
  27.     Site_t site42 = {88,40};
  28.     Site_t site43 = {88,64};
  29.    
  30.     led_init(LED_MAX);
  31.     LCD_init();
  32.     uart_init(UART4,115200);    //串口MPU6050所用串口初始化
  33.     set_vector_handler(UART4_RX_TX_VECTORn,uart4_handler);
  34.    
  35.     PTB20_OUT=0,PTB21_OUT=0,PTB22_OUT=0,PTB23_OUT=0;//4灯全亮
  36.    
  37.     while(1)
  38.     {
  39.         uart_rx_irq_en (UART4);//开串口4中断,接收最新角度数据
  40.         while ( angle_reflash==0 )  ;
  41.         angle_reflash=0;
  42.         uart_rx_irq_dis(UART4);//关串口4中断  
  43.         LCD_num_BC(site41,Pitch,5, BLUE,RED);     //显示俯仰角
  44.         LCD_num_BC(site42,Roll, 5, BLUE,RED);     //    横滚角
  45.         LCD_num_BC(site43,Yaw,  5, BLUE,RED);     //    航向角
  46.         i++;
  47.         if (i>70)      //最小系统的4个LED形成流水灯,指示程序正常运行
  48.         {               //PTB20,21,22,23,低电平点亮
  49.           i=0;
  50.           GPIO_SET_NBIT(4,PTB20,15-j);//4位整体赋值。15-j起到把j按位取反的作用
  51.           j=j*2;                       //1,2,4,8——0001,0010,0100,1000
  52.           if (j>=16) j=1;
  53.         }
  54.         DELAY_MS(5);    //相当于5ms定时中断的作用
  55.     }
  56. }
复制代码

所有资料51hei提供下载:
K60 串口6050 LCD.7z (1.01 MB, 下载次数: 51)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:587148 发表于 2019-7-19 22:27 | 只看该作者
很好很实用呢
回复

使用道具 举报

板凳
ID:596304 发表于 2019-8-6 22:35 | 只看该作者

可以分享一下吗,币不够,很凄凉
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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