【TB作品】MSP430F5529 单片机,温度控制系统,DS18B20,使用MSP430实现的智能温度控制系统

作品功能

这个智能温度控制系统基于MSP430单片机设计,能够实时监测环境温度并根据预设的温度报警值自动调节风扇和加热片的工作状态。主要功能包括:

  1. 实时显示当前温度。
  2. 通过OLED屏幕显示温度报警值。
  3. 通过按键设置温度报警值。
  4. 实际温度超过报警值时,自动开启风扇。
  5. 实际温度低于报警值时,自动开启加热片。

硬件材料

  1. MSP430 单片机
  2. DS18B20 温度传感器
  3. OLED 显示屏
  4. 风扇
  5. 加热片
  6. 按键

电子元器件如何连接

  1. DS18B20 温度传感器

    • VCC 接 3.3V
    • GND 接 GND
    • DATA 接 P1.5
  2. OLED 显示屏

    • VCC 接 3.3V
    • GND 接 GND
    • SCL 接 P2.0
    • SDA 接 P2.2
  3. 加热片

    • VCC 接 3.3V
    • GND 接 GND
    • DATA 接 P2.3
  4. 风扇

    • VCC 接 3.3V
    • GND 接 GND
    • DATA 接 P2.6
  5. 按键

    • 按键1 接 P1.1 (板子上有)
    • 按键2 接 P2.1 (板子上有)

代码讲解

初始化部分

初始化了OLED显示屏并在屏幕上设置了温度控制相关的汉字显示位置,同时配置了按键和传感器的端口。

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

OLED_Init(); // OLED初始化
// 第一排显示 "温度检测控制"
OLED_ShowCHinese(16 * 1, 0, 0);
OLED_ShowCHinese(16 * 2, 0, 1);
OLED_ShowCHinese(16 * 3, 0, 2);
OLED_ShowCHinese(16 * 4, 0, 3);
OLED_ShowCHinese(16 * 5, 0, 4);
OLED_ShowCHinese(16 * 6, 0, 5);

// 第二排显示 "温度:"
OLED_ShowCHinese(16 * 0, 2, 6);
OLED_ShowCHinese(16 * 1, 2, 7);
OLED_ShowCHinese(16 * 2, 2, 8);

// 第三排显示 "临界:"
OLED_ShowCHinese(16 * 0, 4, 9);
OLED_ShowCHinese(16 * 1, 4, 10);
OLED_ShowCHinese(16 * 2, 4, 11);

// 显示临界值
display_num_oled(16 * 3, 4, Temp_critical_value);

主循环部分

在主循环中,系统会不断读取温度传感器的值并更新显示。如果按下按键1,增加临界值;按下按键2,减少临界值。根据当前温度和临界值的比较,自动控制风扇和加热片的开关。

while (1) {
    delay_ms(10);
    t = (t + 1) % 20;
    if (t == 1) {
        temperature = get_one_temperature(); // 读取温度
        display_num_oled(16 * 3, 2, temperature); // 显示温度
    }

    // 按键1:增加临界值
    if (!(P1IN & BIT1)) {
        while (!(P1IN & BIT1));
        if (Temp_critical_value < 400) {
            Temp_critical_value += 10;
        }
        display_num_oled(16 * 3, 4, Temp_critical_value); // 显示临界值
    }

    // 按键2:减少临界值
    if (!(P2IN & BIT1)) {
        while (!(P2IN & BIT1));
        if (Temp_critical_value > 20) {
            Temp_critical_value -= 10;
        }
        display_num_oled(16 * 3, 4, Temp_critical_value); // 显示临界值
    }

    // 温度控制逻辑
    if (temperature > (Temp_critical_value + 10)) {
        P2OUT |= BIT3; // 关闭加热片
        P2OUT &= ~BIT6; // 打开风扇
        OLED_ShowCHinese(16 * 0, 6, 14); // 显示"制冷"
        OLED_ShowCHinese(16 * 1, 6, 15); // 显示"制冷"
    } else if (temperature < (Temp_critical_value - 10)) {
        P2OUT &= ~BIT3; // 打开加热片
        P2OUT |= BIT6; // 关闭风扇
        OLED_ShowCHinese(16 * 0, 6, 12); // 显示"加热"
        OLED_ShowCHinese(16 * 1, 6, 13); // 显示"加热"
    } else {
        P2OUT |= BIT3; // 关闭加热片
        P2OUT |= BIT6; // 关闭风扇
        OLED_ShowString(0, 6, "      ");
    }
}

全部代码

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

在这里插入图片描述

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 15:20:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 15:20:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 15:20:01       82 阅读
  4. Python语言-面向对象

    2024-06-08 15:20:01       91 阅读

热门阅读

  1. node.js安装包

    2024-06-08 15:20:01       29 阅读
  2. 基于CycleGAN的图像风格转换

    2024-06-08 15:20:01       21 阅读
  3. C++ 纯虚函数 virtual = 0

    2024-06-08 15:20:01       35 阅读