K60使用山外K60DN,姿态传感器使用GY-25(串口输出式的MPU6050),LCD使用1.44寸128*128的山外液晶屏,传感器自带卡尔曼滤波输出,单片机控制简单稳定。
单片机源程序如下:
- #include "common.h"
- #include "include.h"
- unsigned char Re_buf[11],counter=0;
- int Pitch,Roll,Yaw; //串口mpu6050输出的3个角度
- char angle_reflash=0;
- void uart4_handler(void) //串口4中断函数
- {
- if(uart_query(UART4) == 1) //接收数据寄存器满
- {
- uart_getchar(UART4,Re_buf+counter);
- if (counter==0 && Re_buf[0]!=0xAA) return; //第0号数据不是帧头,跳过,重新接收
- counter++;
- if (counter==8 && Re_buf[0]==0xAA && Re_buf[7]==0x55) //接收到8个正确数据
- {
- counter=0;//重新赋值,准备下一帧数据的接收
- Yaw =((short)(Re_buf[1]<<8|Re_buf[2]))/100+180; //航向角Yaw
- Pitch =((short)(Re_buf[3]<<8|Re_buf[4]))/100+180; //俯仰角Pitch
- Roll =((short)(Re_buf[5]<<8|Re_buf[6]))/100+180; //横滚角Roll
- angle_reflash=1; //标志角度更新完成
- }
- }
- }
- void main()
- {
- char i=0,j=1;
- Site_t site41 = {88,16};
- Site_t site42 = {88,40};
- Site_t site43 = {88,64};
-
- led_init(LED_MAX);
- LCD_init();
- uart_init(UART4,115200); //串口MPU6050所用串口初始化
- set_vector_handler(UART4_RX_TX_VECTORn,uart4_handler);
-
- PTB20_OUT=0,PTB21_OUT=0,PTB22_OUT=0,PTB23_OUT=0;//4灯全亮
-
- while(1)
- {
- uart_rx_irq_en (UART4);//开串口4中断,接收最新角度数据
- while ( angle_reflash==0 ) ;
- angle_reflash=0;
- uart_rx_irq_dis(UART4);//关串口4中断
- LCD_num_BC(site41,Pitch,5, BLUE,RED); //显示俯仰角
- LCD_num_BC(site42,Roll, 5, BLUE,RED); // 横滚角
- LCD_num_BC(site43,Yaw, 5, BLUE,RED); // 航向角
- i++;
- if (i>70) //最小系统的4个LED形成流水灯,指示程序正常运行
- { //PTB20,21,22,23,低电平点亮
- i=0;
- GPIO_SET_NBIT(4,PTB20,15-j);//4位整体赋值。15-j起到把j按位取反的作用
- j=j*2; //1,2,4,8——0001,0010,0100,1000
- if (j>=16) j=1;
- }
- DELAY_MS(5); //相当于5ms定时中断的作用
- }
- }
复制代码
所有资料51hei提供下载:
K60 串口6050 LCD.7z
(1.01 MB, 下载次数: 51)
|