加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于STM32单片机的BMP180气压传感器数据采集系统设计proteus仿真

07/05 09:05
2682
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

本设计:
Proteus仿真版本:proteus 8.9
程序编译器:keil 5
编程语言:C语言
编号C0026
腾讯文档】C0026 网盘链接

视频演示:

STM32

设计说明:
通过STM32读取BMP180输出的数据通过串口及LCD显示屏,将高度,温度大气压强信息显示出来。
注:仿真效果有些许误差,不能100%还原传感器,误差大概1%

仿真图(提供源文件):
在这里插入图片描述

源程序(提供源文件):
在这里插入图片描述

#include “main.h”
#include “stm32f1xx.h”
#include “./usart/bsp_debug_usart.h”
#include “./led/bsp_led.h”
#include “./i2c/bsp_i2c_ee.h”
#include “BMP180.h”
#include “LCD.h”
#include “math.h”
uint8_t cal_flag = 0;
uint8_t k;
typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;
/存储小数和整数的数组,各7个/
long double double_buffer[7] = {0};
int int_bufffer[7] = {0};

#define DOUBLE_ADDR 10
#define LONGINT_ADDR 70

/**

  • @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();
    /
    配置系统时钟为72 MHz */
    SystemClock_Config();

/初始化USART 配置模式为 115200 8-N-1,中断接收/
DEBUG_USART_Config();

printf("rn 这是一个EEPROM 读写小数和长整数实验 rn");

//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 帕rn”,result_UPP,result_UP%100);
result_UPP=altitude;
printf(" 高度%d mrn",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 摄氏度rn”,temp/10,temp%10);
sprintf(str, " %d.%d C",temp/10 ,temp%10);
LCD_write_string(1, 1, (char *)str);
HAL_Delay(1000);

}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
// Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
// Error_Handler();
}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
// Error_Handler();
}

/**Configure the Systick interrupt time 
*/

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

/**Configure the Systick 
*/

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

内容如下:

在这里插入图片描述

  • 设计资料获取联系方式.doc

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
ATXMEGA192D3-MH 1 Atmel Corporation RISC Microcontroller, 16-Bit, FLASH, AVR RISC CPU, 32MHz, CMOS, 9 X 9 MM, 1 MM HEIGHT, 0.50 MM PITCH, GREEN, MO-220VMMD, MLF-64
$5.62 查看
MKL17Z256VMP4 1 Freescale Semiconductor Kinetis L 32-bit MCU, ARM Cortex-M0+ core, 256KB Flash, 48MHz, MAPBGA 64

ECAD模型

下载ECAD模型
$5.01 查看
AT89C51RD2-SLSUM 1 Microchip Technology Inc IC MCU 8BIT 64KB FLASH 44PLCC

ECAD模型

下载ECAD模型
$7.41 查看

相关推荐

电子产业图谱