标题: 分享一个基于K60读取显示姿态传感器MPU6050的源程序 [打印本页]

作者: chm    时间: 2019-4-6 12:11
标题: 分享一个基于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)




作者: 岚风吟    时间: 2019-7-19 22:27
很好很实用呢
作者: 13680785914    时间: 2019-8-6 22:35
岚风吟 发表于 2019-7-19 22:27
很好很实用呢

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1