基于51单片机温度测量系统

基于51单片机温度测量系统

主要内容

本设计主要内容包括DS18B20数字温度传感器的接口连接、温度数据的读取、温度数据的显示以及超温报警功能的实现。

系统框架

系统主要由以下几部分组成:

  1. 温度传感器模块(DS18B20)
  2. 显示模块(4位LED数码管)
  3. 报警模块(蜂鸣器)
  4. 主控模块(51单片机)
  5. 按键控制模块(四个独立按键)

原理

(1)温度传感器模块(DS18B20)

简介:DS18B20是一款高精度的单总线数字温度传感器,广泛用于工业、家电、医疗设备等领域。它具有精度高、响应速度快、稳定性好等特点。

主要特点

测量范围:-55℃到+125℃,精度为±0.5℃。
分辨率:可编程为9到12位。
通信方式:单总线(One-Wire)通信,仅需一个数据线即可实现与微控制器的通信。
电源电压:3.0V至5.5V。
独特ID:每个DS18B20都有一个唯一的64位序列号,便于多点数据采集。
应用领域:HVAC(供暖、通风与空调)系统、冷链物流监控、温度控制系统
接线方法:

  • VCC:连接到3.0V-5.5V电源。
  • GND:接地。
  • DQ:数据线,连接到单片机的I/O口,需外接一个4.7kΩ上拉电阻。
(2) 显示模块(4位LED数码管)

**简介:**4位LED数码管模块用于显示数据,广泛用于电子时钟、计数器、温度显示等领域。

主要特点

显示内容:4位数码管可以显示0-9的数字以及部分字母。
驱动方式:通常采用共阳极或共阴极方式,需外接电阻限流。
接口方式:通过8个I/O口与单片机连接,分别控制每一位的显示。
亮度控制:可通过PWM调节亮度。
应用领域:电子时钟、温度显示器、计数器
接线方法:公共端:接正极(共阳)或负极(共阴)。
段选引脚:连接到单片机的I/O口,控制各段的点亮。

(3) 报警模块(蜂鸣器)

**简介:**蜂鸣器是一种发声器件,用于报警提示,分为有源蜂鸣器和无源蜂鸣器两种。

主要特点:

工作电压:通常为3V-12V。
发声原理:通过内部震动片震动发声,有源蜂鸣器内置驱动电路,无源蜂鸣器需外接驱动电路。
控制方式:通过单片机I/O口高低电平控制发声。
应用领域:安全报警系统、家电提示音、计时器
接线方法

  • 有源蜂鸣器:
    • 正极:连接到电源正极或单片机I/O口。
    • 负极:接地。
  • 无源蜂鸣器:
    • 一端:连接到单片机I/O口。
    • 另一端:接地。
(4) 主控模块(51单片机)

简介:51单片机是一种经典的微控制器,具有成本低、开发方便、资源丰富等优点,广泛用于各种电子产品中。

主要特点:

内核:8位处理器,通常为8051或其改进型。
存储器:4KB-64KB程序存储器,128B-256B数据存储器。
I/O口:多达32个I/O口,可扩展更多I/O。
外设:内置定时器、串口、ADC、PWM等功能模块。
开发工具:支持多种开发工具和仿真器,易于调试。
应用领域:家电控制、工业自动化、智能家居
接线方法:电源:VCC连接到5V电源,GND接地。
I/O口:根据需要连接到传感器、显示器、蜂鸣器等外设。

硬件电路设计

1、晶振电路由一个晶振(X1)和两个电容(C1和C2)组成。这部分电路用于提供单片机(U1)所需的时钟信号。晶振的两端连接到XTAL1和XTAL2引脚,而电容则分别接地,稳定时钟信号

2、DS18B20是一种数字温度传感器,它通过单总线(1-Wire)协议与微控制器通信。通常,它的信号引脚会连接到单片机的P3.7口,通过拉高电平启动传感器并读取温度数据。

3、蜂鸣器(BUZ1)通过一个NPN三极管(Q1)控制。当单片机输出高电平信号到R1电阻时,三极管导通,蜂鸣器发声。蜂鸣器通常用于报警或提示音。

3、LED显示屏数码管通过多个引脚(A, B, C, D, E, F, G, DP)与单片机相连,每个引脚控制一个段。数码管的显示内容由单片机控制,常用于显示数字信息,如时间、温度等。

