news 2026/5/14 19:52:47

STC12C5A60S2单片机驱动DHT11和0.96寸OLED,手把手教你做个桌面温湿度计(附完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STC12C5A60S2单片机驱动DHT11和0.96寸OLED,手把手教你做个桌面温湿度计(附完整代码)

STC12C5A60S2单片机驱动DHT11和0.96寸OLED,手把手教你做个桌面温湿度计(附完整代码)

在智能家居和物联网应用中,温湿度监测是最基础的功能之一。本文将带你用STC12C5A60S2单片机和0.96寸OLED屏幕,配合DHT11温湿度传感器,打造一个实用又美观的桌面温湿度计。这个项目不仅适合51单片机初学者练手,也能为你的工作台增添科技感。

1. 硬件选型与准备

1.1 核心器件介绍

STC12C5A60S2单片机是STC12系列中的增强型51单片机,相比传统89C52有以下优势:

  • 工作频率更高(最高35MHz)
  • 内置60KB Flash和1280B RAM
  • 完全兼容传统51指令集
  • 支持ISP在线编程

DHT11温湿度传感器特性参数:

参数数值范围精度
温度测量范围0-50℃±2℃
湿度测量范围20-90%RH±5%RH
供电电压3.3-5.5V单总线通信

0.96寸OLED屏幕选用I2C接口版本,主要特点:

  • 分辨率:128×64
  • 驱动芯片:SSD1306
  • 可视角度:>160度
  • 无需背光,自发光
  • 超薄设计(仅0.96mm)

1.2 物料清单

  • STC12C5A60S2开发板 ×1
  • DHT11温湿度模块 ×1
  • 0.96寸OLED屏幕(I2C接口)×1
  • 面包板/洞洞板 ×1
  • 杜邦线若干
  • USB供电线 ×1

2. 硬件连接与电路设计

2.1 引脚分配方案

STC12引脚 外设连接 P1.1 DHT11数据线 P2.0 OLED_SCL P2.1 OLED_SDA VCC 5V供电 GND 共地

2.2 实际接线示意图

注意:DHT11和OLED都需要上拉电阻(4.7K-10K),如果模块已内置则可省略

[VCC]----[5V电源] | | | [4.7K] | | [DHT11] [OLED] | | [P1.1] [P2.0/P2.1] | [GND]----[共地]

2.3 供电方案选择

  • USB供电:最简便的方案,直接使用手机充电器
  • 电池供电:可选用3.7V锂电池+升压模块
  • 建议:初期开发使用USB供电,成品可考虑电池方案

3. 软件实现与代码解析

3.1 DHT11驱动实现

DHT11采用单总线协议,时序要求严格。以下是关键代码:

// DHT11起始信号 void DHT11_start() { DHT11_IO = 1; Delaynus(2); DHT11_IO = 0; Delaynms(20); DHT11_IO = 1; Delaynus(13); } // 接收一个字节 unsigned char DHT11_rec_byte() { unsigned char i, dat = 0; for(i=0; i<8; i++) { while(!DHT11_IO); // 等待低电平结束 Delaynus(16); // 延时判断高低电平 dat <<= 1; if(DHT11_IO == 1) dat += 1; while(DHT11_IO); // 等待高电平结束 } return dat; }

调试技巧:用示波器观察时序波形,确保高低电平持续时间符合规格书要求

3.2 OLED显示驱动

OLED驱动主要包含初始化、清屏和显示函数:

// OLED初始化序列 void OLED_Init(void) { Delayms(50); Write_IIC_Command(0xAE); // 关闭显示 Write_IIC_Command(0x20); // 设置内存寻址模式 Write_IIC_Command(0x10); // 水平寻址模式 // ...更多初始化命令 Write_IIC_Command(0xAF); // 开启显示 } // 显示中文字符 void OLED_ShowCHinese(unsigned char x, unsigned char y, unsigned char no) { unsigned char t, adder=0; OLED_SetPos(x,y); for(t=0;t<16;t++) Write_IIC_Data(F16x16[2*no][t]); OLED_SetPos(x,y+1); for(t=0;t<16;t++) Write_IIC_Data(F16x16[2*no+1][t]); }

3.3 主程序逻辑

主程序实现数据采集与显示的完整流程:

void main() { Delaynms(1000); // 上电延时 OLED_Init(); // 屏幕初始化 OLED_CLEAR(); // 清屏 while(1) { DHT11_get_Data(); // 获取温湿度 // 显示温度 OLED_ShowCHinese(0,0,0); // "温" OLED_ShowCHinese(18,0,1); // "度" OLED_ShowNum(50,0,RH,2,15); // 显示湿度 OLED_ShowCHinese(0,3,2); // "湿" OLED_ShowCHinese(18,3,3); // "度" OLED_ShowNum(50,3,TH,2,15); Delaynms(1000); // 1秒刷新 } }

4. 项目优化与扩展

4.1 显示效果优化

界面布局建议

+---------------------+ | 温度: 25℃ | | | | 湿度: 60%RH | +---------------------+

可通过以下代码实现更美观的显示:

// 添加单位显示 OLED_ShowString(70, 0, "℃"); OLED_ShowString(70, 3, "%RH"); // 添加边框 OLED_DrawBMP(0, 0, 128, 8, border_top); OLED_DrawBMP(0, 56, 128, 64, border_bottom);

4.2 功能扩展建议

  1. 增加时间显示

    • 加入DS1302时钟模块
    • 在OLED上显示实时时间
  2. 数据记录功能

    • 添加SD卡模块
    • 定时记录温湿度数据
  3. 报警功能

    • 设置温湿度阈值
    • 超过阈值时蜂鸣器报警
  4. 无线传输

    • 加入ESP8266 WiFi模块
    • 将数据上传到物联网平台

4.3 常见问题解决

问题1:DHT11读取失败

  • 检查接线是否正确
  • 确保上拉电阻已接
  • 调整延时参数(不同单片机频率需微调)

问题2:OLED显示乱码

  • 确认字库数据正确
  • 检查初始化序列是否完整
  • 确保I2C时序符合规格

问题3:内存不足

  • 优化字库存储(只保留必要字符)
  • 使用STC12的扩展RAM
  • 启用内存压缩选项(Keil中设置)

5. 完整工程代码获取

本项目的完整代码包含:

  • 主程序框架
  • DHT11驱动
  • OLED显示驱动
  • 字库文件
  • 延时函数库

代码已托管在GitHub,可通过以下链接获取: [项目仓库链接]

在实际调试中发现,DHT11对时序要求严格,建议首次使用时先用示波器验证波形。OLED显示部分,如果出现残影问题,可以尝试在清屏后增加短暂延时。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 19:47:18

OpenCV图像相减,用subtract()还是减号‘-’?一个例子讲透区别与选择

OpenCV图像相减&#xff1a;subtract()与减号运算符的深度抉择指南 在图像处理项目中遇到矩阵相减需求时&#xff0c;许多开发者会不假思索地选择最简短的语法形式。但OpenCV提供的两种减法实现方式——cv::subtract()函数与减号运算符&#xff0c;在看似相同的计算结果背后&am…

作者头像 李华
网站建设 2026/5/14 19:46:35

RK3588-Camera:MIPI-CSI调试之链路配置与实战

1. RK3588与MIPI-CSI基础认知 第一次拿到RK3588开发板准备调试摄像头时&#xff0c;看着密密麻麻的接口定义&#xff0c;确实有点发懵。这块国产旗舰芯片的影像处理能力确实强悍&#xff0c;但要把摄像头数据完整送到ISP处理&#xff0c;得先搞清楚MIPI-CSI这个"快递通道&…

作者头像 李华
网站建设 2026/5/14 19:46:32

Advanced Python Mastery跨平台开发:Windows与Linux兼容性终极指南

Advanced Python Mastery跨平台开发&#xff1a;Windows与Linux兼容性终极指南 【免费下载链接】python-mastery Advanced Python Mastery (course by dabeaz) 项目地址: https://gitcode.com/gh_mirrors/py/python-mastery Advanced Python Mastery是由dabeaz创建的高级…

作者头像 李华
网站建设 2026/5/14 19:38:07

使用OpenClaw连接Taotoken配置Agent工作流的详细步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用OpenClaw连接Taotoken配置Agent工作流的详细步骤 对于希望使用OpenClaw构建AI Agent的开发者而言&#xff0c;一个核心步骤是配…

作者头像 李华
网站建设 2026/5/14 19:27:36

如何彻底告别网盘限速:九大平台直链解析的终极解决方案

如何彻底告别网盘限速&#xff1a;九大平台直链解析的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

作者头像 李华