news 2026/11/6 1:49:49

基于STM32F103C8T6的温度报警器设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32F103C8T6的温度报警器设计

目录

1、前言

2、主要功能

3、源程序

4、原理图和PCB图

PDF原理图

PCB顶层和底层图

5、实物图

6、设计报告

7、资料清单

8、资料获取


1、前言

该设计是一种基于STM32单片机的温度检测报警器。在硬件方面主要采用STM32F103C8T6作为主控核心,结合数字温度传感器DS18B20,此传感器读取被测量温度值并进行转换,将转换后的数据送到单片机处理,再通过LCD1602显示出来。同时,手动设置温度的上下限值,当实时温度超出时,对应的工作指示灯亮,蜂鸣器报警。

2、主要功能

a.通过LCD1602显示当前温度值,温度测量范围:0-99摄氏度。

b.通过独立按键设置温度上下限值,第一次按下设置键设置温度下限值,第二次按下设置键设置温度上限值,再按加减键就可以修改温度值。

c.当温度低于下限或高于上限温度时,蜂鸣器和LED灯同时报警。

3、源程序

Keil5 MDK是ARM旗下面向Cortex-M系列单片机的嵌入式集成开发环境,也是STM32、GD32等单片机开发中最常用的软件工具。该软件集成UVision5编辑器、ARM C/C++编译器、调试组件,支持C语言与汇编语言程序开发,可完成代码编写、工程管理、编译链接、在线仿真与程序烧录等全套开发工作。MDK5采用软件包管理机制,主程序独立于芯片支持包,用户可按需安装对应器件支持库,适配不同型号单片机。软件兼容ST-LINK、J-LINK等调试器,具备断点调试、寄存器查看、内存观测等调试功能,同时内置CMSIS标准库、RTX实时操作系统及各类中间件。MDK5拥有免费Lite版本,适合课程实验与毕业设计,是嵌入式学习、电子竞赛和小型单片机项目开发的主流平台。

本设计采用keil5 MDK软件(内附安装包)实现程序设计,主程序如下所示。

