基于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软件(内附安装包)实现程序设计,主程序如下所示。

cs 复制代码
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、资料获取

相关推荐
缘来是你远去是我1 小时前
ZYNQ 系列芯片中断机制详解:类型、处理过程与中断处理函数
单片机·嵌入式硬件
Zw-awa1 小时前
两根线怎么挂住一堆设备:I2C 协议原理
stm32
LCG米3 小时前
STM32 定时器主从模式输出精确脉冲数实测:TRGO 触发链拆解、多发一脉冲根因与干净停止时序落地
stm32·单片机·嵌入式硬件·嵌入式
青梅味猪大肠3 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
FakeOccupational3 小时前
【电路笔记 STM32】RTC配置:晶振选择+闹钟Configuration+中断设置
笔记·stm32·实时音视频
ChaseVLSI3 小时前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
东莞市壹星自动化设备有限公司3 小时前
透明圆瓶内部特征怎样定位:折射追踪与近远相位分支
嵌入式硬件·自动化·需求分析·几何学·骨骼绑定
Dev_XH3 小时前
【成品设计】基于物联网的配电箱智能防护系统设计
stm32·单片机·嵌入式硬件·物联网
Dev_XH5 小时前
【成品设计】基于单片机的工厂设备能耗监控与优化系统
stm32·单片机·嵌入式硬件·物联网