历史上的今天
返回首页

历史上的今天

今天是:2024年12月09日(星期一)

正在发生

2020年12月09日 | 基于DS18B20的体温监测声光报警装置

2020-12-09 来源:51hei

(1)本装置为基于51单片机的温度检测报警装置(C语言),调节范围(-55℃~+128℃)

(2)手动调节DS18B20温度大小,此时L1602液晶显示器同步显示温度值(℃)保留小数点后一位。

(3)当前温值大于等于37.3℃,红灯亮起,蜂鸣器开始发声报警,低于37.3℃绿灯常亮。

(4)当检测温度为负值或超出100℃,则判定为装置出现故障,黄灯亮起。

(5)当装置判定为故障时,需重启装置后再去检测,装置通电时会有“BI~”的一声提示

单片机源程序如下:

#include

#define uchar  unsigned char

#define uint   unsigned int

#define DataPort P0


sbit D0 = P1^0;

sbit D1 = P1^1;

sbit D2 = P1^2;

sbit DQ = P1^3;                                    //DS18B20 端口  

sbit D4 = P1^4;      

sbit LCD_RS=P2^0;                                //液晶屏RS口  写指令低,写数据高

sbit LCD_EN=P2^1;                                //液晶屏EN口  高脉冲使能 写指令/数据,低跳变执行


uchar TempData[7];                          //温度存储显示值

bit ReadTempFlag;                          //读时间标志


void WriteOneChar(uchar dat);             //写入DS18B20一个字节

uchar ReadOneChar(void);                 //读取DS18B20一个字节

uint ReadTemperature(void);             //读取DS18B20温度值

bit Init_DS18B20(void);                //初始化DS18B20

void Time0(void);                     //定时器初始化

void Delay2us(uchar t);             //2微秒延时函数

void Delay1ms(uchar t);              //1毫秒延时函数

void LCDinit();                                           //设置显示模式

void write_com(uchar com);                  //液晶写指令程序

void write_date(uchar date);         //液晶写数据程序

void delay100us(uint x);             //100us延时程序


void main()

