04-51_NTC温度检测_OLED
基于51单片机的NTC热敏电阻温度检测系统
ADC采集 · NTC查表转换 · OLED显示
一、项目简介
本项目基于STC89C52单片机,使用NTC负温度系数热敏电阻作为温度传感元件,通过ADC采集模拟电压值,再利用查表法将ADC值转换为实际温度。温度数据显示在0.96寸OLED屏幕上。
NTC热敏电阻的阻值随温度升高而降低,与固定电阻组成分压电路,分压输出接入ADC。单片机读取ADC值后,通过预存的温度-阻值对照表(查表法)进行线性插值,得到精确温度值。相比DS18B20等数字传感器,NTC方案成本更低、响应更快,但需要标定和查表处理。
项目属性 | 说明 |
主控平台 | STC89C52 |
开发语言 | C语言 |
开发环境 | Keil C51 / Keil MDK |
仿真工具 | Proteus(部分项目) |
图1-1 系统整体效果图
二、系统总体架构
本系统以单片机为核心,外围连接传感器、显示模块、按键模块和执行机构。系统总体架构如下:单片机通过相应接口与各外设通信,采集传感器数据后进行处理,结果输出至显示模块,同时根据逻辑控制执行机构动作。
图2-1 系统总体架构框图
模块 | 功能描述 |
主控模块 | 系统核心,负责数据采集、逻辑处理和输出控制 |
传感器模块 | 采集环境参数(温度/光照/按键输入等) |
显示模块 | LCD1602/OLED实时显示数据和状态 |
按键模块 | 用户输入,参数调整和模式切换 |
执行机构 | 蜂鸣器/LED/电机等,执行报警和驱动动作 |
三、硬件设计
3.1 核心器件选型
器件 | 型号 | 说明 |
主控芯片 | STC89C52 | 8位51内核 |
温度传感器 | NTC热敏电阻 | 10K负温度系数,B值3950 |
ADC芯片 | ADC0832 | 8位逐次逼近型ADC,SPI接口 |
显示屏 | 0.96寸OLED | SSD1306驱动,I2C接口,128×64 |
分压电阻 | 10KΩ精密电阻 | 与NTC组成分压电路 |
图3-1 核心器件实物图
3.2 引脚分配
单片机各引脚分配如下表所示,在设计时需注意引脚复用和电平匹配问题:
引脚 | 连接 | 功能描述 |
P1.0 | ADC_CLK | ADC0832时钟 |
P1.1 | ADC_DO | ADC0832数据输出 |
P1.2 | ADC_DI | ADC0832数据输入 |
P1.3 | ADC_CS | ADC0832片选 |
P1.4/P1.5 | SCL/SDA | OLED I2C通信 |
P1.6 | NTC_ADC | NTC分压输出接入ADC通道0 |
图3-2 引脚分配电路原理图
四、软件设计
4.1 软件流程
主循环中,单片机通过SPI接口读取ADC0832的转换值(0~255),对应NTC分压电压。根据ADC值在预存的温度查表数组中查找对应温度区间,进行线性插值计算精确温度。将温度值格式化为"Temp: XX.X C"显示在OLED屏幕上。采集间隔200ms。
图4-1 主程序流程图
4.2 模块划分
源文件 | 模块名称 | 功能描述 |
adc0832.c | ADC驱动 | SPI通信、ADC值读取 |
ntc_table.c | 温度查表 | ADC值→温度值转换,线性插值 |
oled.c | OLED驱动 | SSD1306初始化、字符显示 |
main.c | 主程序 | ADC采集、温度转换、OLED显示 |
4.3 关键代码
以下代码均从项目工程源文件中直接提取,完整展示了各模块的核心实现:
📄 main.c


📄 oled.c




📄 Timer0.c


📄 Delay.c

五、项目文件结构
项目工程的目录结构如下,展示了源代码文件的组织方式:

六、功能演示
系统功能演示步骤如下:
1. 上电后OLED显示当前环境温度"Temp: 25.3 C"
2. 用手捏住NTC热敏电阻,温度逐渐上升
3. 松开后温度缓慢回落至室温
4. 测温范围-20~+100℃,精度±1℃
图6-1 功能演示照片/截图
图6-2 运行状态特写
七、总结
本项目展示了NTC热敏电阻测温的完整方案,包括ADC采集、查表转换、OLED显示三个核心环节。查表法避免了复杂的对数运算,在8位单片机上也能实现快速温度计算。该方案成本低、易于实现,适合对成本敏感的温度检测应用。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
— END —

浙公网安备 33010602011771号