历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2020年09月03日 | 单片机设计的DS18820温度报警器

发布者:平和梦想 来源: 51hei关键字:单片机  DS18820  温度报警器 手机看文章 扫描二维码
随时随地手机看文章

1、本设计使用单片机作为核心进行控制。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等独特优点,在数字化、智能化方面有广泛的用途。温度显示基本范围0.00℃—99.99℃。精度误差小于0.01℃。所测温度值由四位数码管显示。可以设定温度的上下限报警功能。

2、本设计主要是介绍了单片机控制下的温度报警系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:

单片机实时检测温度传感器DS18B20的状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度,通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。



原理图

QQ截图20190105204716.png (191.04 KB, 下载次数: 27)

下载附件  保存到相册

2019-1-5 20:48 上传



仿真图




调试图




实物图




单片机源程序如下:

#include                  //调用单片机头文件

#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                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();           //保存数据

        }        

}



/***********************18b20初始化函数*****************************/

void init_18b20()

{

        bit q;

        dq = 1;                                //把总线拿高

        delay_uint(1);            //15us

        dq = 0;                                //给复位脉冲

        delay_uint(80);                //750us

        dq = 1;                                //把总线拿高 等待

        delay_uint(10);                //110us

        q = dq;                                //读取18b20初始化信号

        delay_uint(20);                //200us

        dq = 1;                                //把总线拿高 释放总线

}


/*************写18b20内的数据***************/

void write_18b20(uchar dat)

{

        uchar i;

        for(i=0;i<8;i++)

        {                                         //写数据是低位开始

                dq = 0;                         //把总线拿低写时间隙开始

                dq = dat & 0x01; //向18b20总线写数据了

                delay_uint(5);         // 60us

                dq = 1;                         //释放总线

                dat >>= 1;

        }        

}


/*************读取18b20内的数据***************/

uchar read_18b20()

{

        uchar i,value;

        for(i=0;i<8;i++)

        {

                dq = 0;                         //把总线拿低读时间隙开始

                value >>= 1;         //读数据是低位开始

                dq = 1;                         //释放总线

                if(dq == 1)                 //开始读写数据

                        value |= 0x80;

                delay_uint(5);         //60us        读一个时间隙最少要保持60us的时间

        }

        return value;                 //返回数据

}


/*************读取温度的值 读出来的是小数***************/

uint read_temp()

{

        uint value;

        uchar low;                           //在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序

        init_18b20();                   //初始化18b20

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0x44);           //启动一次温度转换命令

        delay_uint(50);                   //500us


        init_18b20();                   //初始化18b20

        

        write_18b20(0xcc);           //跳过64位ROM

        write_18b20(0xbe);           //发出读取暂存器命令

        

        EA = 0;

        low = read_18b20();           //读温度低字节

        value = read_18b20();  //读温度高字节

        EA = 1;

        value <<= 8;                   //把温度的高位左移8位

        value |= low;                   //把读出的温度低位放到value的低八位中

        value *= 0.625;               //转换到温度值 小数

[1] [2] [3]
关键字:单片机  DS18820  温度报警器 引用地址:单片机设计的DS18820温度报警器

上一篇:单片机60秒倒计时
下一篇:单片机INT0外部中断脉冲计数

推荐阅读

8月30日至9月1日,2018中国(上海)国际人工智能展览会在上海跨国采购会展中心举行。由天合光能创新平台自主研发的智能机器人在此次展览中首次公开亮相,标志着天合光能从全球领先的太阳能整体解决方案提供商向能源解决方案提供商转型的道路上迈出新的一步。 此次展览会吸引了数万名人工智能行业人士和50位世界级资深专家,超过300家顶尖人工智能企业展...
第一部分:第二部分:串口中断4种接收数据实现方式
9月1日,华为牵手武汉市政府的重点项目工程“长江鲲鹏生态创新中心”在武汉未来科技城举办启用仪式。据长江日报报道,长江鲲鹏生态创新中心的正式启用将打造立足武汉、辐射全国的鲲鹏计算产业集群,到2025年建设成为产业生态完善、核心技术领先、应用场景丰富、产业竞争力较强的鲲鹏计算产业示范区,共同开创中国计算产业新时代。长江鲲鹏生态创新中心将以...
9月1日,三星 Galaxy Z系列中国新品线上发布会举行,发布了先前已经在海外发布的三星Galaxy Z Fold3 5G 、三星 Galaxy Z Flip3 5G两款折叠屏新机。近日,中国泰尔实验室颁发了首个“泰尔证书-折叠屏手机”五星证书,而获此殊荣者恰是Galaxy Z Fold3 5G(SM-F9260)。折叠屏手机在保证基本功能和性能的同时,还要兼顾柔性显示、铰链设计、防...

