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)
2019-4-9 03:00 上傳
點擊文件名下載附件
|