int main(void) { short temp_raw; int temp_x10; //真实温度 ×10,整数,用于带小数比较 int temp_int; uchar temp_dec; delay_init(); GPIO_ALL_Init(); delay_ms(30); //上电等待LCD供电稳定 lcd1602_init(); while(1) { KEY_Scan(); tick_blink++; if(Mode != 0) { if(tick_blink >= 2) //设置模式闪烁速度,可修改数字 { tick_blink = 0; blink_en = !blink_en; } } else { if(tick_blink >= 8) { tick_blink = 0; blink_en = !blink_en; } } temp_raw=DS18B20_Get_Temp(); if(temp_raw == -999) { lcd_setpos(0,0); write_1602dat('T'); write_1602dat('e'); write_1602dat('m'); write_1602dat('p'); write_1602dat(':'); write_1602dat('E'); write_1602dat('r'); write_1602dat('r'); write_1602dat('o'); write_1602dat('r'); GPIO_ResetBits(BEEP_PORT,BEEP_PIN); GPIO_ResetBits(LED_RED_PORT,LED_RED_PIN); GPIO_ResetBits(LED_GREEN_PORT,LED_GREEN_PIN); tick_beep = 0; beep_state = 0; } else { // DS18B20分辨率0.0625℃,×10 放大 temp_x10 = (temp_raw * 10)/16; temp_int = temp_x10 / 10; temp_dec = temp_x10 % 10; if(temp_dec<0) temp_dec = (uchar)(-temp_dec); //第一行显示 Temp:xx.x°C lcd_setpos(0,0); write_1602dat('T'); lcd_setpos(1,0); write_1602dat('e'); lcd_setpos(2,0); write_1602dat('m'); lcd_setpos(3,0); write_1602dat('p'); lcd_setpos(4,0); write_1602dat(':'); if(temp_int < 0) { lcd_setpos(5,0); write_1602dat('-'); lcd_shownum(6,0,(uint)(-temp_int),2); } else { lcd_setpos(5,0); write_1602dat(' '); lcd_shownum(6,0,(uint)temp_int,2); } lcd_setpos(8,0); write_1602dat('.'); lcd_shownum(9,0,temp_dec,1); lcd_setpos(10,0); write_1602dat(0xDF); lcd_setpos(11,0); write_1602dat('C'); //========带小数完整比较 temp_x10 和 TH_x10、TL_x10======== if(temp_x10 > TH_x10) { //高于上限(包含小数)红灯+滴滴 GPIO_SetBits(LED_RED_PORT,LED_RED_PIN); GPIO_ResetBits(LED_GREEN_PORT,LED_GREEN_PIN); if(key_tone_en == 0) { tick_beep++; if(beep_state == 0) { GPIO_SetBits(BEEP_PORT,BEEP_PIN); if(tick_beep >= BEEP_ON_CNT){tick_beep=0;beep_state=1;} } else { GPIO_ResetBits(BEEP_PORT,BEEP_PIN); if(tick_beep >= BEEP_OFF_CNT){tick_beep=0;beep_state=0;} } } } else if(temp_x10 < TL_x10) { //低于下限(包含小数)绿灯+滴滴 GPIO_ResetBits(LED_RED_PORT,LED_RED_PIN); GPIO_SetBits(LED_GREEN_PORT,LED_GREEN_PIN); if(key_tone_en == 0) { tick_beep++; if(beep_state == 0) { GPIO_SetBits(BEEP_PORT,BEEP_PIN); if(tick_beep >= BEEP_ON_CNT){tick_beep=0;beep_state=1;} } else { GPIO_ResetBits(BEEP_PORT,BEEP_PIN); if(tick_beep >= BEEP_OFF_CNT){tick_beep=0;beep_state=0;} } } } else { //温度正常区间 if(key_tone_en == 0) { GPIO_ResetBits(BEEP_PORT,BEEP_PIN); } GPIO_ResetBits(LED_RED_PORT,LED_RED_PIN); GPIO_ResetBits(LED_GREEN_PORT,LED_GREEN_PIN); tick_beep = 0; beep_state = 0; } } //第二行:TL、TH只显示整数部分(按键是±1℃) { int TL_show = TL_x10 /10; int TH_show = TH_x10 /10; lcd_setpos(0,1); write_1602dat('T'); lcd_setpos(1,1); write_1602dat('L'); lcd_setpos(2,1); write_1602dat(':'); if(Mode == 1) lcd_shownum_blink(3,1,TL_show,2,blink_en); else lcd_shownum(3,1,(uint)TL_show,2); lcd_setpos(5,1); write_1602dat(0xDF); lcd_setpos(6,1); write_1602dat('C'); lcd_setpos(7,1); write_1602dat(' '); lcd_setpos(8,1); write_1602dat('T'); lcd_setpos(9,1); write_1602dat('H'); lcd_setpos(10,1); write_1602dat(':'); if(Mode == 2) lcd_shownum_blink(11,1,TH_show,2,blink_en); else lcd_shownum(11,1,(uint)TH_show,2); lcd_setpos(13,1); write_1602dat(0xDF); lcd_setpos(14,1); write_1602dat('C'); } delay_ms(120); } }

4、原理图和PCB图

Altium Designer 是一款功能强大的电子设计自动化软件,由Altium公司开发,广泛应用于印刷电路板PCB设计、硬件系统开发及嵌入式系统集成领域。作为业界领先的一体化设计平台,它集成了原理图设计、PCB布局、3D建模、信号完整性分析、仿真验证等核心功能,为工程师提供从概念设计到产品落地的全流程解决方案。其直观的用户界面和智能化工具链,显著提升了复杂电子系统设计的效率与可靠性。

Altium Designer 支持多层原理图设计,可通过动态交叉探测功能实现原理图与PCB布局的实时联动,确保设计一致性。其PCB编辑器内置实时设计规则检查DRC,能自动检测布线冲突、间距违规等问题,大幅减少人工校核时间。3D可视化功能允许工程师在虚拟环境中预览PCB与机械外壳的装配关系,避免物理原型阶段的兼容性问题。此外,软件提供丰富的元器件库管理工具,支持与主流供应链平台的数据同步,简化物料采购流程。

该设计原理图和PCB是通过Altium Designer软件设计的,仅提供PDF原理图和PCB顶层/底层图片!!!

PDF原理图

PCB顶层和底层图

5、实物图

6、设计报告

设计报告主要包括硬件电路设计、软件设计等等,仅供参考

7、资料清单

设计资料主要包括源程序+PDF原理图+PCB图+设计报告+使用说明+元件清单+实物演示视频+软件安装包

8、资料获取

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

Zed官宣:支持Python Pyrefly,速度起飞

Zed 作为用 Rust 写的原生编辑器&#xff0c;一直以来的卖点就是“快得让人头皮发麻”。现在&#xff0c;他们觉得光编辑器快还不够&#xff0c;连写 Python 的那个“语言服务器&#xff08;LSP&#xff09;”也得换成超跑级别的。 Zed 已经把 Pyrefly 这个由 Meta 打造的、用 …

作者头像 李华
网站建设 2026/11/6 1:48:05

TSMaster中如何自定义27服务的安全算法?

第一找到下面这个文件然后用Visual Studio 2022打开红色框是要实现的算法&#xff08;可自定义&#xff09;&#xff0c;然后点击本地Window调试器&#xff0c;生成dll文件即可。注意&#xff1a;如果生成的文件是下面是文本文件&#xff08;.log&#xff09;&#xff0c;并不是…

作者头像 李华
网站建设 2026/11/6 1:46:01

AD20常见问题

过孔中心不捕获移动过孔不拖拽线 把过孔全部删了, 再放置一个AD自带的过孔&#xff0c;改下孔径 线要连到过孔正中心 PCB封装太大 在离远点很远的地方有机械层 飞线无法隐藏 重新导入一遍规则

作者头像 李华