您的当前位置:首页2021年度基于单片机智能温度检测系统设计报告

2021年度基于单片机智能温度检测系统设计报告

2024-07-16 来源:爱问旅游网



院级电子设计技能竞赛

专 业电子信息工程
班 级 13电子应用班
学 号
学生姓名杨源鑫
指导老师 侯继红
完成日期 615

广州科技贸易职业学院教务处制



摘要

伴随时代进步和发展,温度测试已经影响到我们生活、工作、 科研、 各个领域,已经成为了一个很关键事情,所以设计一个温度测试系统势在必行。 本文关键介绍了一个基于液晶1602单片机智能温度检测系统。

具体描述了利用数字温度传感器DS18B20开发测温系统过程,
关键对传感器在单片机下硬件连接,软件编程和各模块系统步骤进行了详尽分析,对各部分电路也一一进行了介绍,该系统能够方便实现温度采集和报警,
并能够依据需要任意上下限报警温度,它使用起来相当方便,含有精度高、量程宽、 灵敏度高、 体积小、 功耗低等优点,适合于我们日常生活和工、
农业生产中温度测量,也能够当做温度处理模块潜入其它系统中,

该系统结构简单, 抗干扰能力强,适合于恶劣环境下进行现场温度测量,
作为其它主系统辅助扩展。DS18B20AT89S51结合实现最简温度报警系统,

关键词: 单片机;温度检测; AT89C52;DS18B20;有广泛应用前景。

abstract
As the progress and development of The Times, temperature test hasimpact to our life, work, scientific research, each domain, hasbecome a very important thing, so the design of a temperature testingsystem is imperative.

This paper introduces a detection system based on liquid crystal 1602single chip microcomputer intelligent temperature.Described in detailusing digital temperature sensor DS18B20 temperature measurement andcontrol system in the development process, focusing on sensor underthe single chip



microcomputerhardware connection, software programming and the flow diagram ofeach module system are analyzed in detail, on the part of the circuitare introduced one by one, the system can easily realize thecollection of temperature and alarm, and can according to need anyupper and lower alarm temperature, it is quite convenient to use andhas high precision, wide range, high sensitivity, small volume, lowpower
consumption,suitable for our daily life and the temperature
measurementin industrial and agricultural production, also can treat astemperature processing module into other systems, as an aid in the
extensionof other main system.DS18B20 with AT89S51 realize the minimalisttemperature alarm system, the system structure is simple, stronganti-

measurement, have broad application prospects.
jammingcapability, suitable for harsh environments on-site temperature

Key words: single chip microcomputer;Temperature

detection;AT89C52.DS18B20.

目录

摘要.........................................................................................................................................................2

基于液晶1602片机智能温度检测.............................................................................................4

1方案...............................................................................................................................................4

1.1液晶LCD1602选择.......................................................................................................................4

1.2温度传感器DS18B20选择...........................................................................................................6



1.2.1DS18B20封装形式及引脚功效...........................................................................................7

1.2.3DS18B20供电方法...............................................................................................................9

1.2.4DS18B20测温原理.............................................................................................................10

1.2.5DS18B20ROM命令...............................................................................................................12

1.3串口通信模块选择......................................................................................................................13

1.3.1 串口收数据概述:...........................................................................................................14

1.4LED显示模块和蜂鸣器报警模块选择......................................................................................14

2路和程序设计.................................................................................................................................15

2.1电路设计......................................................................................................................................15

2.1.1统总体框.......................................................................................................................15

2.2程序设计......................................................................................................................................16
3测试方案和测试结果.........................................................................................................................20

3.1测试方案......................................................................................................................................20

3.2测试条件和仪器.........................................................................................................................21

3.3测试结果及分析.........................................................................................................................22

3.3.1测试结(数据)....................................................................................................................22

3.3.2测试分析和结论...................................................................................................................22

.......................................................................................................................................................23

附录1:电路原理图...............................................................................................................................24

