//------------------------------------------------------

//用数码管与DS18B20设计温度报警器

//------------------------------------------------------

//本例将报警温度设为高:40度 低:-3度,当DS18B20感知到温度达到此临界值时

//系统发出报警声

#include

#include

#include "delay.h"

#include "DS18B20.h"

uchar display_digit[4]={0,0,0,0};                  //待显示的各温度数位

uchar LCD_display[16]="                ";                  //LCD显示的温度值

uchar LCD_alarm_display[16]="H:      L:      ";          //显示报警温度

bit HI_Alarm=0,LO_Alarm=0;                 //高低温报警标志

bit DS18B20_IS_OK;                        //传感器正常标志

//温度小数位对照表

uchar code df_table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

//报警温度上下限,为进行正负数比较,此处注意设为char类型

//取值范围为-128~+127,DS18B20支持范围为-50~+125

char Alarm_temp_HL[4]={30,-3,0,0};//报警温度预设及存储

uchar currentT=0;                                                  //当前读取的温度整数部分

uchar temp_value[]={0x00,0x00};                          //从DS18B20读取的温度值

//初始化DS18B20

uchar init_DS18B20()

{

uchar status;

DQ=1; delay(8);

DQ=0; delay(90);

DQ=1; delay(8);

status=DQ;

delay(100);

DQ=1;

return status;          //初始化成功时返回0

}

//读一字节

uchar readonebyte()

{

uchar i,dat=0;

DQ=1; _nop_();

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

{

DQ=0;dat>>=1;

DQ=1;_nop_();_nop_();//拉高,延时进行采样 单总线是进行与的

if(DQ) dat|=0x80;  //如果DQ是1,把1存到dat里

delay(30);DQ=1;

}

return dat;

}

//写一字节

void writeonebyte(uchar dat)

{

uchar i;

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

{

DQ=0;DQ=dat&0x01; //先取最低位,先读的也是最低位

delay(5);DQ=1;dat>>=1;

}

}

//读取温度值

void read_temp()

{

if(init_DS18B20()==1)        //DS18B20故障

DS18B20_IS_OK=0;

else

{

writeonebyte(0xcc);          //跳过序列号

writeonebyte(0x44);          //启动温度转换

init_DS18B20();

writeonebyte(0xcc);          //跳过序列号

writeonebyte(0xbe);          //读取温度寄存器

temp_value[0]=readonebyte(); //        温度低8位

temp_value[1]=readonebyte(); //        温度高8位

Alarm_temp_HL[2]=readonebyte(); //报警温度TH

Alarm_temp_HL[3]=readonebyte(); //报警温度TL

DS18B20_IS_OK=1;

}

}

//设置DS18B20温度报警值

void set_Alarm_temp()

{

init_DS18B20();

writeonebyte(0xcc);          //跳过序列号

writeonebyte(0x4e);          //将设定的温度报警值写入DS18B20

writeonebyte(Alarm_temp_HL[0]);  //写TH

writeonebyte(Alarm_temp_HL[1]);  //写TL

writeonebyte(0x7f);                                //12位精度

init_DS18B20();

writeonebyte(0xcc);          //跳过序列号

writeonebyte(0x48);          //温度报警值存入DS18B20

}

//在液晶上显示温度处理

void chuli_temp()

{

//------------------显示温度处理-------------------------

uchar ng=0;           //负数标识

uchar t=150;                 //延时值

char signed_current_temp;                //注意类型为char

//如果为负数则取反加1,并设置负号标识及负号显示位置

if((temp_value[1]&0xf8)==0xf8)

{

temp_value[1]=~temp_value[1];

temp_value[0]=~temp_value[0]+1;

if(temp_value[0]==0x00) temp_value[1]++;

ng=1;

}

//查表得到温度小数部分

display_digit[0]=df_table[temp_value[0]&0x0f];

//获取温度整数部分(无符号)

currentT=((temp_value[0]&0xf0)>>4)|((temp_value[1]&0x07)<<4);

//有符号的当前温度值,注意定义为char,其值可为-128~+127

signed_current_temp=ng?-currentT:currentT;

//高低温报警标志设置(与定义为char类型的Alarm_temp_HL比较,这样可区分正负比较)

HI_Alarm=signed_current_temp>=Alarm_temp_HL[2]? 1 : 0;

LO_Alarm=signed_current_temp<=Alarm_temp_HL[3]? 1 : 0;

//将整数部分分解为三位待显示数字

display_digit[3]=currentT/100;

display_digit[2]=currentT%100/10;

display_digit[1]=currentT%10;

//LCD显示数据

LCD_display[2]=display_digit[3]+'0';          //bai

LCD_display[3]=display_digit[2]+'0';          //shi

LCD_display[4]=display_digit[1]+'0';          //ge

LCD_display[5]='.';

LCD_display[6]=display_digit[0]+'0';          //xiaoshu

LCD_display[7]=0xdf;                                 //。

LCD_display[8]=0x43;                                 // C

if(display_digit[3]==0)

{

LCD_display[2]=' ';                        //高位为0则不显示

if(display_digit[2]==0)

{

LCD_display[3]=' ';

}

}

//负号显示在恰当位置

if(ng)

{

if(LCD_display[3]==' ')

LCD_display[3]='-';

else if(LCD_display[2]==' ')

LCD_display[2]='-';

else LCD_display[1]='-';

}

//------------------------------------------------------

}

void chuli_alarm_temp()