4、独立按键每个按键连接到一个单片机的IO口。按键用于用户输入,比如调整显示的内容或控制某些功能。当按键按下时,相关的IO口电平会发生变化,单片机检测到这个变化后执行相应的程序。

BTN1:手动报警
BTN2:手动取消报警
BTN3:设置温度阈值1
BTN4:设置温度阈值2

软件设计

在这里插入图片描述
main函数

#include "public.h"
#include "ds18b20.h"
#include "smg.h"
#include "key.h"

// 定义蜂鸣器引脚
sbit BEEP = P2^5;


void main()
{
    int temp_t = 31; // 温度报警阈值
    u8 key = 0;
    u8 i = 0; // 计数器
    int temp_value; // 存储温度值
    u8 temp_buf[5]; // 数码管显示的段码数组
    u16 j; // 用于蜂鸣器循环计数

    ds18b20_init(); // 初始化DS18B20温度传感器

    while (1) {
        i++; // 计数器递增
        // 每隔50次循环读取一次温度值
        if (i % 50 == 0) {            
            temp_value = ds18b20_read_temperture() * 10; // 读取温度值并扩大10倍,保留一位小数
            // 处理负温度
            if (temp_value < 0) {
                temp_value = -temp_value; // 取绝对值
                temp_buf[0] = 0x40; // 设置显示负号
            } else {
                temp_buf[0] = 0x00; // 不显示负号
            }

            // 将温度值转换为数码管显示的段码
            temp_buf[1] = gsmg_code[temp_value / 1000]; // 百位
            temp_buf[2] = gsmg_code[temp_value % 1000 / 100]; // 十位
            temp_buf[3] = gsmg_code[temp_value % 1000 % 100 / 10] | 0x80; // 个位 + 小数点
            temp_buf[4] = gsmg_code[temp_value % 1000 % 100 % 10]; // 小数点后一位

            smg_display(temp_buf, 4); // 在数码管上显示温度

            // 如果温度超过指定范围,触发蜂鸣器
            if (temp_value / 10 > temp_t) {
                j = 200; // 初始化循环计数器
                while (j--) { // 循环200次
                    BEEP = !BEEP; // 产生一定频率的脉冲信号
                    delay_10us(50); // 延时
                }
            }
        }

        // 按键扫描与处理
        key = key_scan(0);    
        switch (key) {
            case 0:
                break;
            case 1: // 手动报警
                j = 200; // 初始化循环计数器
                while (j--) { // 循环2000次
                    BEEP = !BEEP; // 产生一定频率的脉冲信号
					smg_display(temp_buf, 4);
                    delay_10us(100); // 延时
                }
                break;
            case 2: // 取消报警
				 temp_t = 999;
                break;
            case 3: // 设置阈值1
                temp_t = 32;
                break;
            case 4: // 设置阈值2
                temp_t = 27;
                break;
        }
    }
}

程序设计思路

(1)系统初始化:初始化51单片机的各个功能模块,包括I/O口、定时器、中断等。
(2)温度数据读取:初始化DS18B20温度传感器。定时读取温度数据,并将数据保存在变量中。
(3)数据处理与显示:对读取到的温度数据进行处理,如转换为摄氏度。将处理后的温度数据通过4位LED数码管显示出来。
(4)报警功能:设置温度阈值,当温度超过阈值时,蜂鸣器发出报警声。提供手动报警和手动取消报警功能,通过按钮控制。

系统实现

(1)温度测量:使用C51单片机的IO口与DS18B20连接,通过单总线协议读取温度值。C语言编写的驱动程序将定期读取传感器的数据并进行处理。
(2)温度显示:将读取到的温度值转换为可以在数码管上显示的格式。单片机通过控制数码管的段码和位码,使温度值准确地显示在数码管上。
(3)用户输入控制:按键的检测采用定时扫描方式,避免按键抖动。根据按键的不同,可以实现功能选择和参数调整,比如设置报警温度阈值。
(4)温度报警:设定一个温度阈值,当检测到温度超过此阈值时,单片机输出高电平信号驱动蜂鸣器报警。用户可以通过按键设置和调整此阈值。
在这里插入图片描述

总结

本设计基于51单片机,实现了DS18B20温度传感器测温系统。系统通过DS18B20传感器读取环境温度,并将温度数据通过4位LED数码管显示出来。为了确保系统的实用性和安全性,当温度超过设定的阈值时,系统会通过蜂鸣器发出报警信号。

  • 34
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值