史海拾趣

问答坊 | AI 解惑

TMS320LF2407在电机调速控制中的应用研究

         用C语言编写电机的调速控制程序,设计TMS320LF2407的外围相关硬件电路。也可以用2812心片。 不知道怎么下手,请各位前辈帮帮忙。 我的邮件地址是lsblxy35@yahoo.com.cn    多谢~~ ...…

查看全部问答∨

请各位高手指教,下面的电路能不能成立,不能成立的原因是什么?

电路是我自己画的,个人分析如下,有不对的地方希望大家指正:谢谢~ 1》通电,12V经R1到Q1的C极,经R2加至Q1的B极,Q1饱和导通,C极等于0 此时Q2,Q3,Q4的B极全部为0 Q2为PNP管,此时是导通状态,但对电路没影响 2》按S1, ...…

查看全部问答∨

Epcos收购恩智浦半导体的RF-MEMS业务

第一季度全球PC出货量增长情况正常 据iSuppli公司,虽然经济形势充满挑战,但2008年第一季度全球PC出货量增长情况符合正常的季节型态,同比增幅达到两位数。 第一季度全球PC单位出货量从2007年第一季度的6240万台上升到6990万台,增长幅度为12.1% ...…

查看全部问答∨

dsp项目外包

本人有一个简单图像识别项目需要开发: 要求用CMOS图像传感器和DSP,对图像中的单个圆形亮点进行简单识别,请有兴趣的朋友联系我,合作方式双方商议,不胜感激!   mingrz@126.com…

查看全部问答∨

小区智能化集成,这行太难了~~

连国标都没有,怎么搞? 只往里面垫钱?…

查看全部问答∨

安装wince 5.0时,提示找不到.NET FrameWork 1.1?这是怎么回事

D:\\Backup\\我的文档\\My Pictures 仁慈的人啊,指点一下。。。 我看我XP系统下的这个 FrameWork版本为 2.0的? 非要替换吗…

查看全部问答∨

AVR单片机向TR800 GSM模块发送AT命令问题

我想用单片机控制TR800发送短信。 先把PC和TR800连接,用超级终端发AT命令,可以实现发短信。 然后单片机和PC连,向PC串口发数据,接收到的都是正确的命令 最后单片机和TR800连接,命令不能写进去,实在是搞不懂了,向大家求助。 …

查看全部问答∨

应用程序与网卡驱动通信

厂商之前给过一个pc端的程序,就是可以写ethnet的mac,可是厂商这个程序不适合我们的需求,我们需要厂商提供接口,以便于我们改成自己需要的功能,可是厂商说鉴于保密的原因,不能给我们源代码,就给我们一个.h的头文件,说他们的.exe就是通过这个 ...…

查看全部问答∨

急聘单片机开发人员

自动化控制或相关专业,大专以上学历 熟悉各类电子元器件,能独立完成pcb布线,懂得开关电源原理,熟悉充电机或电动汽车充电站优先; 熟练编写CAN通讯,RS232,RS485程序 熟练的应用液晶屏、触摸屏使…

查看全部问答∨

电源正负极是否短路的测量问题!

请问各位大侠:     我用万用表的通断档测量电路板的正负极之间是否短路时,(电路板未加电时测量)     万用表通断档有时显示的是.548,用电阻档测量时阻值为1.5K;有时通断档显示为1.254,电阻档测得阻值为5.2K.   &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved