找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 865|回复: 0
打印 上一主题 下一主题
收起左侧

STC15单片机读取BMP180气压传感器数据并在串口打印

[复制链接]
跳转到指定楼层
楼主
ID:759974 发表于 2023-9-12 23:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC15单片机
实验名称:读取BMP180气压传感器,并在UART串口打印数值
实验内容:
        UART串口9600波特率
        printf函数打印信息(putchar)
        #define FOSC 22118400L  //晶振频率 22.1184MHz

实验器材:
        STC15W408AS_DIP16 x1
        BMP180气压传感器 x1

实验心得:
主要参考 BMP085 arduino测试代码
注意 BMP180 的 IIC 地址是 0xEE

========================================
        BMP180 读写部分
        参考bmp180.ino
========================================

void bmp180_init()
{
        i2c_bmp180_start();
        bmp180_calibration();
        i2c_bmp180_stop();
}

打印信息:

[17:16:37.017]接收←>New Messages...

                    ### BMP180 Calibration Data ###
                    ac1  ac2  ac3  ac4  ac5  ac6
                    001a 0006 00fc 0044 00c6 00ff
                    b1   b2   b5   mb   mc   md
                    0019 0073 0000 001c 0000 0000

                    ### BMP180 Read Data ###
                    read_ut: 27466
                    read_up: 0

                    ### BMP180 Cal Data ###
                    T: 32.1 C
                    P: 1000.3 hPa
                    Altitude: 108.4 m

main.c

  1. #include "config.h"
  2. #include "delay.h"
  3. #include "uart.h"
  4. #include "i2c_bmp180.h"

  5. #define LED_ON        P12 = 0
  6. #define LED_OFF        P12 = 1

  7. bit timer_flag_5s        = 0;        //5s定时触发标志位
  8. uint8 delay_count        = 0;        //delay延迟计数器

  9. void bmp180_loop()
  10. {
  11.         uint16 read_ut;
  12.         uint32 read_up;
  13.         float temperature, pressure, atm, altitude;
  14.         
  15.         i2c_bmp180_start();
  16.         read_ut = bmp180_read_ut();        //MUST be called first
  17.         read_up = bmp180_read_up();
  18.         i2c_bmp180_stop();

  19.         pressure        = bmp180_calc_pval(read_up);
  20.         temperature        = bmp180_calc_tval(read_ut);
  21.         atm = pressure / 101325; // "standard atmosphere"
  22.         altitude = bmp180_calc_altitude(pressure); //Uncompensated caculation - in Meters
  23.         i2c_bmp180_stop();

  24.         if(DEBUG_MODE) printf(">New Messages...\r\n");

  25.         if(DEBUG_MODE) printf("\r\n### BMP180 Calibration Data ###\r\n");
  26.         if(DEBUG_MODE) printf("ac1  ac2  ac3  ac4  ac5  ac6\r\n");
  27.         if(DEBUG_MODE) printf("%04bx %04bx %04bx %04bx %04bx %04bx\r\n", t_bmp180_cal_dat.ac1, t_bmp180_cal_dat.ac2, t_bmp180_cal_dat.ac3, t_bmp180_cal_dat.ac4, t_bmp180_cal_dat.ac5, t_bmp180_cal_dat.ac6);

  28.         if(DEBUG_MODE) printf("b1   b2   b5   mb   mc   md\r\n");
  29.         if(DEBUG_MODE) printf("%04bx %04bx %04bx %04bx %04bx %04bx\r\n", t_bmp180_cal_dat.b1, t_bmp180_cal_dat.b2, t_bmp180_cal_dat.b5, t_bmp180_cal_dat.mb, t_bmp180_cal_dat.mc, t_bmp180_cal_dat.md);

  30.         if(DEBUG_MODE) printf("\r\n### BMP180 Read Data ###\r\n");
  31.         if(DEBUG_MODE) printf("read_ut: %u\r\n", read_ut);
  32.         if(DEBUG_MODE) printf("read_up: %u\r\n", read_up);

  33.         if(DEBUG_MODE) printf("\r\n### BMP180 Cal Data ###\r\n");
  34.         if(DEBUG_MODE) printf("T: %4.1f C\r\n", temperature);
  35.         if(DEBUG_MODE) printf("P: %6.1f hPa\r\n", pressure/100.0f);
  36.         //if(DEBUG_MODE) printf("Std P: %6.1f hPa\r\n", atm);
  37.         if(DEBUG_MODE) printf("Altitude: %4.1f m\r\n", altitude);
  38. }

  39. //主函数
  40. void main(void)
  41. {
  42.         //设置STC15W408AS单片机端口为标准模式
  43.         Config_Port();

  44.         //串口初始化,波特率9600
  45.         UART_Config(9600);

  46.         //初始化bmp180传感器
  47.         bmp180_init();

  48.         LED_OFF; //LED指示灯熄灭
  49.                         
  50.         // 事件处理循环
  51.         while(1)
  52.         {        
  53.         if (timer_flag_5s)  //每隔5s执行以下分支
  54.         {
  55.                         LED_ON; //LED指示灯点亮

  56.                         bmp180_loop(); //读取bmp180数据

  57.                         LED_OFF; //LED指示灯熄灭

  58.             timer_flag_5s = 0;
  59.                 }

  60.                 //延时周期200ms
  61.                 delay_x_ms(200);

  62.                 //5s定时触发标志位
  63.                 if(25 == ++delay_count)
  64.                 {
  65.                         delay_count = 0;
  66.                         timer_flag_5s = 1;
  67.                 }
  68.         }
  69. }
复制代码
原理图: 无
仿真: 无
代码: UART_PRINTF_BMP180_STC15W408AS.zip (11.88 KB, 下载次数: 17)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表