🚀项目开源地址Simple Thermostatic Control System on GitHub

🧠 项目简介

这篇文章分享的是我在《单片机课程设计》期间独立完成的一个嵌入式项目——简易恒温控制系统。项目基于 STC90C516RD+ 单片机,模拟空调的基本功能,支持:

  • 实时温度采集(DS18B20)

  • PWM 控制电机风扇(调速控温)

  • LCD1602 显示工作状态

  • 支持红外遥控调速

  • 支持电位器手动调速

  • 超温报警(蜂鸣器)

虽然是教学项目,但我按照“能开源就尽量工程化”的原则整理了整个源码、文档,已在 GitHub 上完整开源:

👉 https://github.com/liehuf/embedded_projects/tree/main/Simple_thermostatic_control_system


🖥️ 系统功能结构

  • 控制核心:STC90C516RD+ 单片机

  • 温度检测:DS18B20 数字温度传感器(单总线)

  • 人机交互

    • LCD1602 实时显示温度与状态

    • 红外遥控(NEC 协议)调速

    • 电位器输入(ADC)调速

  • 风扇控制:PWM 模拟输出控制直流电机

  • 异常报警:蜂鸣器(温度超过设定阈值)


🧱 硬件组成简述

模块 说明
MCU STC90C516RD+,C语言开发
传感器 DS18B20,单总线协议,12bit 精度
显示模块 LCD1602(并口,P2 控制)
PWM调速 软PWM,Timer0 中断生成,占空比可调
红外遥控 外部中断INT0 + NEC协议解码
ADC模块 ET2046(SPI接口),连接电位器调速
蜂鸣器 阻塞式驱动,带提示与报警两种模式

🧠 软件逻辑与控制流程

系统采用主循环 + 中断控制结构。

🔁 主程序逻辑:

while (1) {
  1. 读取温度
  2. 判断工作模式
  3. 根据温度/调速输入调整 PWM
  4. LCD1602 更新状态显示
  5. 延时1秒,进入下一次循环
}

🧠 三种运行模式:

  1. 自动控温模式

    • 温度 > 设定值(26°C):

      • 0°C:PWM = 64

      • 2°C:PWM = 128

      • 4°C:PWM = 192

    • 自动报警 + 调速

  2. 红外手动模式

    • 遥控器选择低/中/高 三档速度

  3. 电位器调速模式

    • ADC采集电压值(0~4095)→ 分段映射 → 占空比调整


⚙️ 调试与踩坑记录

  • DS18B20温度值不稳定 → 关闭中断再采集(防干扰)

  • LCD乱码闪烁 → 修复数码管残余代码+优化延时

  • PWM无法调速 → 初始化 duty=0,PWM占空比未设置

  • 红外遥控无响应 → 电池没电(调了半天…)

  • 电位器调速不灵敏 → ADC 映射逻辑调整成分段控制

  • 蜂鸣器响个不停 → 调整 Buzz_time() 实现按场景分别响

📂 项目结构说明

项目已按嵌入式工程化风格整理为如下目录:

Simple_thermostatic_control_system/
 ├── src/         # 主程序与模块代码(.c/.h)
 ├── hardware/    # 接线说明
 ├── doc/         # 设计报告
 ├── README.md    # 项目说明
 └── LICENSE      # MIT开源协议

📦 项目地址(欢迎 Star)
👉 https://github.com/liehuf/embedded_projects/tree/main/Simple_thermostatic_control_system

📌 工程师的思维体会

这次项目让我意识到:

“代码能跑不等于系统能跑。”

我们常常掉进“功能写完了,项目就完成了”的陷阱,但嵌入式系统最大的问题是系统整合和调试

调试中每一个小问题——电机转不动、温度采集乱跳、LCD 闪烁——都不是“代码写错”,而是“系统兼容性问题”,这才是工程师该练的能力。

每一个 bug 解决掉之后,项目就更像一个“真·产品”。

💬 如果你有兴趣一起搞项目,可以联系我!

欢迎交流嵌入式、Rust、51单片机项目等技术,有空我也会更新一些【项目复盘】和【竞赛模板】干货~

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