附录2:源程序.......................................................................................................................................25



基于液晶1602单片机智能温度检测系统

1系统方案
本系统关键由液晶LCD1602模块、DS18B20温度传感器模块、蜂鸣器模块、串口通信模块等模块组成,下面分别论证这多个模块选择。

1.1液晶LCD1602选择
图所表示为LCD显示模块:


它由若干个5X75X11等点阵字符位组成,每个点阵字符位全部能够显示一个字符,每位之间有一个点距间隔,每行之间也有间隔,起到了字符间距和行间距作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。

1602LCD是指显示内容为16X2,即能够显示两行,每行16个字符液晶模块(显示字符和数字)。

特征:
13.3V5V工作电压,对比度可调
2、内含复位电路
3、提供多种控制命令,:清屏、 字符闪烁、 光标闪烁、

显示移位等多个功效





4、有80字节显示数据存放器DDRAM
5、内建有1925X7点阵字型字符发生器CGROM
68个可由用户自定义5X7字符发生器CGRAM
特征应用:
微功耗、体积小、 显示内容丰富、 超薄轻巧,常见在袖珍式仪表和低功耗应用系统中。


LCD160216个管脚, 下面结合我本人搜集相关LCD1602数据手册来对引脚做具体分析: 1602采取标准16脚接口, 其中:
2: VCC5V电源正极第1: GND为电源地

3:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时能够经过一个10K电位器调整对比度)。

4:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

5:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。

6:E(EN)端为使能(enable),高电平(1)时读取信息,负跳变时实施指令。

714: D0D78位双向数据端。 第1516: 空脚或背灯电

源。


15脚背光正极。





16脚背光负极。
LCD1602时序:







1.2温度传感器DS18B20选择
DS18B20Dallas企业继DS1820后推出一个改善型智能数字温度传感器,和传统热敏电阻相比,只需一根线就能直接读出被测温度值,并可依据实际需求来编程实现9~12位数字值读数方法[3]

1.2.1DS18B20封装形式及引脚功效



1.1DS18B20封装形式和引脚功效
1.1所表示,DS18B20外形如一只三极管,引脚名称及作用以下:GND:接地端。

DQ:数据输入/输出脚,TTL电平兼容。

VDD:可接电源,也可接地。因为每只DS18B20全部能够设置成两种供电方法,即数据总线供电方法和外部供电方法。采取数据总线供电方法时VDD接地,能够节省一根传输线,但完成数据测量时间较长;采取外部供电方法则VDD+5V,多用一根导线,但测量速度较快。

1.2.2 DS18B20内部结构





DQ 内部 存放和控制逻

电源 温度传感器
C 64R 高温触发器T
VDD
OM 低温触发器T H
VDD 线 匹配寄存器 L
8CRC发生
接口


1.2 1.2中出示了DS18B20关键内部部件,下面对DS18B20内部部分进行简单描述[4]:DS18B20内部结构

(1)64ROM64ROM是由厂家使用激光刻录一个64位二进制ROM代码,

是该芯片标识号,如表2.0所表示:
2.064ROM标识

8位循环冗余检验

48位序列号

8位分类编号(10H

MSB LSB

MSB LSB

MSB LSB


所以在单总线上能够并接多个DS18B20进行多点温度实习检验。

2)温度传感器。温度传感器是DS18B20关键部分,该功效部件可完成对温度测量经过软件编程可将-55~125℃范围内温度值按9位、10位、11位、12位分辨率进行量化,以上分辨率全部包含一个符号位,所以对应温度量化值分别为0.5℃0.25℃0.125℃0.0625℃,即最高分辨率为0.0625℃。芯片出厂时默认为12位转换精度。

44H

,

,

转换完成后温度以16位带符号扩展二进制补码形式表示,存放在高速缓存器RAM0,1字节中, 二进制数前5位是符号位。假如测得温度大于0, 5位为0, 只要将测得数值乘上0.0625即可得到实际温度;假如温度小于0, 5位为1,



