news 2026/3/31 18:58:40

51单片机温度报警器:从C程序到Proteus仿真全记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
51单片机温度报警器:从C程序到Proteus仿真全记录

51单片机温度报警器C程序、proteus仿真、报告 支持按键设置上下限温度值、当实际温度不在上下限温度值之间时、蜂鸣器报警

最近玩了玩51单片机,做了个温度报警器,觉得还挺有意思,来和大家分享下整个过程,包括C程序代码、Proteus仿真以及一些小总结。

1. 功能需求

这个温度报警器要实现支持按键设置上下限温度值,当实际温度不在设定的上下限温度值之间时,蜂鸣器就开始报警。

2. C程序代码

#include <reg51.h> // 定义按键和蜂鸣器端口 sbit key1 = P1^0; sbit key2 = P1^1; sbit key3 = P1^2; sbit beep = P2^0; // 定义温度上下限变量 unsigned char low_temp = 20; unsigned char high_temp = 30; // 模拟获取温度的函数(实际应用中应连接温度传感器) unsigned char get_temp() { // 这里简单返回一个固定值模拟,实际要从传感器读取 return 25; } void delay(unsigned int time) { unsigned int i, j; for(i = 0; i < time; i++) for(j = 0; j < 1275; j++); } void main() { unsigned char temp; while(1) { // 检测按键1,按下则降低下限温度 if(key1 == 0) { delay(20); if(key1 == 0) { while(!key1); if(low_temp > 0) { low_temp--; } } } // 检测按键2,按下则升高上限温度 if(key2 == 0) { delay(20); if(key2 == 0) { while(!key2); if(high_temp < 100) { high_temp++; } } } // 检测按键3,按下则恢复默认上下限温度 if(key3 == 0) { delay(20); if(key3 == 0) { while(!key3); low_temp = 20; high_temp = 30; } } temp = get_temp(); // 判断温度是否在上下限之间 if(temp < low_temp || temp > high_temp) { beep = 1; } else { beep = 0; } } }

代码分析

  • 端口定义
  • sbit key1 = P1^0;等语句定义了按键连接在P1端口的相应引脚,sbit beep = P2^0;定义蜂鸣器连接在P2.0引脚。这样方便后续对这些引脚进行操作。
  • 变量定义
  • unsigned char lowtemp = 20;unsigned char hightemp = 30;设定了温度上下限的初始值。这里使用unsigned char类型,因为温度值一般在0 - 255之间,用这个类型足够,还能节省内存。
  • 模拟获取温度函数
  • unsigned char get_temp()这个函数在实际应用中应该是从温度传感器读取温度值。这里简单返回一个固定值25来模拟。要是真接传感器,比如DS18B20,就得按照它的通信协议来读取数据了。
  • 按键检测部分
  • if(key1 == 0)为例,检测按键1是否按下。按下后先delay(20)进行消抖,防止按键抖动误触发。确认按下后,等待按键释放while(!key1);,然后对下限温度low_temp进行操作。同理,按键2和按键3分别处理上限温度和恢复默认温度。
  • 温度判断与报警
  • 获取到温度值temp = gettemp();后,通过if(temp < lowtemp || temp > high_temp)判断温度是否超出范围,超出就打开蜂鸣器beep = 1;,否则关闭beep = 0;

3. Proteus仿真

搭建电路

  • 在Proteus中,首先放置一个51单片机元件,按照代码中的定义连接按键到P1.0 - P1.2引脚,蜂鸣器连接到P2.0引脚。
  • 由于代码中是模拟获取温度,实际要是用传感器,就把对应的温度传感器元件放进来,比如DS18B20,按照其引脚功能连接好。这里为了简单,就先省略传感器部分。

运行仿真

  • 加载编译好的.hex文件到单片机中。
  • 点击运行按钮,就可以看到效果啦。按下按键1和按键2能分别调整上下限温度,当模拟的温度超出范围时,蜂鸣器就会响起。

4. 总结

通过这次实践,对51单片机的按键处理、端口操作以及简单的温度报警逻辑有了更深入的理解。从代码编写到Proteus仿真,一步步实现功能的过程很有成就感。当然,实际应用中还需要完善温度获取部分,比如连接真实的温度传感器并准确读取数据。希望这篇博文能给对51单片机感兴趣的小伙伴一些启发,大家一起交流学习呀。

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

巴菲特与全球市场的互动关系

巴菲特与全球市场的互动关系 关键词:巴菲特、全球市场、投资理念、价值投资、市场影响、互动机制、投资策略 摘要:本文深入探讨了巴菲特与全球市场的互动关系。从巴菲特独特的投资理念和策略出发,分析其投资行为如何对全球市场产生影响,同时全球市场的动态变化又怎样作用于…

作者头像 李华
网站建设 2026/3/27 19:40:57

32 RTC实时时钟-独立定时器

一、前言 1.RTC简介 RTC&#xff08;Real Time Clock&#xff0c;实时时钟&#xff09;&#xff0c;是一个掉电后仍然可以继续运行的独立定时器。 RTC模块拥有一个连续计数的计数器&#xff0c;在相应的软件配置下&#xff0c;可以提供时钟日历的功能。修改计数器的值可以重新…

作者头像 李华
网站建设 2026/3/31 3:42:07

自动驾驶之路径跟踪:Carsim/Simulink 联合仿真与运动学 MPC 算法实践

自动驾驶&#xff0c;carsim/simulink联合仿真&#xff0c;基于运动学mpc算法的圆形路径跟踪控制&#xff0c;配套视频详细讲解原理和代码。 需要自定义路径跟踪的&#xff0c;可以私或去主页自定义路径跟踪的程序。 carsim2019&#xff0c;matlab2018。在自动驾驶领域&#xf…

作者头像 李华
网站建设 2026/3/27 1:41:44

一份来自手机备忘录的AI元人文构想实录与宣言

一份来自手机备忘录的AI元人文构想实录与宣言引言&#xff1a;当哲学诞生于对话框一项名为“AI元人文构想”的思想实验&#xff0c;在过去三个月里&#xff0c;以一种前所未有的方式在数字世界生长。它不是诞生于学术期刊的严谨论述&#xff0c;也并非来自实验室的封闭推演。它…

作者头像 李华
网站建设 2026/3/15 5:50:18

手把手教你3KW双级微型光伏逆变器参考电路拓扑设计

手把手教你3KW双级微型光伏逆变器参考电路拓扑设计&#xff08;114&#xff09; 基于F28335&#xff0c;含PDF格式原理图和源代码&#xff0c;有AD格式的原理图和PCB设计图&#xff0c;效率大于97%&#xff1b;非常详细的方案 本装置DCDC采用Boost升压&#xff0c;DCAC采用单相…

作者头像 李华
网站建设 2026/3/30 9:35:21

SpringBoot + @RefreshScope:动态刷新配置的终极指南

一、为什么需要动态刷新配置&#xff1f;在传统Java应用中&#xff0c;修改配置文件后必须重启服务才能生效&#xff0c;这会导致&#xff1a;• 服务中断&#xff1a; 重启期间服务不可用• 状态丢失&#xff1a; 内存中的临时数据被清空• 运维复杂&#xff1a; 需要复杂的发…

作者头像 李华