【51单片机仿真】基于51单片机设计的温度检测与高低温报警系统仿真&源码&设计文档&演示视频——文末资料下载

基于51单片机设计的温度检测与高低温报警系统仿真设计

演示视频

基于51单片机设计的温度检测与高低温报警系统仿真

系统功能简介

1、实时温度测量,可调整温度值

2、显示测量的温度值,按键切换可查看高温和低温报警值

3、可通过按键输入报警最高值以及最低值,通过两个LED指示灯指示当前设置状态指示

4、当温度大于报警最高值或温度低于报警最低值时进行LED和蜂鸣器声光报警。

目录

[1. 引言](#1. 引言)

[2. 硬件电路设计](#2. 硬件电路设计)

[2.1 AT89C51 单片机](#2.1 AT89C51 单片机)

[2.2 DS18B20 温度传感器](#2.2 DS18B20 温度传感器)

[2.3 显示模块](#2.3 显示模块)

[2.4 报警模块](#2.4 报警模块)

[2.5 电路原理图](#2.5 电路原理图)

[3. 软件设计](#3. 软件设计)

[3.1 温度传感器初始化函数](#3.1 温度传感器初始化函数)

[3.2 读取 DS18B20 温度值](#3.2 读取 DS18B20 温度值)

[3.3 显示温度值](#3.3 显示温度值)

[3.4 温度报警功能](#3.4 温度报警功能)

[3.5 按键扫描与处理](#3.5 按键扫描与处理)

[3.6 延时函数](#3.6 延时函数)

[3.7 主程序](#3.7 主程序)

仿真&源码等系统完整资料下载链接


1. 引言

温度监测在工业和日常生活中有广泛的应用,特别是在冷链运输、仓库管理等对温度要求严格的场合。本系统利用DS18B20温度传感器和AT89C51单片机,实现了实时温度监测及超限报警功能。本文将详细描述硬件电路设计和各个功能模块的程序设计。

2. 硬件电路设计

2.1 AT89C51 单片机

AT89C51 是一个功能强大的 8 位单片机,具有丰富的 I/O 端口和外围设备接口。在本系统中,AT89C51 用于读取温度传感器的数据、显示温度并控制报警装置。

2.2 DS18B20 温度传感器

DS18B20 是一种数字温度传感器,具有高精度和易于使用的特点。它通过单总线与单片机连接,能够提供精确的温度读数。

2.3 显示模块

本系统采用 LED 显示器显示温度值。通过多路复用技术,使用少量的 I/O 端口实现对多个数码管的控制。

2.4 报警模块

报警模块包括 LED 指示灯和蜂鸣器。当温度超过设定的高温或低温报警值时,LED 灯闪烁,蜂鸣器发出警报声。

2.5 电路原理图

电路原理图如下所示:

  • AT89C51 单片机连接 DS18B20 传感器
  • 数码管通过 P0 端口连接显示模块
  • LED 指示灯和蜂鸣器分别连接 P1.6 和 P1.7 端口
  • 按键通过 P1 端口连接,用于温度设置

3. 软件设计

3.1 温度传感器初始化函数

初始化 DS18B20 温度传感器,确保其进入工作状态。

void Init_DS18B20(void) {
    unsigned char x = 0;
    DQ = 1;
    Delay_DS18B20(8);
    DQ = 0;
    Delay_DS18B20(80);
    DQ = 1;
    Delay_DS18B20(14);
    x = DQ;
    Delay_DS18B20(20);
}

3.2 读取 DS18B20 温度值

读取 DS18B20 传感器的温度数据,并进行相应的转换。

unsigned int ReadTemperature(void) {
    unsigned char a, b;
    int t = 0;
    float tt = 0.0;

    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0x44);
    Init_DS18B20();
    WriteOneChar(0xCC);
    WriteOneChar(0xBE);

    a = ReadOneChar();
    b = ReadOneChar();
    t = b;
    t <<= 8;
    t |= a;
    tt = t * 0.0625 * 10;
    tt += 0.05;
    return (unsigned int)tt;
}

3.3 显示温度值

将读取到的温度值显示在 LED 显示器上。

void Disp_Temperature(void) {
    P0 = ~0x98;
    P2 = 0x7F;
    Delay(100);
    P2 = 0xff;

    P0 = ~LEDData[n];
    P2 = 0xDF;
    Delay(100);
    P2 = 0xff;

    P0 = ~LEDData[m % 10];
    DIAN = 0;
    P2 = 0xF7;
    Delay(100);
    P2 = 0xff;

    P0 = ~LEDData[m / 10];
    P2 = 0xFD;
    Delay(100);
    P2 = 0xff;
}

3.4 温度报警功能

当温度超出设定的高温或低温阈值时,触发报警装置。

void check_wendu(void) {
    char tempStr[16];
    unsigned int c = ReadTemperature();
    if (c >= 0) {
        sprintf(tempStr, "%u.%u", c / 10, c % 10);
    } else {
        sprintf(tempStr, "-%u.%u", (unsigned int)(-c) / 10, (unsigned int)(-c) % 10);
    }
    LCD_DisplayString(tempStr);

    if(c >= gaowen || c <= diwen) {
        LED = 0;
        BEEP = 0;
    } else {
        LED = 1;
        BEEP = 1;
    }
}

3.5 按键扫描与处理

扫描按键状态并处理按键输入,用于温度设置和其他功能的实现。

void KeyScan() {
    static uchar keybuf[4] = {0xFF, 0xFF, 0xFF, 0xFF};
    uchar i;
    keybuf[0] = (keybuf[0] << 1) | KEY1;
    keybuf[1] = (keybuf[1] << 1) | KEY2;
    keybuf[2] = (keybuf[2] << 1) | KEY3;
    keybuf[3] = (keybuf[3] << 1) | KEY4;
    for(i = 0; i < 4; i++) {
        if(keybuf[i] == 0x00)
            keystr[i] = 0;
        else if(keybuf[i] == 0xFF)
            keystr[i] = 1;
    }
}

void KeyAction(uchar key) {
    switch(key) {
        case 0:
            if(display_mode == 0) {
                display_mode = 1;
                LED_SET_HIGHT = 0;
                LED_SET_LOW = 1;
            } else if(display_mode == 1) {
                display_mode = 2;
                LED_SET_HIGHT = 1;
                LED_SET_LOW = 0;
            } else {
                display_mode = 0;
                LED_SET_HIGHT = 1;
                LED_SET_LOW = 1;
            }
            break;
        case 1:
            gaowen++;
            break;
        case 2:
            diwen++;
            break;
        case 3:
            gaowen--;
            break;
        case 4:
            diwen--;
            break;
    }
}

3.6 延时函数

提供各种延时功能,用于在数据传输和显示刷新时控制时间。

void Delay(uint num) {
    while(--num);
}

void Delay_DS18B20(int num) {
    while(num--);
}

3.7 主程序

主程序中,初始化单片机、温度传感器和显示模块,进入主循环,实时读取温度值并根据设置的高温和低温报警值进行判断,控制显示和报警。

void main(void) {
    P1 = 0xFF;
    P2 = 0xFF;
    LED = 1;
    BEEP = 1;
    Disp_init();
    while(1) {
        KeyScan();
        check_wendu();
        switch(display_mode) {
            case 0:
                Disp_Temperature();
                break;
            case 1:
                Disp_Temperature_Set_Hight();
                break;
            case 2:
                Disp_Temperature_Set_Low();
                break;
        }
    }
}

仿真&源码等系统完整资料下载链接

基于51单片机设计的温度检测与高低温报警系统仿真&源码&设计文档&演示视频.zip(毕设/课设/竞赛/实训/大作业/项目开发)资源-CSDN文库https://download.csdn.net/download/m0_61712829/89623235

相关推荐
yutian06067 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程10 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉14 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名67714 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式大圣14 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室15 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费15 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_3975623117 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
liyinuo201717 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
艺术家天选17 小时前
STM32点亮LED灯
stm32·单片机·嵌入式硬件