{                  

        uchar i;

        uint temp;

        long tempM;

        bit negative;              //负数标志

        uchar TempH,TempL,TempK;

        Time0();                          //定时器初始化

        LCDinit();                                //设置显示模式

        while(1)         

        {

                if(ReadTempFlag==1)      //定时标志

                {

                        ReadTempFlag=0;

                        temp=ReadTemperature();//读取温度

                        if(temp&0x8000)

                        {            

                                negative=1;                //负号标志

                                temp=~temp;                //取反加1

                                temp +=1;

                                                        

                        }

                        else negative=0;        //正数


                        tempM=temp*0.0625*100;        //换算为10进制温度值再放大100倍        12位精度直接乘0.625

                        TempH=tempM/100;             //取整数      

                        TempL=tempM%100;            //取小数

                        TempL=(TempL+TempL)/2+0.5;// 小数取两次平均值加四舍五入更为精确

                        TempK=TempL;                          //准确的小数部分


                        if(negative==1)

                                TempData[0]='-';//显示负号

                        else if(TempH/100==0)     //温度值为两位数

                                TempData[0]=' ';  //百位消隐不显示

                        else

                                TempData[0]=TempH/100+'0';  //显示百位温度

      

                        if((TempH/100==0)&&((TempH%100)/10==0))                //温度值为一位数

                                TempData[1]=' ';                   //十位消隐不显示

                        else

                        TempData[1]=(TempH%100)/10+'0';                //显示十位温度

                        TempData[2]=(TempH%100)%10+'0';               //显示个位温度

                        TempData[3]='.';                             //显示小数点

                        TempData[4]=TempL/10+'0';                   //显示温度小数1位

                                                TempData[5]='^';                                             

                        TempData[6]='C';                           // 5,6用来表示摄氏度℃

                                                if(TempData[0]=='-' || TempData[0]=='1')

                                                {

                                                    D4 = 0;

                                                }

                                                if        ( TempData[1]>='3')

                                                {  

                                                     if(TempData[2]>= '7')

                                                      {

                                                           if(TempData[2]== '8' ||TempData[4]>= '3'||TempData[2]== '9')

                                                      {

推荐阅读

史海拾趣

奇力新(chilisin)公司的发展小趣事

在电感器领域,技术创新是推动产业升级的关键因素。奇力新始终将技术创新作为公司发展的核心驱动力。公司不断投入研发资金,加强与国际知名企业和研究机构的合作,推出了一系列具有自主知识产权的新技术和新产品。这些技术和产品不仅提升了奇力新的市场竞争力,还推动了整个电感器行业的升级和发展。

Applied Micro Circuits (MACOM)公司的发展小趣事

在某一时期,MACOM宣布收购Applied Micro Circuits Corp.,这一举动标志着公司在业务领域上的又一次重要扩张。收购完成后,MACOM迅速进行了业务分拆,将不感兴趣的服务器芯片业务与自身的主营业务进行剥离。这一战略调整使得MACOM能够更专注于自身擅长的领域,同时也为被剥离的业务提供了更好的发展机会。

博巨兴公司的发展小趣事

博巨兴公司始终秉持开放合作的理念,积极与高校和研究机构展开产学研合作。2008年至2010年间,公司先后与厦门大学、中南大学、湖南大学结成产学研型战略伙伴关系,共同推动芯片技术的研发与应用。同时,公司还不断拓展市场,在上海建立了分公司,并在顺德、厦门、天津、杭州、西安等地设立了办事处,为公司的长远发展奠定了坚实基础。

这些故事虽然基于虚构,但反映了博巨兴公司在电子行业发展中不断探索、创新、合作与拓展的历程。通过这些努力,博巨兴公司逐渐在芯片代理和研发领域取得了显著成绩,为电子行业的发展做出了积极贡献。

FILTRONIC公司的发展小趣事

随着全球对可持续发展的重视日益增强,FILTRONIC也开始关注自身的环保和社会责任问题。公司积极采取措施减少生产过程中的环境污染和资源浪费,推广绿色生产和循环经济理念。同时,FILTRONIC还积极参与社会公益事业和慈善活动,为社区的发展和进步贡献自己的力量。这些努力不仅展现了FILTRONIC作为一家负责任企业的形象,也为公司的长远发展奠定了坚实的基础。

C.K Magma公司的发展小趣事

C.K Magma公司始终坚持以创新为核心竞争力。他们不断推出具有创新性的电子产品,如高性能的集成电路、智能传感器等。这些产品凭借其卓越的性能和独特的功能,在市场上获得了广泛的认可。同时,公司还注重产品的用户体验和售后服务,赢得了客户的信赖和支持。

Essentra Components公司的发展小趣事

随着环保意识的不断提高,Essentra Components公司积极响应绿色发展的号召,将环保理念融入到产品的设计和生产过程中。公司采用环保材料替代传统材料,减少了对环境的污染;同时,公司还引进了先进的节能减排技术,降低了生产过程中的能耗和排放。这些措施不仅提高了产品的环保性能,还为公司赢得了更多的社会赞誉和市场份额。

问答坊 | AI 解惑

欢迎大家光临器材资料库

器材资料库,是以器材评论为核心的一个信息共享平台。我们借鉴了国外顶级乐器论坛的经验,将每一件乐器的性能与特点作了量化的评定,使每一位乐手都能够很直观地得到一种乐器性能的比较。   我们吉他扒手论坛乐器评论版是中国第一个乐器评论资料 ...…

查看全部问答>

时间继电器的分类、结构及选用原则

时间继电器的分类、结构及选用原则      时间继电器是一种利用电磁原理或机械动作原理实现触点延时接通或断开的自动控制电器,其种类很多,常用的有电磁式、空气阻尼式、电动式和晶体管式等。       &n ...…

查看全部问答>

Virtex-6 FPGA User Guide

Configurable Logic Block User Guide This guide describes the capabilities of the configurable logic blocks (CLBs) available in all Virtex®-6 devices. [ 本帖最后由 凯哥 于 2009-7-28 14:31 编辑 ]…

查看全部问答>

诺基亚暗码查寻

本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 暗码       用 途        备 注 *#06#      查询IMEI号码     所有手机通用 *#7370#     格式化手机      Series 60手机专用 *#7780#     恢 ...…

查看全部问答>

2440 Buffer_preview_info_update 问题

        temp = (s2440CAM->rCIPRSTATUS>>26)&3;         temp = (temp + 2) % 4;         RETAILMSG(MSG_EN_2,(_T(\"preview index = %d, size %d\\r\\n\"), temp, image_size)); ...…

查看全部问答>

1月19日南京嵌入式免费试听会邀您参加

江苏Linux公共技术服务中心于1月19日又将召开免费嵌入式讲座,欢迎嵌入式爱好者前来参加!    讲座时间:1月19日上午9:30    讲座人:嵌入式金牌讲师李超博士(在学员中口碑极好)    讲座内容;嵌入式的概念以及应用 ...…

查看全部问答>

avr studio反汇编

请问如何用avr studio进行反汇编?…

查看全部问答>

MIPS寄存器约定

MIPS 寄存器约定    作者:陈怀临翻译   来源:嵌入式技术网    点击数:601   更新时间:2007-1-26 寄存器约定 对于在一个CPU上进行开发,掌握其工作的CPU的寄存器约定是非常重要的。 MIPS ...…

查看全部问答>

NVR的核心价值是什么

NVR的核心价值是视频中间件 视频监控行业正快速的步入NVR时代,和DVR时代不同,竞争的焦点将不仅是嵌入式系统和算法的设计实现能力,软件的体系结构和组件化能力至关重要。网力致力于向业界提供安全稳定、高品质、良好用户体验的网络硬盘录像机(N ...…

查看全部问答>