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

news2024/9/24 5:30:03

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

演示视频

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

系统功能简介

1、实时温度测量,可调整温度值
2、显示测量的温度值,按键切换可查看高温和低温报警值
3、可通过按键输入报警最高值以及最低值,通过两个LED指示灯指示当前设置状态指示
4、当温度大于报警最高值或温度低于报警最低值时进行LED和蜂鸣器声光报警。

目录

1. 引言

2. 硬件电路设计

2.1 AT89C51 单片机

2.2 DS18B20 温度传感器

2.3 显示模块

2.4 报警模块

2.5 电路原理图

3. 软件设计

3.1 温度传感器初始化函数

3.2 读取 DS18B20 温度值

3.3 显示温度值

3.4 温度报警功能

3.5 按键扫描与处理

3.6 延时函数

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文库icon-default.png?t=N7T8https://download.csdn.net/download/m0_61712829/89623235

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1993478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8/8总结

1.三分 | 函数 虽然提示很明显了&#xff0c;但是还是没掌握套路&#xff0c;看了题解才会的&#xff0c;估计也有四分&#xff0c;就是三次方的形式。 例子&#xff1a; 2 1 2 0 0 2 2 0 0 2 -4 2AC: #include<bits/stdc.h> using namespace std; const int maxn1001…

动态规划(一)

目录 &#xff08;一&#xff09;递归到动规的一般转化方法 &#xff08;二&#xff09;动规解题的一般思路 1. 将原问题分解为子问题 2. 确定状态 3. 确定一些初始状态&#xff08;边界状态&#xff09;的值 4. 确定状态转移方程 &#xff08;三&#xff09;能用动规解…

【Android Studio】Webview 内核升级得三种方法

【Android Studio】Webview 内核升级得三种方法 前言X5 腾讯组件crosswalk开源项目webview升级加载的内核&#xff08;完美解决&#xff09;总结 前言 在APP 中进行网页加载&#xff0c;一般采用原生自带的Webview 组件&#xff0c;但在需要加载高版本网页的时候&#xff0c;有…

工业三防平板助力MES系统打造工厂移动式生产管理

随着工业4.0时代的到来&#xff0c;智能制造、数字化车间等概念层出不穷&#xff0c;生产过程的可视化管理也成为了企业提升效率、优化生产的关键。而工业三防平板&#xff0c;凭借其坚固耐用、功能强大、便携易用等特性&#xff0c;成为了实现生产过程可视化管理的重要利器&am…

SQL注入实例(sqli-labs/less-21)

与第20关无异&#xff0c;只多了一步base64加密 0、初始页面 1、确定闭合字符 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标

POS刷卡开发源码之语音播报-CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、终端语音提醒的好处 1. 增强信息传递的有效性&#xff1a;在人们忙碌或者注意力分散时&#xff0c;语音提醒能够直接穿透噪音和干扰&#xff0c;确保重要信息被准确接收。 2. 提高操作的便捷性&#xff1a;用户无需停下手中的工作去查看屏幕或阅读文字&#xff0c;直接通过…

算法——动态规划:0/1 背包问题

文章目录 一、问题描述二、解决方案1. DP 状态的设计2. 状态转移方程3. 算法复杂度4. 举例5. 实现6. 滚动数组6.1 两行实现6.2 单行实现6.3 优缺点 三、总结 一、问题描述 问题的抽象&#xff1a;给定 n n n 种物品和一个背包&#xff0c;第 i i i 个物品的体积为 c i c_i …

NET8中WebAPI使用JWT入门教程

目录 1、JWT2、具体实现3、代码下载 1、JWT 现在在各类API的开发中&#xff0c;token已经是必备了。例如&#xff1a;微信公众号开发中&#xff0c;第一个方法就是获取token。JWT具体的定义及组成部分大家可以到网上找找&#xff0c;这儿给一个简单的描述&#xff1a;JWT 令牌…

yaml语法+yaml配置文件

yaml语法 k:(空格)v > 表示一对键值对空格必须有 yaml拥有严格的空格缩进格式控制&#xff0c;以空格的缩进来控制层级关系&#xff1b;只要是左对齐的一列数据&#xff0c;都是同一个层级的 spring:thymeleaf:cache: true# 检查模板是否存在&#xff0c;然后再呈现check…

