当前位置: 首页 > news >正文

【51单片机】【protues仿真】基于51单片机数码管温度报警器系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能1、数码管显示

2、按键设置阈值​
3、温度高于上限或低于下限声光警报

二、使用步骤

51单片机数码管温度报警器系统是一种基于8051架构微控制器的环境监测装置,通过温度传感器采集数据并在数码管上实时显示,通过通过独立按键(通常3个)调整上下限阈值,支持掉电保存功。当温度超限时,蜂鸣器鸣响且LED闪烁,部分设计联动风扇或加热器进行温度控制。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、温度传感器
4、蜂鸣器模块
5、指示灯模块
6、数码管显示模块

四、软件设计

#include <reg52.h>             //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义    变量范围0~255
#define uint  unsigned int     //无符号整型 宏定义    变量范围0~65535
#include "eeprom52.h"

//数码管段选定义      0     1    2    3    4    5    6     7      8       9    
uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
                       0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};     //断码
//数码管位选定义
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};    
uchar smg_i = 3;    //显示数码管的个位数
sbit dq   = P2^4;    //18b20 IO口的定义
sbit beep = P2^3;   //蜂鸣器IO口定义

bit flag_lj_en;         //按键连加使能
bit flag_lj_3_en;     //按键连3次连加后使能  加的数就越大了 
uchar key_time,flag_value;      //用做连加的中间变量
bit key_500ms  ;


uint temperature ;  //
bit flag_300ms ;
uchar menu_1;       //菜单设计的变量
uint t_high = 300,t_low = 100;       //温度上下限报警值 

/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
    uint i,j;
    for(i=0;i<q;i++)
        for(j=0;j<120;j++);
}

/***********************小延时函数*****************************/
void delay_uint(uint q)
{
    while(q--);
}


/***********************数码显示函数*****************************/
void display()
{
    static uchar i;   
    i++;
    if(i >= smg_i)
        i = 0;    
    P1 = 0xff;             //消隐 
    P3 = smg_we[i];              //位选
    P1 = dis_smg[i];         //段选            

}

/******************把数据保存到单片机内部eepom中******************/
void write_eeprom()
{
    SectorErase(0x2000);
    byte_write(0x2000, t_high % 256);
    byte_write(0x2001, t_high / 256);
    byte_write(0x2002, t_low % 256);
    byte_write(0x2003, t_low / 256);
    byte_write(0x2055, a_a);    
}

/******************把数据从单片机内部eepom中读出来*****************/
void read_eeprom()
{
    t_high  = byte_read(0x2001);
    t_high <<= 8;
    t_high  |= byte_read(0x2000);
    t_low   = byte_read(0x2003);
    t_low <<= 8;
    t_low   |= byte_read(0x2002);
    a_a      = byte_read(0x2055);
}

/**************开机初始化保存的数据*****************/
void init_eeprom()
{
    read_eeprom();        //先读
    if(a_a != 1)        //新的单片机初始单片机内问eeprom
    {
        t_high = 300;
        t_low  = 100;
        a_a = 1;
        write_eeprom();       //保存数据
    }    
}

/****************主函数***************/
void main()
{
    beep = 0;                        //开机叫一声   
    delay_1ms(150);
    P0 = P1 = P2 = P3 = 0xff;
    temperature = read_temp();        //先读出温度的值    
    init_eeprom();  //开始初始化保存的数据
    delay_1ms(650);                
    temperature = read_temp();                 //先读出温度的值
    dis_smg[0] = smg_du[temperature % 10];     //取温度的小数显示
    dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示
    dis_smg[2] = smg_du[temperature / 100 % 10] ;       //取温度的十位显示
    time_init();                    //初始化定时器 
    while(1)
    {        
        key();                    //按键程序
        if(key_can < 10)
        {
            key_with();            //设置报警温度    
        }
        if(flag_300ms == 1)        //300ms 处理一次温度程序
        {       
            flag_300ms = 0;    
            temperature = read_temp();    //先读出温度的值
            clock_h_l();        //报警函数
            if(menu_1 == 0)
            {    
                smg_i = 3;
                dis_smg[0] = smg_du[temperature % 10];     //取温度的小数显示
                dis_smg[1] = smg_du[temperature / 10 % 10] & 0x7f; //取温度的个位显示
                dis_smg[2] = smg_du[temperature / 100 % 10] ;       //取温度的十位显示
            }
        }
    }
}

五、实验现象

演示视频:

http://www.dtcms.com/a/350647.html

相关文章:

  • AR眼镜赋能水利智能巡检的创新实践
  • 算法题打卡力扣第167题:两数之和——输入有序数组(mid)
  • VASP计算层错能(SFE)全攻略2
  • python自学笔记12 NumPy 常见运算
  • QT(1)
  • 独立显卡接口操作指南
  • 小程序开发指南(四)(UI 框架整合)
  • Linux系统网络管理
  • UE5 UI遮罩
  • 人形机器人产业风口下,低延迟音视频传输如何成为核心竞争力
  • Linux笔记9——shell编程基础-3
  • OpenFeign的原理解析
  • FMS回顾和总结
  • C++ 中 `std::map` 的 `insert` 函数
  • 【机器学习项目 心脏病预测】
  • 【广告系列】流量归因模型
  • centos 用 docker 方式安装 dufs
  • 【C++11】auto关键字:自动类型推导
  • Python爬虫实战: 爬虫常用到的技术及方案详解
  • Leetcode top100之链表排序
  • Swift 解法详解 LeetCode 362:敲击计数器,让数据统计更高效
  • 【猿人学】web第一届 第16题 js-逆向 windows蜜罐 / webpack初体验
  • 通过C#上位机串口写入和读取浮点数到stm32实战5(通过串口读取bmp280气压计的数值并在上位机显示)
  • java 并发编程八股-多线程篇
  • 【已解决】统信UOS安装后没有有线网络,缺少Chengdu Haiguang IC Design Co., Ltd. 10 Gb Ethernet网卡驱动
  • 支付宝直连商户,自动处理支付交易投诉,支持多支付宝应用
  • 【VS2022】背景设置详细教程(背景透明)
  • AI 时代“驯导师”职业发展方向探究
  • 用AI生成的一个BadgerDB的管理工具
  • 深入剖析Hugging Face Transformers中的KV Cache