测得数值需要取反加1再乘上0.0625即可得到实际温度。

3

DS18B20内部高速缓存器包含一个高速暂存器RAM和一个非易失性可电擦除EEPROM

EEPROM

TH

低温触发器TL和配置寄存器中信息。

4)配置寄存器。配置寄存器内容用于确定温度值数字转换率。DS18B20工作是按此寄存器分辨率将温度转换为对应精度数值,它是高速缓存器第5个字节,该字节定义如表2.0所表示:
2.1 匹配寄存器

TM

R0

R1

1

1

1

1

1

TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,

DS18B20出厂时该位被设置为0, 用户不要去改动; R1R0用来设置分辨率; 其它5位均固定为1DS18B20分辨率设置如表2.2所表示:
2.2 DS18B20分辨率设置

DS18B20依靠一个单线端口通讯。在单线端口条件下,必需先建立ROM操作协议,才能进行存放器和控制操作。所以,控制器必需首先提供下面5ROM操作命令之一: 1)读ROM;
2)匹配ROM;
3)搜索ROM;
4)跳过ROM;
5)报警搜索。

这些命令对每个器件激光ROM部分进行操作, 在单线总线上挂有多个器件时,能够区分出单个器件,同时能够向总线控制器指明有多少器件或是什么型号器件。成功实施完一条ROM 操作序列后,即可进行存放器和控制操作,控制器能够提供6



一条控制操作命令指示DS18B20完成一次温度测量。测量结果放在DS18B20暂存器里,用一条读暂存器内容存放器操作命令能够把暂存器中数据读出。温度报警触发器THTL各由一个EEPROM字节组成。假如没有对DS18B20使用报警搜索命令,这些寄存器能够做为通常见途用户存放器使用。能够用一条存放器操作命令对THTL进行写入,对这些寄存器读出需要经过暂存器。全部数据全部是以最低有效位在前方法进行读写。

1.2.3DS18B20供电方法
DS18B20能够采取外部电源供电和寄生电源供电两种模式。

外部电源供电模式是将DS18B20GND直接接地,DQ和但单总线相连作为信号线,
VDD和外部电源正极相连。图2.3所表示:

VCC 其它单线器件
4.7K

DQ

VDD

外部+5V电源

2.3DS18B20外部供电方法

DS18B20DQ

4.7K

VCC,

从而实现外部电源供电方法。

寄生电源供电模式图2.4所表示:从图中可知,DS18B20GNDVDD均直接接地,DQ和单总线相连,单片机其中一个I/O口和DS18B20DQ端相连。





VCC

DS18B20

单片机

+5V

4.7K

GND

2.4DS18B20寄生电源供电方法
1.2.4DS18B20测温原理
DS18B20测温原理图2.5所表示,其关键由斜率累加器、温度系数振荡器、 减法计数器、 温度存放器等功效部件组成。



2.5DS18B20测温原理
DS1820是这么测温:用一个高温度系数振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数振荡器脉冲进行计数来得到温度值。

计数器被预置到对应于-55℃一个值。假如计数器在门周期结束前抵达0,
则温度寄存器(一样被预置到-55℃)值增加,表明所测温度大于-55℃。同时,



计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来赔偿感温振荡器抛物线特征。然后计数器又开始计数直到0,假如门周期仍未结束,将反复这一过程。

斜坡式累加器用来赔偿感温振荡器非线性,以期在测温时取得比较高分辨率。这是经过改变计数器对温度每增加一度所需计数值来实现。所以,要想取得所需分辨力,必需同时知道在给定温度下计数器值和每一度计数值。

DS18B20

0.5℃

温度以16bit带符号位扩展二进制补码形式读出,2.4给出了温度值和输出数据关系。数据经过单线接口以串行方法传输。DS18B20测温范围-55℃~+125℃,0.5℃递增。

