89c51单片机 怎么读取 ds18b20读取rom 设置上限下限 ram或rom的数据?

拒绝访问 | www.renrendoc.com | 百度云加速
请打开cookies.
此网站 (www.renrendoc.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(421efcef729943ad-ua98).
重新安装浏览器,或使用别的浏览器基于51单片机的DS18B20温度传感器驱动程序加详解
我的图书馆
基于51单片机的DS18B20温度传感器驱动程序加详解
//此部分为18B20的驱动程序
//本程序验证通过,晶振为12MHz
#include &reg52.H&
#include &intrins.h&
sbit & &D18B20=P3^7; & &//DQ接P3^7
#define &NOP() & _nop_() &
#define &_Nop() &_nop_()&
void TempDelay (unsigned char idata us); &//延时函数定义
void Init18b20 (void); & & & & & & & & & //初始化函数定义
void WriteByte (unsigned char idata wr); &//单字节写入
void read_bytes (unsigned char idata j); &//定义多字节数据读取
unsigned char CRC (unsigned char j);//定义校验码数组
void GemTemp (void); & & & & & & & &//数据处理
void Config18b20 (void); & &//配置上下限即处理位数(9/10/11)
void ReadID (void); & & & & //读取器件ID,即ROM中的数据
void TemperatuerResult(void); //最终数据输出
unsigned int &idata Temperature,D[10]; //定义温度数组
unsigned char idata temp_buff[9]; & & &//定义RAM数据暂存数组
//存储读取的字节,read scratchpad为9字节,read rom ID为8字节
unsigned char idata id_buff[8]; & &//定义ROM数据暂存数组
unsigned char idata *p,TIM; & & & &//指针变量
unsigned char idata crc_ & & &//CRC计算变量定义
unsigned char code CrcTable [256]={
0, &94, 188, &226, &97, &63, &221, &131, &194, &156, &126, &32, &163, &253, &31, &65,
157, &195, &33, &127, &252, &162, &64, &30, &95, &1, &227, &189, &62, &96, &130, &220,
35, &125, &159, &193, &66, &28, &254, &160, &225, &191, &93, &3, &128, &222, &60, &98,
190, &224, &2, &92, &223, &129, &99, &61, &124, &34, &192, &158, &29, &67, &161, &255,
70, &24, &250, &164, &39, &121, &155, &197, &132, &218, &56, &102, &229, &187, &89, &7,
219, &133, 103, &57, &186, &228, &6, &88, &25, &71, &165, &251, &120, &38, &196, &154,
101, &59, 217, &135, &4, &90, &184, &230, &167, &249, &27, &69, &198, &152, &122, &36,
248, &166, 68, &26, &153, &199, &37, &123, &58, &100, &134, &216, &91, &5, &231, &185,
140, &210, 48, &110, &237, &179, &81, &15, &78, &16, &242, &172, &47, &113, &147, &205,
17, &79, &173, &243, &112, &46, &204, &146, &211, &141, &111, &49, &178, &236, &14, &80,
175, &241, 19, &77, &206, &144, &114, &44, &109, &51, &209, &143, &12, &82, &176, &238,
50, &108, &142, &208, &83, &13, &239, &177, &240, &174, &76, &18, &145, &207, &45, &115,
202, &148, 118, &40, &171, &245, &23, &73, &8, &86, &180, &234, &105, &55, &213, 139,
87, &9, &235, &181, &54, &104, &138, &212, &149, &203, &41, &119, &244, &170, &72, &22,
233, &183, &85, &11, &136, &214, &52, &106, &43, &117, &151, &201, &74, &20, &246, &168,
116, &42, &200, &150, &21, &75, &169, &247, &182, &232, &10, &84, &215, &137, &107, &53};
//CRC数据表
//Function:延时处理
void TempDelay (unsigned char idata us)
&while(us--);
//Function:18B20初始化
void Init18b20 (void)
&D18B20=1; &//侦测到下跳沿,初始化
&D18B20=0;
&TempDelay(160); & //delay480 us &(480)
&D18B20=1; & //释放总线
&TempDelay(30); & //delay 96 us (60-112)
&_nop_(); //18B20侦测到此上升沿,会自动应答
& & //发送presence信号
//if(D18B20==0)
&// flag = 1; & //detect 1820 success!
&// flag = 0; & &//detect 1820 fail!
&TempDelay(30); & & & //delay 96 us(60-240)
&_nop_(); & &//发送应答脉冲
&D18B20 = 1; & //释放总线
//Function:向18B20写入一个字节
void WriteByte (unsigned char idata wr) &//单字节写入
&for (i=0;i&8;i++)
& D18B20 = 1;
& & &_nop_();
& D18B20 = 0; & //侦测到下跳沿,初始化
& _nop_();
& D18B20=wr&0x01; & //写数据在(60-120)us内
& TempDelay(30); & //delay 96(60-120)us
& _nop_();
& _nop_(); & //至少大于1us恢复时间
& D18B20=1; & //释放总线
& wr &&= 1; & //一个字节8位,总共写8次
//Function:读18B20的一个字节
unsigned char ReadByte (void) & & //读取单字节
&unsigned char idata i,u=0;
&for(i=0;i&8;i++)
& D18B20 = 1;
& & &_nop_();
& D18B20 = 0; &//负跳沿,初始化
& u &&= 1;
& D18B20 = 1; & //释放总线
& if(D18B20==1)
& u |= 0x80;
& TempDelay (3); //15us内采样
& _nop_();
&return(u);
//Function:读18B20
void read_bytes (unsigned char idata j)
& for(i=0;i&j;i++)
& & *p = ReadByte();
//Function:CRC校验
unsigned char CRC (unsigned char j)
& & unsigned char idata i,crc_data=0;
& &for(i=0;i&j;i++) &//查表校验
& & crc_data = CrcTable[crc_data^temp_buff[i]];
& & return (crc_data);//返回i=8时的crc_data
}//若为0,校验正确,即此时的temp_buff[8]=0x00;
//Function:读取温度
void GemTemp (void)
& &read_bytes (9);
& &if (CRC(9)==0) //校验正确
& &{ //暂存器第0字节低8位,第一字节为高8位。
& & &Temperature = temp_buff[1]*0x100 + temp_buff[0];
// & & Temperature *= 0.625;
& Temperature /= 16; //转换成10进制
& TempDelay(1);
//Function:内部配置
void Config18b20 (void) &//重新配置报警限定值和分辨率
& & &Init18b20();
& & &WriteByte(0xcc); &//skip rom
& & &WriteByte(0x4e); &//配置暂存器2,3,4字节数据
& & &WriteByte(0x19); &//上限
& & &WriteByte(0x1a); &//下限
& & &WriteByte(0x7f); & & //set 11 bit (0.125)
& & &Init18b20();
& & &WriteByte(0xcc); &//skip rom
& & &WriteByte(0x48); &//保存设定值
& & &Init18b20();
& & &WriteByte(0xcc); &//skip rom
& & &WriteByte(0xb8); &//回调设定值
//Function:读18B20ID
void ReadID (void)//读取器件 id
&Init18b20();
&WriteByte(0x33); &//read rom
&read_bytes(8);
//Function:18B20ID全处理
void TemperatuerResult(void)
& &p = id_
& &ReadID(); & &//读取器件ID
& &Config18b20(); //ROM配置
&Init18b20 (); //初始化
&WriteByte(0xcc); & //单点检测,跳过ROM检索
&WriteByte(0x44); & //启用温度转换
&Init18b20 ();
&WriteByte(0xcc); & //单点检测,跳过ROM检索
&WriteByte(0xbe); & //读取暂存器的全部内容
&p = temp_
&GemTemp();
unsigned int TempTick=0;
void GetTemp()
& & &if(TIM==1)
&{ &TIM=0;
& & TemperatuerResult();
&// &D[5]=T
//刷新时间
void T1zd(void) interrupt 3
& &TH1 = 0 & & & TL1 = 0x33;
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢导读:89C51是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51基础型单片机版本,AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集,AT89C51单片机如图所示,AT89C51单片机中有一个8位的微处理器,当AT89C51单片机的片内 一 核心器件的基本构成及特性 1.1 AT89S51功能特性
89C51是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51基础型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能。89C51内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C51有PDIP(40pin)和PLCC(44pin)两种封装形式。
1.2 AT89S51管脚介绍
AT89C51单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM)、并行I/O口(4个8位I/O口)、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是微处理器(CPU)加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式,以实现不同的功能。 AT89C51单片机如图所示。
1 山东交通学院
课程设计任务书
1.1.1引脚功能介绍 Vcc(40引脚): 接+5V电源。 Vss(20引脚): 接地。 XTAL1(19引脚): 片内振荡器反相放大器和时钟发生器电路的输入端。 XTAL2(18引脚): 片内震荡器反相放大器的输出端。 RST: 复位引脚,高电平有效。 EA: 外部程序存储器访问允许控制端。 ALE: 低8位地址锁存允许信号端。 PSEN:读外部程序存储器的选通信号端。
P0口:8位,漏极开路的双向I/O口。 P1口:8位,准双向I/O口,具有内部上拉电阻。 P2口:8位,准双向I/O口,具有内部上拉电阻。 P3口:8位,准双向I/O口,具有内部上拉电阻。 1.1.2微处理器(CPU) AT89C51单片机中有一个8位的微处理器,与通用的微处理器基本相同,同样包括了运算器和控制器两大部分,只是增加了面向控制的处理功能,不仅可处理数据,还可以位变量的处理。 1.1.3数据存储器(RAM) 数据存储器空间分为片内与片外两部分。 当AT89C51单片机的片内RAM不够用时,又给用户提供了在片外可扩展 山东交通学院
课程设计任务书 至64KB RAM的能力,以供用户的需求。 片内为128个字节,字节地址为00H~7FH。片外最多可外扩至64k字节,用来存储程序在运行期间的工作变量、运算的中间结果、数据暂存和缓冲、标志位等,所以称为数据存储器。 1.1.4程序存储器(ROM) AT89C51单片机的片内程序存储器为4KB的FLASH存储器,地址范围为0000H~0FFFH。有16位地址线,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。 由于受集成度限制,片内只读存储器一般容量较小,如果片内的只读存储器的容量不够,则需用扩展片外的只读存储器,片外最多可外扩至64k字节。 1.1.5中断系统 具有5个中断源,2级中断优先权。 定时器/计数器 片内有2个16位的定时器/计数器, 具有四种工作方式(方式0、方式1、方式2、方式3)。 串行口 1个全双工的串行口,具有四种工作方式。可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连构成多机系统,从而使单片机的功能更强且应用更广。 1.1.6特殊功能寄存器(SFR) AT89C51单片机共有21个特殊功能寄存器,用于对片内的个功能的部件进行管理、控制、监视。实际上是一些控制寄存器和状态寄存器,是一个具有特殊功能的RAM区。由上可见,AT89C51单片机的硬件结构具有功能部件种类全,功能强等特点。特别值得一提的是该单片机CPU中的位处理器,它实际 山东交通学院
课程设计任务书 上是一个完整的1位微计算机,这个1位微计算机有自己的CPU、位寄存器、I/O口和指令集。1位机在开关决策、逻辑电路仿真、过程控制方面非常有效;而8位机在数据采集,运算处理方面有明显的长处。MCS-51单片机中8位机和1位机的硬件资源复合在一起,二者相辅相承,它是单片机技术上的一个突破,这也是MCS-51单片机在设计的精美之处,得以在实际生活中得到了广泛的应用。 1.3 DS18B20的主要特性 这里我们用到温度芯片DS18B20。DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式。测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。 DS18B20支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。 1.4 DS18B20的内容结构 (1) DS18B20的内部结构如下图所示。
山东交通学院
课程设计任务书
DS18B20内部结构图 DS18B20有4个主要的数据部件: ① 64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。 ② 温度灵敏元件。 ③ 非易失性温度报警触发器TH和TL。可通过软件写入用户报警上下限值。 ④ 配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。DS18B20在0工作时按此寄存器中的分辨率将温度转换成相应精度的数值,其各位定义如图所示。 TM
R1 R0 1 1 1 1 1
DS18B20配置寄存器结构图 其中,TM:测试模式标志位,出厂时被写入0,不能改变;R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。 配置寄存器与分辨率关系表 : R0 0 0 1 1
(2) 高速暂存存储器 高速暂存存储器由9个字节组成,其分配如下图所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第 R1 0 1 0 1 温度计分辨率/bit 9 10 11 12 最大转换时间/us 93.75 187.5 375 750 包含总结汇报、资格考试、IT计算机、党团工作、文档下载、外语学习、考试资料、办公文档、word文档、计划方案以及基于51单片机DS18B20温度采集器等内容。本文共5页
相关内容搜索基于AT89C51单片机的温控及显示系统_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于AT89C51单片机的温控及显示系统
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩24页未读,
定制HR最喜欢的简历
你可能喜欢查看: 17492|回复: 10
基于单片机的数字温度计设计 毕业设计论文下载
完整的word格式的毕业设计论文从这里下载:
(903.07 KB, 下载次数: 101)
16:29 上传
点击文件名下载附件
下载积分: 黑币 -5
下面是内容预览:
摘要:随着科技的发展,温度是经常遇到的测量参数。本文介绍了设计温度计的基本方法与测量原理,其组成部分有:AT89C52单片机、温度传感器DS18B20、按键扫描电路、显示电路以及报警电路。它可以实时地测量温度和设置温度上下限,完成对被测对象温度的自动控制。通过测试表明,该设计对温度的控制有方便实用、操作简单的特点,大大提高了被控对象的各种技术指标。 关键词: AT89C52; DS18B20;报警电路
The Design of Digital Thermometer Based on Single Chip MicrocomputerAbstract: With the development of science and technology, parameters of temperature usually need to measure. This paper introduces design of basic method and measuring principle of the thermometer, its components include AT89C52 single chip computer, temperature sensor DS18B20, button scanning circuit, display circuit and alarm circuit. It can measure temperature in time and set the scope of temperature, and finish to measure temperature automatically. According to our test, the design are convenient and practical, simple operation, and greatly improving all kinds of technical indicators of controlled object.Key words:AT89C52; DS18B20; Alarm circuit
目录1引言1.1课题背景1.2课题研究的目的和意义 1.3国内外测温技术及单片机现状2系统总体方案设计2.1系统的设计指标 2.2系统的实现原理2.3系统的实现方案分析 3 系统硬件设计3.1 系统总体结构3.2 AT89C52简介3.3 DS18B20简介3.3.1温度传感器DS18B20引脚介绍3.3.2 DS18B20内部结构与特点 3.3.3 DS18B20 温度测量通信协议3.4系统硬件设计3.4.1 复位电路模块3.4.2 时钟电路设模块3.4.3 报警电路模块3.4.4显示电路模块3.4.5按键电路模块3.4.6温度检测电路模块4系统软件设计4.1系统主程序设计4.2 DS18B20初始化子程序4.3 DS18B20读取温度子程序4.4 显示数据处理子程序4.5按键扫描子程序5 系统软硬件调试总结
1.001.jpg (762 Bytes, 下载次数: 50)
03:58 上传
1引言1.1课题背景& &毋庸置疑,随着科学技术的发展和人们生活的需要,近年来单片机的应用领域越来越宽广。一般的度测量不仅设计复杂,而且精确度非常差,而应用单片机使这个问题得到了很好的解决。在现代社会,温度是一个至关重要的数据,而几十年前的测量方法科技含量太低,显然不能满足现代社会对温度高精确度测量的要求。这些年来专家们研究了几种测温技术,这些测温技术不但很好的提高了测量精度,而且使产品的质量更上一层楼。 由于单片机具有集成度高,通用性好,功能强,尤其体积小,重量轻,耗能低等显著的优势,因此在日常生活和工业生产中得到了广泛应用。本课题就是单片机作为核心器件进行设计的。1.2课题研究的目的和意义 测量温度的基本方法是使用温度计直接读取温度,如我们大家经常使用的体温计。随着工业生产的需要,人们对温度的测量有了的更高的要求。在迅速发展的科学技术中,前沿技术是传感器技术,特别是温度传感技术,已经渗透到我们生活的各个方面,温度测量在工业生产中占有不可或缺的地位,此外在农业生产中也离不开温度的测量。综上所述,测量温度具有举重若轻的作用。单片机在各个领域的应用广泛,而把它作为数字温度计的核心部件只是具体应用的一个实例。目前,随着在恶劣的工作环境下的对测温技术的要求,单片机的发展越来越受到人们的重视。1.3国内外测温技术及单片机现状不可否认,跟发达国家相比,我国测温技术仍然处于较低水平。一般的测温技术只能对较平稳的环境温度进行测量,如果用于恶劣的工作环境,我国的某些技术还达不到要求。但是,随着我国成为世界第二大经济体,经济实力直线上升,我国电子企业也在蓬勃发展。 众所周知,单片机是集成在一块芯片上的计算机系统,它拥有计算机系统的主要部件和功能,如 CPU、并行I/O端口、定时与中断系统、A/D与D/A转换系统、总线系统。随着科学技术的发展,现在大部分单片机功能也更加强大。单片机还可以连接各种各样的外围电路,如定时器、复位电路、时钟电路、传感器等等,我们应用单片机可以对各种各样的数据进行采集。如连接温度传感器DS18B20等芯片,就可以对被测对象进行温度的测量与检测。2系统总体方案设计2.1系统的设计指标 本课题设计的数字温度计要求能够及时准确地对被测对象进行温度测量,并将其测得的温度值显示在LED数码管上,然后与设定的温度范围比较,如果超过温度限制,则通过蜂鸣器报警,同时报警指示灯闪烁,直到温度回到规定的范围为止。另外,还能够通过按键自己设置温度范围。综上所述,系统设计的要求如下:1.开机启动,检测各元件是否正常工作。2.正负温度辨别(正温度红灯亮,负温度绿灯亮)。3.温度测量的基本范围是-30℃~125℃。4.软件预设上限温度32℃,下限温度10℃。5.超过温度上下限即实现报警功能,报警灯闪烁,蜂鸣器震动并发声警示,并在负温度时蜂鸣器震动较急促。6.支持手动按键设置温度上下限。2.2系统的实现原理本系统使用温度传感器,并与单片机连接组成温度测量系统,从而完成测量温度。温度传感器对温度的变化十分敏感,它能够把测得的温度及时准确的转化为一串的电路信号,这时我们可以通过显示系统将其测得的温度值显示出来,供人们读取和记录。比如,温度传感器DS18B20是一种集成度很高的温度测量器件,它能够根据当前温度环境的变化产生出一串数字信号。显然,不同的温度环境将会有不同的数字信号,通过该信号能够准确的得到当前环境的温度值,从而完成温度的测量。2.3系统的实现方案分析 我们同样利用温度传感器DS18B20作为测量器件,由于DS18B20的集成度很高,因此该器件需要的外围电路非常简单。并且DS18B20体积小,节省电路板。此外,DS18B20是高封装的温度传感器,能够直接和单片机通信。测温范围-55℃~+125℃,固有测温分辨率0.5℃。抗干扰能力很强。单片机作为主要组成器件,但这里采用LED 7位数码管进行温度值的显示,显示温度值清晰直观,易于分辨。并且LED数码管占用空间小,经济实惠。3 系统硬件设计3.1 系统总体结构本方案设计的系统模块由单片机系统、温度传感器模块、数码管显示模块和电源模块组成,其总体结构如图1。
1.002.jpg (11.94 KB, 下载次数: 56)
03:58 上传
图1 系统结构图该系统是以AT89C52 单片机为核心,在开始运行它向主机先发送初始化命令使DS18B20启动,再发送温度转换命令使数字温度传感器DS18B20 把测得的模拟温度信号转换为数字信号供单片机运算。同时,显示器上显示出当前环境的温度,当温度超出设定的温度上下限范围时,蜂鸣器就会发出警报。3.2 AT89C52简介单片机经过几十年的蓬勃发展,目前已经是自动控制理论的中流砥柱。对于专业人员来说,掌握单片机原理及其应用已经成为必不可少的一项技能,是专业人员必备的能力和素质之一。单片机的应用十分广泛,在控制领域、家用电器、食品储存等方面,都扮演着一个非常重要的角色。ATMEL公司采用国际先进的技术手段生产的AT89C52单片机与一般的单片机有所不同,它不仅是一种8位微控制器,具有低功耗和高性能的特点,还拥有非易失性Flash程序存储器。它的主要接口与引脚的特点如下。其引脚图如图2所示:P0口:P0口与其他端口不同,它的输出级无上拉电阻。作为通用输出I/O口使用时,输出级是开漏电路,故用其输出去驱动NMOS输入时外接上拉电阻,上拉电阻一般在10KΩ左右即可。这时每一位输出可以驱动4个LS型负载。用作输入时,应先向端口锁存器写1。把P0口用作地址/数据总线时,无需外接上拉电阻。作总线输入时,不需先向端口写1。P0口作总线时,每一位输出可以驱动8个LS型TTL负载。
1.003.jpg (39.67 KB, 下载次数: 63)
03:58 上传
图2 单片机AT89C52引脚图P1~P3口:P1~P3口接有上拉负载电阻,它们的每一位输出可以驱动4个LS型TTL负载。用作输出口时,任何TTL或NMOS电路都能以正常的方式驱动89C51系列单片机的P1~P3口。由于它们的输出级接有上拉电阻,因此,在使用时无需外接上拉电阻。由于单片机的端口输出电流一般为几毫安,当用作输出口去驱动一个晶体管的基极时,应在基极和端口之间串联一个电阻,以限制高电平时的输出电流。& && && && &&&P3口用作第二功能:当使用P3口的第二功能时,8个引脚有不同的意义。当某位用作第二功能输入时,该位的锁存器输出端被内部硬件自动置1,并且W在端口不作第二功能输出时保持为1,则与非门3输出低,所以FET截止,该位引脚为高位输入。因此读引脚信号无效,三台缓冲器无效,这样,从引脚输入的第二个能信号,经缓冲器后被直接送给CPU处理。当P3口的某一引脚用作第二功能时,该引脚不能用作通用I/O端口。P3口各个引脚的第二功能见下表1。
端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0(外中断0)P3.3INT1(外中断1)P3.4T0(定时/计时器0外部输入)P3.5T1(定时/计时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)
& && && && && && && && && &表1&&P3口的第二功能图RST: RST是复位信号输入端,高电平有效。当单片机正常工作时,该引脚出现两个机器周期的高电平就会使单片机复位;在上电时,由于振荡器需要一定的起振时间,该引脚的高电平必须保持10ms以上才能保证有效复位。& && && && &&&ALE: ALE是地址锁存器信号,每个机器周期输出两个正脉冲。在访问片外存储器时,下降沿用于控制外接的地址锁存器锁存从P0口输出的低8位地址。在没有接外部存储器时,可以将该引脚的输出作为时钟信号使用,因此它可对外输出时钟或用于定时目的。PROG:为片内程序存储器的编程脉冲输入端,低电平有效。& && && && &&&PSEN:片外程序存储器读选通信号输出端,每个机器周期输出两个负脉冲,低电平有效。在访问片外数据存储器时,该信号不出现。& && && && & EA/VPP:EA为片外程序存储器选择输入端,该引脚低电平时,使用外部程序存储器,为高电平时,使用片内程序存储器;VPP为片内程序存储器编程电压输入端。& && && && &&&XTAL1:该引脚接外部晶振和微调电容的一端,与单片机内振荡电路一起,产生由外部晶振决定的振荡频率。在使用外部时钟时,该引脚输入外部时钟脉冲。XTAL2:该引脚接外部晶振和微调电容的另一端,XTAL2接内部反向放大器的输出端,因此在使用外部时钟时,该引脚接地。3.3 DS18B20简介温度传感器是各种传感器中最常用的一种,早期使用的是模拟温度传感器,如热敏电阻,随着环境温度的变化,它的阻值也按照一定的函数关系发生线性变化,通过采集电阻两端的电压,再根据某个函数关系式就可以计算出当前环境温度。DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配置微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。3.3.1温度传感器DS18B20引脚介绍温度传感器DS18B20有两种封装:三脚TO-92直插式和八脚SOIC贴片式,其中三脚TO-92直插式是使用的最多、最普遍的封装。封装引脚如图3所示。
1.004.jpg (7.15 KB, 下载次数: 32)
03:58 上传
图3 DS18B20TO-92封装下表2列出了温度传感器DS18B20的引脚定义表2 DS18B20的引脚定义引脚定义GND电源负极DQ信号输入输出VDD电源正极NC空
引脚功能说明:GND :接地信号DQ :数据输入/输出引脚。开漏单总线接口引脚。当被用在寄生电源下,可以向器件提供电源。VDD :可选VDD引脚,电源电压范围3V~5.5V。当工作于寄生电源时,此引脚必须接地。3.3.2 DS18B20内部结构与特点 DS18B20的内部结构主要包括:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分组成。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位,12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中。DS18B20温度值格式如二进制表2.2所示,其中,前5位是符号位,如果测得的温度大于0,这5位为0,只要将测得的数值乘以0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于 0.0625即可得到实际温度。图4 DS18B20温度值格式表& && &
1.005.jpg (15.56 KB, 下载次数: 52)
03:58 上传
1、配置寄存器DS18B20配置寄存器各字节意义如表3下:表3 DS18B20寄存器中各位内容BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0TMR1RO11111
低五位一直都是&1&,其中TM是测试模式位,用于设置温度传感器DS18B20是在工作模式还是在测试模式。温度传感器DS18B20默认该位被设置为0,我们不要去修改。其中,R1和R0作用主要是设置分辨率,具体设置如表4所示:(DS18B20默认设置为12位)。表4 温度分辨率设置表RR1RRO分辨率温度最大转换时间000099位93.75ms0011110位187.5ms1100111位375ms1111112位750ms
2、高速暂存存储器该存储器一共有9个字节组成。当温度转换命令发出后,经温度传感器的转换所得的温度值以二进制补码形式存放在该存储器的前两个字节。单片机可通过单线接口读到该数据。读取时低位在前,高位在后。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。其中第9个字节是冗余检验字节。
温度传感器DS18B20暂存寄存器分布如表5所示。表5 DS18B20暂存寄存器分布寄存器内容字节地址温度值低位(LS Byte)0温度值高位(MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8
3.3.3 DS18B20 温度测量通信协议由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片中的数据处理。DS18B20有严格的通信协议来保证各位数据传输的正确性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从属设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输,其工作时序包括初始化时序、写时序和读时序。它们的工作时序如图5 (a)(b)(c)所示。
1.006.jpg (14.74 KB, 下载次数: 63)
03:58 上传
图5 (a)初始化时序DS18B20的初始化过程: 1. 先将数据线置高电平“1”。2. 延时,尽可能短一点。3. 数据线拉到低电平“0”。4. 延时750微秒(该时间的时间范围可以从480到960微秒)。5.数据线拉到高电平“1”。6. 延时等待。7. 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。8.将数据线再次拉高到高电平“1”后结束。
1.007.jpg (15.2 KB, 下载次数: 55)
03:58 上传
图5 (b)写时序 DS18B20的写操作过程: 1. 数据线先置低电平“0”。2. 延时确定的时间为15微秒。 3. 按从低位到高位的顺序发送字节,一次只发送一位。 4. 延时时间为45微秒。&&5. 将数据线拉到高电平。 6. 重复上(1)到(6)的操作直到所有的字节全部发送完为止。 7. 最后将数据线拉高。&&
1.008.jpg (16.14 KB, 下载次数: 51)
03:58 上传
图5 (c)读时序DS18B20的读操作过程: 1. 将数据线拉高“1”。 2. 延时2微秒。 3. 将数据线拉低“0”。 4. 延时15微秒。 5. 将数据线拉高“1”。 6. 延时15微秒。 7. 读数据线的状态得到1个状态位,并进行数据处理。 8. 延时30微秒。3.4系统硬件设计3.4.1 复位电路模块本系统采用按键复位电路,按键未按下时,它利用电容来实现复位,在接电瞬间,RST引脚的电位与电源VCC相同,随着充电电流的减少,RST的电位逐渐下降。此时只要保证RST为高电平的时间大于两个机器周期,便可以正常复位;按键按下时,此时电源VCC经两个电阻分压,在RST引脚产生一个复位高电平,从而实现复位。复位电路如图6所示。
1.009.jpg (11.9 KB, 下载次数: 43)
03:58 上传
图6 复位电路 3.4.2 时钟电路设模块时钟电路作用:单片机外部必须接上振荡器,提供的高频脉冲经过分频处理后,成为单片机内部时钟信号,作为片内各部件协调工作的控制信号。如果没有时钟信号,触发器的状态就不能改变,单片机内部的所有电路在完成一个任务后将最终达到一个稳定状态而不能再继续进行其它任何工作了。时钟电路如图7所示:
1.010.jpg (7.34 KB, 下载次数: 47)
03:58 上传
图7 时钟电路3.4.3 报警电路模块当被测环境温度超过温度上下限时,我们需要进行报警处理,这里用到的是蜂鸣器。蜂鸣器工作电流一般为10mA,而单片机的I/O口只能承受几毫安的电流,因此需要加三极管进行驱动,单片机的I/O口中的P1.4接三极管的基极,当P1.4为低电平时,三极管导通,5V的电压加载到蜂鸣器两端,于是蜂鸣器鸣叫;当P1.4高电平时,三极管截止,蜂鸣器不鸣叫。报警电路如下图8所示:
1.011.jpg (10.04 KB, 下载次数: 46)
03:58 上传
图8 报警电路3.4.4显示电路模块显示系统是单片机控制系统的重要组成部分,单片机应用系常采用7段LED数码管作为显示器,这种显示器具有耗电低、线路简单、价格低廉等优点。LED数码管显示器可以分为共阴极和共阳极两种结构。(1)共阴极结构:如果所有的发光二极管的阴极接在一起,称为共阴极结构;(2)共阳极结构:如果所有的发光二极管的阳极接在一起,称为共阳极结构。 七段LED显示器是由7个LED按—定的图形排列组成,如图9所示,七段LED显示器的各个二极管分别称为a、b、c、d、e、f、g段,有些七段显示器增加一个dp段表示小数点,也称为八段LED显示器。
1.012.jpg (7.39 KB, 下载次数: 48)
03:58 上传
图9 典型七段LED器件将数码管的引脚和单片机的数据输出口相连,控制输出的数据可以使数码管显示不同的数字和字符,通常称控制发光二极管的8位字节数据为段选码。7段LED段选码如表6所示。表6 7段LED段选码显示字符共阴极段选码共阳极段选码显示字符共阴极段选码共阳极段选码03FHC0HC3EHC6H106HF9HD5EHAH25BHA4HE79H86H34FHB0HF71H8EH56DH92HU3EHC1H67DH82HR31HCEH707HF8HY6EH91H87FH80H8.FFH00H96FH90H“灭”00HFFHA77H88HB7CH83H
& & 本设计采用四位共阴极动态显示方式,可以直接读取温度值,显示温度可以精确到1℃。图10为显示电路的连接图。
1.013.jpg (15.84 KB, 下载次数: 45)
03:58 上传
图10 显示电路3.4.5按键电路模块该电路采用弹性按键。按键电路的作用是手动设置温度的上下限。按下K4,进行上下限报警切换,通过K1和K2调节温度上下限,最后,按下K3确认。具体的按键电路图如下图11所示:& && && && && && &
1.014.jpg (12.38 KB, 下载次数: 50)
03:58 上传
图11 按键电路3.4.6温度检测电路模块该电路中温度传感器采用Dallas公司生产的数字温度传感器DS18B20。该芯片硬件接口简单,使用方便,且节省大量的导线,具有很好的通用性。该系统中将单片机的P1.1引脚与DS18B20的数据线连接。具体的温度检测电路图如下图12所示:
1.015.jpg (8.66 KB, 下载次数: 60)
03:58 上传
图12 温度检测电路4系统软件设计 4.1系统主程序设计主程序是系统的监控程序,在程序运行的过程中必须先经过初始化,包括开机启动子程序,中断程序,报警函数,按键扫描子程序以及控制端口的初始化工作。系统在初始化完成后就进入温度测量程序,实时的测量当前的温度并通过显示电路在LCD上显示。程序中以中断的方式来重新设定温度的上下限,根据硬件设计完成对温度的控制,系统软件设计的总体流程图如下图13。
1.016.jpg (45.84 KB, 下载次数: 44)
03:58 上传
& && && && &&&图13 系统主程序框图
主程序如下:void&&main(){& && && && & & & TCON=0x01;& && && &//定时器T0工作在01模式下& & TMOD=0X01;& && && && & & && && && &&&TH0=0XD8;& && && & //装入初值& && && && &&&TL0=0XF0;& && && && &&&EA=1;& && && && && &//开总中断& && && && &&&ET0=1;& && && && &&&//开T0中断& && && && &&&TR0=1;& && && && &&&//T0开始运行计数& && && && &&&EX0=1;& && && && &&&//开外部中断0& && && && &&&for(n=0;n&500;n++)& &&&//显示启动LOGo&- - - -&& && && && &&&{bell=1;warn=1;logo();}& && && && &&&Red=0;& && && && &&&while(1)& && && && &&&{& && && && && && &key();& && && && && && && && && & ss=ReadTemperature();& && &&&Show();& && && && && && && && && & alarm();& && && & //报警函数& && && && && && && && && & if(Flag==1)& && && && && && && && && & {bell=!& && && && && && && && && & warn=!}& &&&//蜂鸣器滴滴响& && && && && && && && && & else {bell=1;& && && && && && && && && && && & warn=1;}& && && && & & && && && &&&}& && && && & }4.2 DS18B20初始化子程序DS18B20的初始化相当于DS18B20数据头的作用,DS18B20检测到初始化电平,准备开始接收或发送数据。初始化子程序流程图如下图14所示。
1.017.jpg (20.59 KB, 下载次数: 50)
03:58 上传
& && && && && && && && &&&图14 DS18B20初始化程序流程图DS18B20初始化程序如下:Init_DS18B20(void)& && && && &&&//传感器初始化{& && && && &&&uchar x=0;& && && && &&&DATA = 1;& & //DQ复位& && && && &&&delay(10);& & //稍做延时& && && && &&&DATA = 0;& & //单片机将DQ拉低& && && && &&&delay(80);& &//精确延时 大于 480us& && && && && &&&DATA = 1; //拉高总线& && && && &&&delay(20);& && && && &&&x=DATA;& & //稍做延时后 如果x=0则初始化成功 x=1则初始化失败& && && && &&&delay(30);}4.3 DS18B20读取温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。图15为读取数据流程图。
1.018.jpg (24.17 KB, 下载次数: 51)
03:58 上传
& && && && && && &&&图15 DS18B20读取温度子程序流程图读取温度子程序如下:int ReadTemperature(void)& &&&//读取温度{& && && && &&&uchar a=0;& && && && &&&uchar b=0;& && && && &&&int t=0;& && && && &&&float tt=0;& && && && &&&Init_DS18B20();& && && && &&&WriteOneChar(0xCC);& & // 跳过读序号列号的操作& && && && &&&WriteOneChar(0x44);& & // 启动温度转换& && && && &&&Init_DS18B20();& && && && &&&WriteOneChar(0xCC);& &//跳过读序号列号的操作& && && && &&&WriteOneChar(0xBE);& & //读取温度寄存器等(共可读9个寄存器) 前两个就是温度& && && && &&&a=ReadOneChar();& && & //低位& && && && &&&b=ReadOneChar();& && & //高位& && && && &&&t=b;& && && && &&&t&&=8;& && && && &&&t=t|a;& && && && &&&tt=t*0.0625;& && && && &&&t= tt*10+0.5;& && && && &&&return(t);}4.4 显示数据处理子程序读出温度数据后,LOW的低四位为温度的小数部分,LOW的高四位和HIGH的低四位为温度的整数部分,HIGH的高四位全部为1表示负数,全为0表示正数。所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。小数部分进行四舍五入处理:大于0.5℃的话,向个位进1;小于0.5℃的时候,舍去不要。当数据是个负数的时候,显示之前要进行数据转换,将其整数部分取反加一。还因为DS18B20最低温度只能为-55℃,所以可以将整数部分的最高位换成一个“-”,表示为负数。图16为温度数据处理程序的流程图:
1.019.jpg (39.27 KB, 下载次数: 42)
03:58 上传
& && && && && & 图16 显示数据处理子程序
以下是显示正值子函数的程序:void&&display(){& && && && && && && && && && && && && &&&buf[1]=temp/1000;& && && &&&//显示百位& && && && &&&buf[2]=temp/100%10;& && &&&//显示十位& && && && &&&buf[3]=temp%100/10;& && &&&//显示个位& && && && &&&buf[0]=temp%10;& && && &&&//小数位& && && && &&&for(j=0;j&3;j++)& && && && &&&{& && && && &&&P2=0& && && && && && && && && && && && && & // 初始灯为灭的& & P0=0x00;& && && && &&&P2=0 //显示小数点& && && && &&&P0=0x80; //显示小数点& && && && &&&delay(300);& && && && && && && && && && & P2=0& && && && && && && && && && && && && & // 初始灯为灭的& & P0=0x00;& & P2=0xf7;& && && && && && && && && && && && && &&&//片选LCD1& & P0=table[buf[1]];& && && && &&&delay(300);& && && && &&&P2=0& & P0=0x00;& & P2=0& && && && && &&&//片选LCD2& & P0=table[buf[2]];& && && && &&&delay(300);& && && && &&&P2=0& & P0=0x00;& && && && &&&P2=0X& && && && && && && && && && && && && & //片选LCD3& && && && &&&P0=table[buf[3]];& && && && &&&delay(300);& && && && &&&P2=0& & P0=0x00;& && && && &&&P2=0X& && && && &&&P0=table[buf[0]];& && && && && && && &&&//片选LCD4& && && && & & && && && &&&delay(300);& && && && &&&P2=0& && && && &&&}}4.5按键扫描子程序该系统支持手动设置温度上下限,而按键扫描的主要功能就是手动设置温度的上下限。系统默认的温度上下限是10℃~32℃。当被测温度值处于0℃~125℃时,若被测温度没有超过上下限,则蜂鸣器不鸣叫,否则蜂鸣器鸣叫;当被测温度值处于0℃以下时,蜂鸣器鸣叫较急促。为了防止抖动,按键电路中都要消抖的措施,本设计中是采用的软件消抖,在单片机检测到某个键按下后,延时10ms再监测,如果仍然按下,才确定按下了该键。按键K4、K1、K2、K3分别与单片机的P2.4-P2.7引脚连接。默认状态设置温度上限,若按下按键K4,也就是使P2.4为低电平时,进入温度下限的设置,再按一次进入温度上限的设置;在每个温度上下限设置里面,按下K1一次增加1℃温度值,按下按键K一次减小1℃温度值,最后按K3确定。按键扫描子程序的流程图如下图17所示:
1.020.jpg (41.92 KB, 下载次数: 53)
03:58 上传
& && && && && && && && && &图17 按键扫描子程序
按键扫描子程序如下:void key()& && && && && && && && && &//按键扫描子程序{& &if(k1!=1)& && && && &&&{& && && && && &&&delay(20);& && && && && &&&if(k1!=1)& && && && && &&&{& && && && && && && && && & while(k1!=1)& && && && && && && && && && &{ key_to1();& && && && && && && && && && &&&for(n=0;n&8;n++)& && && && && && && && && && &&&Show();& && && && && && && &}& && && && && &&&}& && && && &&&}& && && && &&&if(k2!=1)& && && && &&&{& && && && && && && && && & delay(20);& && && && && && && && && & if(k2!=1)& && && && && && && && && & {& && && && && && && && && && &while(k2!=1)& && && && && && && && && && && && && && &{ key_to2();& && && && && && && && && && && && && && &&&for(n=0;n&8;n++)& && && && && && && && && && && & Show();& && && && && && && && && && && && && && &}& && && && && && && && && & }& && && && &&&}& && && && & & && && && &&&if(k3!=1)& && && && &&&{& && && && &&&TR0=1;& && && && &&&//复位,开定时& && &&&temp=ReadTemperature();& && && && &&&}& && && && &&&if(k4!=1)& && && && &&&{&&delay(20);& && && && && &&&if(k4!=1)& && && && && &&&{&&while(k4!=1);& && && && && && &&&set=!& && && && && && && && && && & if(set==0)& && && && && && && && && && & { Red=0;Green=1;}& && && && && && && && && && & else { Green=0;Red=1;}& && && && && && && && && & }& && && && &&&}}5 系统软硬件调试本次设计采用Keil uVision2来编写C语言程序,通过它的编译器进行编译、连接,最后将生成的机器码下载到单片机上。Keil C51编译器是目前最流行的开发MCS-51系列单片机的软件,它具有C编辑器、宏汇编、链接器、库管理和一个功能强大的仿真调试等在内的功能,并通过一个集成开发环境将这些部份组合在一起。打开Proteus ISIS,在Proteus ISIS编辑窗口中单击元件列表之上的“P”按钮 ,添加元件及放置元件。按照正确的方法,合理地布局将各个元器件连线,得到如下界面,如图18所示:
1.021.jpg (85.63 KB, 下载次数: 69)
03:58 上传
图 18 整体电路图
把刚才产生的可执行hex文件下载到单片机中,单击运行按钮,电路瞬间导通,程序首先进入Logo函数进行开机检测。此时单片机给正负温度指示灯和报警指示灯高电平,给温度上限指示灯低电平,使它们正常发光,给共阴极数码管相应的位高电平,使其动态显示温度为85℃。由于85℃不在默认温度上下限10℃~32℃之间,所以此时正温度指示灯亮,报警指示灯闪烁,蜂鸣器也开始鸣叫。大约200ms后,开机检测结束,温度回到当前环境温度5℃,由于默认的温度上下限是10℃~32℃,所以正温度指示灯亮,报警指示灯闪烁,蜂鸣器鸣叫。仿真结果如图19所示。
1.022.jpg (58.1 KB, 下载次数: 54)
03:58 上传
图19 数字温度计仿真图我们再次调节环境温度,使环境温度处于15℃,由于此时温度不在温度上下限10℃~32℃之间,因此单片机给正温度指示灯高电平,给报警指示灯低电平,所以正温度指示灯高电平亮,报警指示灯熄灭,蜂鸣器也不鸣叫。仿真结果如图20所示。
1.023.jpg (54.58 KB, 下载次数: 53)
03:58 上传
图20 数字温度计仿真图再次调节温度,使温度在-10℃,此时温度不在温度上下限之间,此时单片机给负温度指示灯高电平,报警指示灯高电平,所以负温度指示灯亮,报警指示灯闪烁,并且蜂鸣器鸣叫较为急促。仿真结果如图21所示。
1.024.jpg (53.84 KB, 下载次数: 52)
03:58 上传
图21 数字温度计仿真图默认情况下设置温度上限,若按下K4进入温度下限设置。通过按键K1和K2增加或减少温度值,最后按下K3确认。比如设置温度上下限为15℃~40℃,当环境温度处于35℃时,而35℃在设置的温度上下限15℃~40℃之间,因此报警电路不工作。仿真电路如图22所示。
1.025.jpg (57.04 KB, 下载次数: 47)
03:58 上传
图22 数字温度计仿真图当环境温度处于12℃时,当温度在温度上下限15℃~40℃之间时,报警电路开始工作,报警指示灯闪烁,蜂鸣器鸣叫。仿真电路如图23所示。
1.026.jpg (54.89 KB, 下载次数: 62)
03:58 上传
图23 数字温度计仿真图结果分析:本文介绍并设计的数字温度计的基本测量范围是-30℃~125℃,并且具有自动报警功能和默认温度上下限(10℃~32℃),还可以手动设置温度上下限,用4位一体数码管显示设置温度的上下限和当前环境的温度。由于所采用的是DS18B20温度传感器,它的可测量范围是-55℃~125℃,测量温度在-10℃~85℃之间时的可分辨温度是0.5℃,我们将小数位始终显示为0,也即显示的温度精度是1℃。如果当前环境温度在默认的温度上下限之间,主函数不会调用报警子程序,报警电路不会工作,蜂鸣器也不鸣叫;如果当前环境温度在默认的温度上下限之外,主函数就会调用报警子程序,此时单片机送给报警指示灯蜂鸣器高电平,报警指示灯闪烁,蜂鸣器鸣叫,直到环境温度回到默认的温度上下限之间。当然,由于本设计支持手动设置温度上下限,我们也可以手动设置温度上下限。由仿真结果及设计要求完成的指标可知,该设计基本符合设计要求。
总结毕业设计完成了,在这个过程中使我觉得不论从理论知识还是从实际设计中都学到了不少知识。在写论文开始的初期,由于对温度传感器的较陌生,我对于论文的结构以及文献选取等方面都有很多问题,通过对温度计原理的认识,最后确定了设计温度计的功能以及各类功能模块的器件选择。认识到很多知识以前都没有接触过,所以制定了一个大致的计划,希望能够很好的完成论文。在接下来的毕业设计中,主要是深入对前期温度设计方案的认识。在这期间,很多知识都是第一次接触,通过查找了很多知识,认真阅读,但困难最大的还是硬件的设计和程序编写方面,第一次设计起来觉得相当吃力,刚开始不知道从何下手。后来,通过老师的指导和同学的帮助,克服了种种困难完成了设计。在作毕业设计的过程中,还认识到理论对实践有很大的指导作用,只有在正确的理论指导下,才能设计出合乎实际需要的系统电路。这次毕业设计是对大学所学知识的一次实际应用,同时对自学能力提出了很高的要求,所以理论不能联系实际,就是严重的错误,我们不能只为了考试而学习。并且在学习的过程中更要广阔的汲取各方面的知识,才能更好的为以后的工作打好基础。
共享资料的黑币奖励!
51黑有你更精彩!!!
留个标记!^_^^_^^_^
大神跪求头文件,加的有的蒙!
大神能不能也发一下头文件什么的
不清楚图片
写的挺好的可以学习一下
超级给力,可以参考一波。
下载下来看看怎么样
Powered by}

我要回帖

更多关于 ds18b20与单片机连接 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信