通义灵码-阿里云推出的AI智能编码助手

通义灵码体验地址 标题通义灵码是什么&#xff1f; 通义灵码是由阿里巴巴推出的基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云…

Bug 解决 | 前端无法正确请求后端接口并得到响应?

目录 1、配置问题 2、代码问题 3、网络问题 前端请求后端接口发现得到的响应不对&#xff0c;或者通过 f12 明明看到了后端的响应&#xff0c;但是前端页面无法正常的展示出来。 这种情况该怎么排查呢&#xff1f;这篇我们就来好好的理一理&#xff01; 1、配置问题 1&am…

浅谈取样器插件之jp@gc - UDP Request

浅谈取样器插件之jpgc - UDP Request JPgc - UDP Request允许用户在性能测试中发送UDP&#xff08;User Datagram Protocol&#xff09;数据包。这对于测试那些依赖UDP协议进行通信的应用程序和服务特别有用&#xff0c;比如某些物联网&#xff08;IoT&#xff09;设备、在线游…

我在高职教STM32——I2C通信入门(2)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助CSDN平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分…

QT输入组、QT显示组

目录 QT输入组 ​编辑 Combo Box&#xff08;下拉菜单部件&#xff09; Font Combo Box&#xff08;显示系统中可用的字体&#xff09; Line Edit&#xff08;行编辑器&#xff09; Text Edit&#xff08;文本编辑器&#xff09; Plain Text Edit&#xff08;纯文本编辑…

干货实操分享:6个禁用外来u盘的方法

禁用外来U盘是保护计算机系统和数据安全的重要措施之一。以下是六个禁用外来U盘的方法&#xff0c;旨在帮助您有效防止未经授权的U盘接入计算机&#xff1a; 1. 使用组策略编辑器&#xff08;Windows系统&#xff09; 步骤&#xff1a; 打开“运行”对话框&#xff0c;输入g…

Covalent(CXT)与Sei合作,为扩展以太坊应用提供数据解决方案

Covalent Network&#xff08;CXT&#xff09;是领先的模块化数据基础设施层&#xff0c;致力于解决长期数据可用性&#xff0c;并为 AI 提供可验证的结构化数据。目前 Covalent Network&#xff08;CXT&#xff09;已经与首个并行化 EVM 区块链——Sei 达成了新的合作&#xf…

cf 练习3

cf 955 div.2 D (二维前缀和 裴蜀定理) 设原本 有雪帽的点&#xff08;设为1&#xff09; 和 没有学帽&#xff08;设为0&#xff09;的点 差值为 dif 当边长为k的矩阵覆盖后 &#xff0c; 设矩阵中有x1个有雪帽的点和 x2个没有雪帽的点 &#xff0c;那么此时的dif 值 就会减…

【建议收藏】AI大模型学习资源大全,免费分享

前言 马斯克旗下的AI大模型企业xAI&#xff0c;官宣拿到巨额融资60亿美元。 估值冲向240亿美元&#xff08;约1304亿&#xff09;&#xff0c;一举跃升为AI大模型“最猛独角兽”&#xff01; 资本大佬Valor Equity Partners、红杉资本、国王控股、沙特王子-Bin Talal、Vy Cap…

同态加密和SEAL库的介绍(四)CKKS 方案

写在前面&#xff1a; 上篇介绍了 BFV 的 Batch Encoder&#xff0c;其虽然充分利用了槽空间&#xff0c;但是每个槽只包含一个模 plain_modulus 的整数&#xff0c;除非 plain_modulus 非常大&#xff0c;否则我们可能会很快遇到数据类型溢出并在需要进行整数计算时得到意外的…

【Docker安装】Ubuntu系统下离线部署Docker环境教程

【Docker安装】Ubuntu系统下离线部署Docker环境教程 前言一、本次实践介绍1.1 本次实践规划1.2 本次实践简介二、检查本地环境2.1 检查操作系统版本2.2 检查内核版本2.3 更新软件源三、卸载Docker四、下载安装包4.1 创建目录4.2 官网下载五、部署Docker环境5.1 解压安装包5.2 复…