2.4温度数据关系



S18B20遵照单总线协议,每次测温时全部必需有4个过程[6]: 初始化;
传送ROM操作命令;
传送ROM操作命令;
数据交换;
1.2.5DS18B20ROM命令

read

ROM

ROM

.

33H,

DS18B2064

ROM

该命令只适适用于总线上存在单个DS18B20.

Match ROM(匹配ROM)。命令代码为55H, 若总线上有多个从设备时, 可选中某 DS18B20,



即只有和64位二进制ROM代码完全匹配DS18B20才能响应其操作。

Skip

ROM(

ROM)

CCH,

在开启全部DS18B20转换之前或系统只有一个DS18B20,

该命令将许可主设备不提供64位二进制ROM代码就适用存放器操作命令。

SearchROM(搜索ROM)。命令代码为F0H,当系统首次开启时,

主设备可能不知纵向上有多少个从设备或它们ROM代码,

适用该命令可确定系统中从设备个数及其RON代码。

Alarm

ROM

ROM

ECH,

该命令用于判别和定位系统中超出程序设定报警温度值。

Write

scratchpad(

)

4EH,

许可主设备向DS18B20暂存器写入两个字节数据,其中第一个字节写入TH,

Read scratchpad(读暂存器)。命令代码为BEH, 许可主设备读取暂存器中内容。
第二个字节写入TL中。能够在任何时刻发出复位命令终止数据写入。

Copy scratchpad( )。命 令代 码为 48H,从第

将温度报警触发器THTL中字节复制到非易失性EEPROM

,

DS18B20

EEPROM

,

DS18B20就会输出一个“0”,若复制结束,DS18B20输出一个“1”

ConvertT(温度转换)。命令代码为44H,开启一次温度转换,

若主机在该命令以后又发出其它操作,DS18B20又忙于温度转换,

DS18B20就会输出一个“0”,若转换结束,DS18B20输出一个“1”

Recall E2( 存器) B8H

将温度报警触发器THTL中字节从EEPROM中拷回到暂存器中。


该操作是在DS18B20上电时自动实施,若实施该命令后又发出读操作,



DS18B20会输出温度转换忙标识:0为忙,1完成。

Readpower supply(读电源使用模式)。命令代码为B4H。主设备将该命令发给DS18B20后发出读操作,DS18B20会返回它电源使用模式:0为寄生电源,1为外部电源。

1.3串口通信模块选择
图所表示为该系统所选择串口通信模块基础组成:


串口是计算机上一个很通用设备通信协议。大多数计算机包含两个RS232串口。串口同时也是仪器仪表设备通用通信协议;很多GPIB兼容设备也带有RS-232口。同时, 串口通信协议也能够用于获取远程采集设备数据。 串口通信概念很简单, 串口按位(bit)发送和接收字节。尽管比按字节(byte)并行通信慢,不过串口能够在使用一根线发送数据同时用另一根线接收数据。它很简单而且能够实现远距离通信。 比如IEEE488定义并行通行状态时,要求设备线总常不得超出20,而且任意两个设备间长度不得超出2;而对于串口而言, 长度可达1200米。经典地, 串口用于ASCII码字符传输。

通信使用3根线完成:1)地线,2)发送,3)接收。因为串口通信是异步,



端口能够在一根线上发送数据同时在另一根线上接收数据。其它线用于握手,不过不是必需。串口通信最关键参数是波特率数据位、停止位和奇偶校验。对于两个进行通行端口,这些参数必需匹配。

1.3.1 串口收发数据概述:

1.1波特率

它表示每秒钟传送bit特表示每秒钟发送300bit。当我们提到时钟周期,我们就是指波特率比如假如协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上采样率4800Hz。通常电话线波特率为14400,2880036600。波特率能够远远大于这些值,不过波特率和距离成反比。


高波特率常常见于放置很近仪器间通信,经典例子就是GPIB设备通信。