{

//---------------------报警温度处理---------------------

uchar ng;

//由于Alarm_temp_HL类型为char 故可以直接进行正负比较

//高温报警值

ng=0;

if(Alarm_temp_HL[2]<0)

{

Alarm_temp_HL[2]=~Alarm_temp_HL[2]+1;

ng=1;

}

//分解高温各数位到待显示数组中

LCD_alarm_display[3]=Alarm_temp_HL[2]/100+'0';

LCD_alarm_display[4]=Alarm_temp_HL[2]%100/10+'0';

LCD_alarm_display[5]=Alarm_temp_HL[2]%10+'0';

//屏蔽高位不为0的

if(LCD_alarm_display[3]=='0') LCD_alarm_display[3]=' ';

if(LCD_alarm_display[3]==' ' && LCD_alarm_display[4]=='0')

LCD_alarm_display[4]=' ';

//'-' 显示

if(ng)

{

if(LCD_alarm_display[4]==' ') LCD_alarm_display[4]='-';

else

if(LCD_alarm_display[3]==' ') LCD_alarm_display[3]='-';

else LCD_alarm_display[2]='-';

}

//低温报警值

…………限于本文篇幅 余下代码请从51黑下载附件…………

mysql温度报警器源码_ds18b20温度报警器单片机源代码相关推荐

  1. java mysql 源码分析_JAVA JDBC(MySQL)驱动源码分析

    JAVA连接数据库是其众多功能中的一部分,主要有两种方式连接DataBase: 一种是采用JDBC-ODBC桥,另一种则是称之为纯驱动连接DataBase,第一种方式在大型项目中基本上不再使用,本系列 ...

  2. Mysql的源码安装

    闲来无事,准备学习下Mysql的源代码,花了1个小时的时间,终于在VS2008中运行起来Mysql了,有些地方也是知之甚少,理解错了希望大家及时纠正,下面介绍下如何进行配置. Step 1: 下载My ...

  3. visual MySQL 教程_MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试...

    一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...

  4. mysql dba系统学习(2)了解mysql的源码目录及源文件

    了解mysql的源码目录 包括客户端代码,服务端代码,测试工具和其他库文件 Mysql源码结构 Bdb 伯克利DB表引擎 BUILD 构建工程的脚本 Client 客户端 Cmd-line-utils ...

  5. mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件

    了解mysql的源码目录 包括客户端代码,服务端代码,测试工具和其他库文件 Bdb 伯克利DB表引擎 BUILD 构建工程的脚本 Client 客户端 Cmd-line-utils 命令行工具 Con ...

  6. mysql buffer 命中率_从MySQL的源码剖析Innodb buffer的命中率计算

    按官方手册推荐Innodb buffer Hit Ratios的计算是: 100-((iReads / iReadRequests)*100) iReads : mysql->status-&g ...

  7. Linux环境下安装MySQL(源码安装)

    Linux环境下安装MySQL(源码安装) 1.事先从官网/国内镜像站点中下载源码安装包,上传至服务器: 2.安装开发工具和开发包(从5.5开始使用cmake编译) 3.创建用户和组 4.编译安装My ...

  8. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----01-----主角人物动画

    在源代码的里面有fbx格式的模型文件,发现有2个文件,一个是骨骼动画文件,可以分割为多个动画片段,还有一个是模型文件,但是没有动画,但是可以导入分割好的动画片段到动画元素里面, 按照下面的说明,分割了 ...

  9. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单窗口

    Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----04--修改菜单Shop窗口 此脚本用于创建商店以销售商品 --------------------------------- ...

最新文章

  1. SQL Server孤立账户解决办法
  2. 利用Powershell SSH-Session 工具管理 linux或网络设备
  3. python第三方库有哪些常用的、请列举15个-你想要的Python面试都在这里了【315+道题】...
  4. 台式电脑可以连wifi吗_[Windows] wifi音箱:台式电脑也可以连接蓝牙音箱了
  5. Python和单元测试那些事儿
  6. 知道python网课答案_Python程序设计答案
  7. css 盒模型的属性
  8. 语言 ota_荣威RX5 PLUS使用最新的家族设计语言,给人更年轻时尚的感觉
  9. 远程办公、游戏迅猛增长,旅行、汽车业遭重创!疫期移动互联网行业报告解读...
  10. 干粉灭火器(泡沫灭火器)工作原理
  11. forward与sendRedirect区别
  12. 【读书笔记】设计模式第十一十二章收获
  13. Mac操作指南:Mac显示器颜色不正如何调节?
  14. mac不显示安装的程序
  15. js笔记--BOM编程
  16. 硬件IIC和软件IIC区别
  17. 蓝牙-HFP概览-转
  18. 加速键(热键)与快捷键的区别
  19. Live Home 3D 教程:如何实现逼真的照明效果?
  20. 搜狗浏览器下载2015官方版最新版

热门文章

  1. POJ--3750 小孩报数问题
  2. 考研数学每个派系分析-听哪些老师的课?看那个老师的书?什么基础水平的学生在什么阶段用什么教材?
  3. 一篇好的创业计划书应该包含哪些内容?没有比这说的更全的了
  4. 保研经验帖----江西师范大学 to 华中科技大学
  5. 怎么查看自己电脑的IP地址
  6. nrf51822微信---AES加密
  7. 30 岁: 程序员心中永远的痛?
  8. 【案例】京东APP筛选页和携程APP筛选页的异同是什么?为什么?
  9. laravel爬坑日记No query results for model [App\Admin\Models\Capacity\ProductPrice] threeForm
  10. WPS WORD内表格文字底部对齐