概述
实现功能:通过STM32读取BMP180输出的数据通过串口及LCD显示屏,将高度,温度大气压强信息显示出来 仿真效果有些许误差,不能100%还原传感器,误差大概1%
仿真软件:proteus版本8.11 其他版本运行仿真会有问题
代码编写:keil5 基于HAL库
一、仿真效果
二、代码
/**
* @brief 主函数
* @param 无
* @retval 无
*/
int main(void)
{
char str[80];
extern long result_UT;
extern long result_UP;
u32 result_UPP, temp;
float altitude;
HAL_Init();
/* 配置系统时钟为内部8M*/
SystemClock_Config();
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
DEBUG_USART_Config();
printf("\r\n 系统初始化\r\n");
// LCD1602_GPIO_Config(); //开启GPIO口
HAL_Delay(10); // 延时一段时间
/* I2C 外设初(AT24C02)始化 */
i2c_CfgGpio();
Init_BMP180(); // 初始化bmp180
LCD_init();
HAL_Delay(10);
while (1)
{
/*读取数据标志位*/
bmp180Convert();
// 添加报警 气压过低时候 高原地区气压低于600mmhg,而1mmhg=133.3p。所以为80000p
altitude = 44330.0 * (1 - pow((float)result_UP / 101325, 1 / 5.255)); // 计算高度
// OLED_ShowNum(77,32,altitude,4,12);
result_UPP = result_UP / 100;
printf("大气压强 %d.%d 帕\r\n", result_UPP, result_UP % 100);
result_UPP = altitude;
printf(" 高度%d m\r\n", result_UPP);
sprintf(str, "%dM %d.%dPa", result_UPP, result_UP / 100, result_UP % 100);
LCD_write_string(1, 0, (char *)str);
// OLED_ShowNum(77,52,(u8)(result_UT*0.1),4,12); //显示温度整数部分 因为测量值例如为245没有小数点..... //可以加一个判断 报警
temp = result_UT; // 计算小数部分
printf("温度 %d.%d 摄氏度\r\n", temp / 10, temp % 10);
sprintf(str, " %d.%d C", temp / 10, temp % 10);
LCD_write_string(1, 1, (char *)str);
HAL_Delay(1000);
}
}
关注公众号获取代码+仿真