1.2 数据位
当计算机发送一个信息包,实际数据不会是8,2558位)。假如数据使用简单文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节, 包含开始/停止位,数据位和奇偶校验位。因为实际数据位取决于通信协议选择,术语“包”指任何通信情况。

1.3停止位
用于表示单个包最终一位。经典值为1,1.52位。因为数据是在传输线上定时,而且每一个设备有其自己时钟,很可能在通信中两台设备间出现了小小不一样时。

所以停止位不仅仅是表示传输结束,而且提供计算机校正时钟同时机会。适适用于停止位位数越多, 不一样时钟同时容忍程度越大,



不过数据传输率同时也越慢。

1.4奇偶校验位
在串口通信中一个简单检错方法。有四种检错方法:偶、奇、 高和低。 当然没有校验位也是能够。 对于偶和奇校验情况,

,

用一个值确保传输数据有偶个或奇个逻辑高位。比如,假如数据是011,那么对于偶校验,校验位为0,确保逻辑高位数是偶数个。假如是奇校验,校验位位1,这么就有3个逻辑高位。高位和低位不真正检验数据,简单置位逻辑高或逻辑低校验。这么使得接收设备能够知道一个位状态,有机会判定是否有噪声干扰了通信或是否传输和接收数据是否不一样时。

RS-232ANSI/EIA-232标准)是IBM-PC及其兼容机上串行连接标准。

可用于很多用途, 比如连接鼠标、打印机或Modem, 同时也能够接工业仪器仪表。
用于驱动和连线改善,实际应用中RS-232传输长度或速度常常超出标准值。RS-

1.4 LED显示模块和蜂鸣器报警模块选择该系统所选择LED显示模块以下图所表示:

LED起到一个显示提醒作用,当温度在安全范围内时用绿色LED灯进行显示,当温度超出正常范围时,用黄色LED灯进行显示,当温度过温时,

用红色LED灯进行显示。



蜂鸣器模块以下图所表示:

该蜂鸣器起到是报警提醒作用,当温度过温时,蜂鸣器发出叫声。采取低电平驱动。

2电路和程序设计

2.1电路设计
系统总体框图图下所表示:2.1.1系统总体框图






1602显示程序

单片机发

送数据

单片机接收温

度数据

DS18B20

温度检测

PC机接收(VB

2.2程序设计
2.2.1程序功效描述

1、按键P3^2为外部中止0按键
开机1602无任何显示,按下按键1显示:The temp is: 85C Gwarn!

稍等片刻,若温度正常,则显示:
液晶1602显示格式形式第一行: The temp is: <=30C

格式形式第二行: normal
若温度不正常,则显示:
液晶1602显示格式形式第一行: The temp is: >30C 格式形式第二行: Warn!!

2、能够和计算机进行通信, 在计算机上显示温度。




2.2.2程序关键部分设计
1LCD1602驱动程序部分
//写指令
voidwritecmd(uchar com) //写指令
{
E=0;
RS=0;
RW=0;
P0=com;
delay_1ms(2);
E=1;

E=0; delay_1ms(2);

void writedata(uchar dat)//写数据
{
E=0;
RS=1;
RW=0;
P0=dat;
delay_1ms(2);
E=1;
delay_1ms(2);
E=0;



}

//初始化
void init(void)
{delay_1ms(15);
writecmd(0x38);
delay_1ms(5);
writecmd(0x38);
delay_1ms(5);
writecmd(0x38);
writecmd(0x38);
busy();
writecmd(0x08);
writecmd(0x06);
busy();
writecmd(0x0c);
writecmd(0x01);
}
2DS18B20驱动程序部分

void init_DS18B20(void) { uchar n; //采样

//DS18B20进行初始化

DQ=1;
delay(8);








DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);
}
voidwrite_byte(uchar dat)
//写一个字节{
uchar i;
for(i=0;i<8;i++) //一位一位写,一共写8

DQ=0; {

DQ=1;
dat>>=1;
}
delay(4);
}
uchar read_byte(void) //读一个字节
{
uchar i,value;
for(i=0;i<8;i++)
{
DQ=0;



value>>=1; //延时一会
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
return value;
}
ucharreadtemp() //读温度{
uchar a,b;

write_byte(0xcc); init_DS18B20();

init_DS18B20();
write_byte(0xcc);
write_byte(0xbe);

a=read_byte();

//读高八位

MSB

b=read_byte();

//读第八位

LSB

b<<=4;
b+=(a&0xf0)>>4;
return b;
}

