串口屏与6050_MPU6050温度值的读取与转换及串口通信,请指导
MPU6050溫度值的讀取與轉(zhuǎn)換及串口通信,請指導(dǎo)
[復(fù)制鏈接]
想讀取6050的溫度,并在上位機PC上的串口助手顯示,可是串口上顯示的全是亂碼方塊,代碼如下:
#include
#include
typedef unsigned char u8;
typedef unsigned int??u16;
//****************************************
// 定義MPU6050內(nèi)部地址
//****************************************
#define SMERT_DIV? ? 0x19? ?//25.采樣頻率分頻器.采樣頻率=陀螺儀輸出頻率(DLPF_CFG)/( 1+SMPLRT_DIV )
#define CONFIG? ?? ? 0X1A? ?//26.配置
#define GYRO_CONFIG??0x1b? ?//27.陀螺儀配置
#define ACCEL_CONFIG 0x1c? ?//28.加速計配置
#define ACCEL_XOUT_H 0x3b? ?//59.加速度計測量值X軸的高8位
#define ACCEL_XOUT_L 0x3C? ?//60.加速度計測量值X軸的低8位
#define ACCEL_YOUT_H 0x3D? ?//61.加速度計測量值Y軸的高8位
#define ACCEL_YOUT_L 0x3E? ?//62.加速度計測量值Y軸的低8位
#define ACCEL_ZOUT_H 0x3F? ?//63.加速度計測量值Z軸的高8位
#define ACCEL_ZOUT_L 0x40? ?//64.加速度計測量值Z軸的低8位
#define TEMP_OUT_H? ?0x41? ?//65.溫度測量值的高8位
#define TEMP_OUT_L? ?0x42? ?//66.溫度測量值的低8位
#define GYRO_XOUT_H??0x43? ?//67.陀螺儀測量值X軸的高8位
#define GYRO_XOUT_L??0x44? ?//68.陀螺儀測量值X軸的低8位
#define GYRO_YOUT_H??0x45? ?//69.陀螺儀測量值Y軸的高8位
#define GYRO_YOUT_L??0x46? ?//70.陀螺儀測量值Y軸的低8位
#define GYRO_ZOUT_H??0x47? ?//71.陀螺儀測量值Z軸的高8位
#define GYRO_ZOUT_L??0x48? ?//72.陀螺儀測量值Z軸的低8位
#define PWR_MGMT_1? ?0x6b? ?//107.電源控制1
#define WHU_AM_I? ???0x75? ?//117.MPU-60X0的6位I2C地址寄存器
#define SlaveAddress 0xd0? ?//IIC寫入時的地址字節(jié)數(shù)據(jù),+1為讀取
//*************************************************************************************************
//************************************延時*********************************************************
//*************************************************************************************************
void delay(u16 k)
{
unsigned int i,j;
for(i=0;i{
for(j=0;j<121;j++);
}
}
//初始化MPU6050
void initmpu6050()
{
I2C_mpu6050Write(PWR_MGMT_1,0x00);??//電源管理,典型值:0x00(正常啟用)
I2C_mpu6050Write(SMERT_DIV,0x07);? ?//陀螺儀采樣率,典型值:0x07(125Hz)
I2C_mpu6050Write(CONFIG,0x06);? ?? ?//低通濾波頻率,典型值:0x06(5Hz)
I2C_mpu6050Write(GYRO_CONFIG,0x18); //設(shè)置陀螺儀的滿量程范圍為:±2000°/s
I2C_mpu6050Write(ACCEL_CONFIG,0x00);//設(shè)置加速度計的滿量程范圍為:±2g
}
//******************************************************************************************************
//串口初始化
//*******************************************************************************************************
void init_uart()
{
TMOD=0x20;
TH1=0xf3;? ? ? ? ? ? ? ? //實現(xiàn)波特率4800(系統(tǒng)時鐘12MHZ)
TL1=0xf3;
PCON=0x80;
SCON=0x50;
PS=1;? ?? ?//串口中斷設(shè)為高優(yōu)先級別
TR0=1;? ? ? ?? ? //啟動定時器
TR1=1;
ET0=1;? ???//打開定時器0中斷
ES=1;
EA=1;
}
//數(shù)據(jù)融合及運算
float ronghe(u8 addr)
{
u8 H,L;
short tem;
H=I2C_mpu6050Read(addr);
L=I2C_mpu6050Read(addr+1);
tem=(short) ((H<<8)|L);
return (36.53+(tem/340));
}
//*************************************************************************************************
//串口發(fā)送函數(shù)
//*************************************************************************************************
void??SeriPushSend(u8 send_data)
{
u8 det,det1,det2;
det=ronghe(send_data);
det1=det/10;
SBUF=det1;
while(!TI);TI=0;
det2=det%10;
SBUF=det2;
while(!TI);TI=0;
}
//主程序
void main()
{
delay(500);
init_uart();
initmpu6050();
delay(150);
while(1)
{
SeriPushSend(TEMP_OUT_H);
delay(200);
}
}
理想的結(jié)果是,得到的結(jié)果為,有符號型的浮點數(shù).例:-32.13度.
程序到段,應(yīng)該都是沒問題的,我覺得就是轉(zhuǎn)換這里的問題(看了很多資料,也沒想明白,怎么轉(zhuǎn)換),請師傅們指導(dǎo)...
推薦些資料也好,謝謝
總結(jié)
以上是生活随笔為你收集整理的串口屏与6050_MPU6050温度值的读取与转换及串口通信,请指导的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keil添加hal库_使用Keil uV
- 下一篇: 谷歌浏览器禁止右滑返回历史_移动端h5禁