3、串口驱动程序部分



/**



*UART发送一字节
*/
voidUART_Send_Byte(uint8 dat)
{
SBUF= dat;
while(TI == 0);
TI= 0;
}

/**
* 将数据转换成ASC码并经过UART发送出去
*/
void UART_Send_Dat(uint8 dat)
}
3测试方案和测试结果

3.1测试方案

1、硬件测试





硬件调试图所表示调试均成功,没有出现故障。

2、软件仿真测试



软件仿真也是成功,没有错误。

3、硬件软件联调





上位机和实物调试均正常实现。

3.2测试条件和仪器

硬件电路确保无虚焊。
测试条件:检验数次, 仿真电路和硬件电路和系统原理图完全相同,而且检验无误,

指针式万用表。 3.3 测试结果及分析

3.3.1测试结果(数据)




3.3.2测试分析和结论
依据上述测试数据,上位机串口和计算机通信得出是一模一样数据,由此能够得出以下结论:

2、该系统和上述计算器通信功效正常。1、该系统所述基础功效正常。


致谢

走最快总是时间,来不及感叹,大学生活已近尾声,2年努力和付出,
本论文设计在侯继红老师悉心指导和严格要求下业已完成,
从设计课题选择到具体写作过程,发明性提议,侯老师一丝不苟作风,
严谨求实态度下完成没有这么帮助和关心和熏陶,我不会这么顺利完成毕业设实训。

在此向侯继红等全部本专业老师表示深深感谢和高尚敬意!在临近作品提交之际,



我还要借此机会向在这2年中给我很多教育和帮助各位老师表示由衷谢意,
感谢她们2年来辛勤栽培。不积跬步何以至千里,各位任课老师认真负责,
在她们悉心帮助和支持下,我能够很好掌握和利用专业知识,并在设计中得以表现,顺利完成此次参赛作品设计。同时,在论文写作过程中,我还参考了相关书籍和论文,在这里一并向相关作者表示谢意。

感谢学校培育和给我们提供一个好平台,让我们在此平台上求知、探索、钻究。







附录1:电路原理图







附录2: 源程序
tempsystem.c文件程序:
#include<lcd1602.h>
typedef unsigned charuint8;
typedef unsigned int uint16;
typedef charint8;
typedef int int16;
extern uchar temp;
sbitSW=P3^2; //外部中止0开关
voidUART_Send_Byte(uint8 dat);
void UART_Send_Dat(uint8 dat);
void main()
{
IT0=1;
/**
* UART初始化
* 波特率:9600
*/
TMOD = 0x21; //定时器1工作在方法2(自动重装)
SCON = 0x50; // 10uart,许可串行接收
TH1 =0xFD;

TL1 = 0xFD;
TR1 = 1;






while(1);
}
voidinit_51_()interrupt 1//写外部中止0服务函数
{
if(SW==0){
init();
busy();
if(SW==0){
while(1){
ifpan();
temp_display();
UART_Send_Dat(temp); //将温度数值发送给终端显示。

UART_Send_Byte('\r'); UART_Send_Byte('\n');
}
}
/**
* UART发送一字节
*/
void UART_Send_Byte(uint8 dat)
{
SBUF = dat;

}

while (TI == 0);


TI = 0;





/**
* 将数据转换成ASC码并经过UART发送出去 */
voidUART_Send_Dat(uint8 dat)
{
UART_Send_Byte(dat/10%10+ '0');
UART_Send_Byte(dat%10+ '0');
}
1602.c文件程序:
#include<lcd1602.h>
externuchar temp;

uchar code table1[]="The temp is ";uchar codetable[]={0,1,2,3,4,5,6,7,8,9};

uchar code table4[]="warn!!";

//写指令
voidwritecmd(uchar com) //写指令
{
E=0;
RS=0;
RW=0;
P0=com;

delay_1ms(2);
E=1;





delay_1ms(2);
E=0;
}
//写数据
voidwritedata(uchar dat)//写数据
{
E=0;
RS=1;
RW=0;
P0=dat;
delay_1ms(2);

}

E=1;
delay_1ms(2); E=0;

//初始化
voidinit(void)
{delay_1ms(15);
writecmd(0x38);
delay_1ms(5);
writecmd(0x38);
delay_1ms(5);
writecmd(0x38);

writecmd(0x38);



busy();



writecmd(0x08);
busy();
writecmd(0x01);
busy();
writecmd(0x06);
busy();
writecmd(0x0c);
writecmd(0x01);
}
//延时1ms程序
voiddelay_1ms(uint i)
{ uint j,k;
for(j=0;j<i;j++) for(k=0;k<=168;k++);
}

voidifpan() //温度判定响应函数
{
uint i;
if(temp<=30)
{
GREEN_LED=0;
RED_LED=1;
YELLOW_LED=1;

writecmd(0x80+0x45);
for(i=0;i<6;i++)





{
writedata(table3[i]);
delay_1ms(2);
}
}
if(temp>30)
{
GREEN_LED=1;
RED_LED=1;
YELLOW_LED=0;
writecmd(0x80+0x45);
for(i=0;i<6;i++)
{ writedata(table4[i]);
}
if(temp>31)
{
GREEN_LED=1;
YELLOW_LED=1;
RED_LED=0;
RED_LED=0;
delay_1ms(500);

RED_LED=1;
delay_1ms(500);
writecmd(0x80+0x45);





for(i=0;i<6;i++)
{
writedata(table2[i]);
delay_1ms(2);
}
BELL();
}
}
voidtemp_display() //温度显示函数
{
uint i;
writecmd(0x80); //显示Thetemp is

{ for(i=0;i<12;i++)
}
writecmd(0x80+0x0b);
writedata(':'); //显示冒号:
temp=readtemp(); //这条指令要在while语句里才会生效
writecmd(0x80+0x0D);
writedata(table[temp%10]+48);
delay_50us(50);
writecmd(0x80+0x0C);

writedata(table[temp/10]+48); delay_50us(50);
writecmd(0x80+0x0e);





writedata(0xdf); //显示符号度。

writecmd(0x80+0x0f);
writedata('C'); //显示符号C
}
void BELL()
{
KEY=0;
delay_1ms(1000);
KEY=1;
delay_1ms(1000);
}
ds18b20.c文件程序:
#include<ds18b20.h> uchar temp;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);

}

//写一个字节


void write_byte(uchar dat)

{





uchari;

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

//一位一位写,一共写8

DQ=dat&0x01;
delay(4);
DQ=1;
dat>>=1;
}
delay(4);
}
uchar read_byte(void)
//读一个字节 { uchar i,value;
DQ=0;
value>>=1; //延时一会
DQ=1;
if(DQ)
value|=0x80;
delay(4);
}
return value;

}
uchar readtemp()
{

//读温度




uchara,b;
init_DS18B20();
write_byte(0xcc); //跳过ROMwrite_byte(0x44); //开启温度测量
delay(300);
init_DS18B20();
write_byte(0xcc);
write_byte(0xbe);

a=read_byte();

//读高八位

MSB

b=read_byte();

//读第八位

LSB

b<<=4;
b+=(a&0xf0)>>4;

} return b;



显示全文