基于单片机的温度报警器设计
单片机小项目——基于51单片机的温度报警器

单⽚机⼩项⽬——基于51单⽚机的温度报警器单⽚机⼩项⽬介绍项⽬功能介绍编程语⾔:C语⾔。
开发环境:keil。
主要功能:1602屏显⽰时间和温度,当温度超过预定值时蜂鸣器⼯作报警。
此项⽬只是作为单⽚机初学者的⼀个⼩测验。
硬件资源分配1602屏——P0,P2^7,P2^5,P2^6。
串⼝——P2^0,P2^1。
传感器——DS18B20 P3^7;DS1302 P3^4,P3^5,P3^6。
蜂鸣器——P1^6。
LCD1602屏配置在h⽂件中声明端⼝和函数:#ifndef __LCD1602_H_#define __LCD1602_H_#include<reg52.h>//重定义关键字#ifndef uchar#define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endif//定义端⼝#define LCD1602_DATAPINS P0sbit LCD1602_E=P2^7;sbit LCD1602_RW=P2^5;sbit LCD1602_RS=P2^6;//函数声明void Lcd1602_Delay1ms(uint c); //延时函数void LcdWriteCom(uchar com); //写⼊命令void LcdWriteData(uchar dat); //写⼊数据void LcdInit(); //LCD初始化⼦程序#endif在LCD1602.c⽂件中写⼊时序和命令等函数代码:#include "LCD1602.h"/***************************延时函数**************************/void Lcd1602_Delay1ms(uint c) //误差 0us{uchar a,b;for (; c>0; c--){for (b=199;b>0;b--){for(a=1;a>0;a--);}}}/***************************底层函数**************************/void LcdWriteCom(uchar com) //写⼊命令{LCD1602_E = 0; //使能LCD1602_RS = 0; //选择发送命令LCD1602_RW = 0; //选择写⼊LCD1602_DATAPINS = com; //放⼊命令Lcd1602_Delay1ms(1); //等待数据稳定LCD1602_E = 1; //写⼊时序Lcd1602_Delay1ms(5); //保持时间LCD1602_E = 0;}void LcdWriteData(uchar dat) //写⼊数据{LCD1602_E = 0; //使能清零LCD1602_RS = 1; //选择输⼊数据LCD1602_RW = 0; //选择写⼊LCD1602_DATAPINS = dat; //写⼊数据Lcd1602_Delay1ms(1);LCD1602_E = 1; //写⼊时序Lcd1602_Delay1ms(5); //保持时间LCD1602_E = 0;}void LcdInit() //LCD初始化⼦程序{LcdWriteCom(0x38); //开显⽰LcdWriteCom(0x0c); //开显⽰不显⽰光标LcdWriteCom(0x06); //写⼀个指针加1LcdWriteCom(0x01); //清屏LcdWriteCom(0x80); //设置数据指针起点}在main.c⽂件中运⽤:(这⾥先让显⽰屏显⽰⾃定义的内容,稍后再做更改)#include "reg52.h"#include "LCD1602.h"unsigned char Disp[]=" Pechin Science ";void main(){unsigned char i=0;LcdInit();for(i=0;i<16;i++){LcdWriteData(Disp[i]);}while(1){}}DS18B20温度传感器配置(并将其与LCD协同使⽤)在DS18B20.c⽂件中写⼊相关函数:1 #include "DS18B20.h"234/***************************延时函数**************************/5void Delay1ms(unsigned int y)6 {7 unsigned int x;8for( ; y>0; y--)9 {10for(x=110; x>0; x--);11 }12 }131415/***************************底层函数**************************/1617 unsigned char Ds18b20Init() //初始化函数18 {19 unsigned char i;20 DSPORT = 0; //将总线拉低480us~960us21 i = 70;22while(i--); //延时642us23 DSPORT = 1; //然后拉⾼总线,如果DS18B20做出反应会将在15us~60us后总线拉低25while(DSPORT) //等待DS18B20拉低总线26 {27 Delay1ms(1);28 i++;29if(i>5) //等待>5MS30 {31return0; //初始化失败32 }3334 }35return1; //初始化成功36 }373839void Ds18b20WriteByte(unsigned char dat) //写⼊⼀个字节40 {41 unsigned int i, j;4243for(j=0; j<8; j++)44 {45 DSPORT = 0; //每写⼊⼀位数据之前先把总线拉低1us46 i++;47 DSPORT = dat & 0x01; //然后写⼊⼀个数据,从最低位开始48 i=6;49while(i--); //延时68us,持续时间最少60us50 DSPORT = 1; //然后释放总线,⾄少1us给总线恢复时间才能接着写⼊第⼆个数值51 dat >>= 1;52 }53 }545556 unsigned char Ds18b20ReadByte() //读取⼀个字节57 {58 unsigned char byte, bi;59 unsigned int i, j;60for(j=8; j>0; j--)61 {62 DSPORT = 0; //先将总线拉低1us63 i++;64 DSPORT = 1; //然后释放总线65 i++;66 i++; //延时6us等待数据稳定67 bi = DSPORT; //读取数据,从最低位开始读取68/*将byte左移⼀位,然后与上右移7位后的bi,注意移动之后移掉那位补0。
基于STC89C51单片机的温度控制报警系统设计

基于STC89C51单片机的温度控制报警系统设计摘要:本文基于STC89C51单片机设计了一种温度控制报警系统,通过温度传感器检测环境温度,并根据设定的温度范围控制风扇运转并发出报警信号,以实现室内温度自动控制。
本文介绍了系统硬件设计、软件设计以及测试实验,并通过实验数据验证了系统的可行性和稳定性。
关键词:STC89C51单片机;温度控制;报警系统;温度传感器一、引言随着科技的不断发展,自动化控制技术在各个领域得到广泛应用。
温度自动控制是其中的一个重要应用方向。
在家庭、工厂以及医院等场所,温度的合理控制对于人们的身体健康和环境的稳定运转都有着重要的影响。
因此,设计一种基于STC89C51单片机的温度控制报警系统具有重要的研究价值和应用前景。
二、系统设计2.1 系统功能本系统主要功能为:实时检测环境温度,根据设定的温度范围控制风扇运转,并发出报警信号以实现室内温度自动控制。
2.2 系统硬件设计本系统主要硬件设计包括:温度传感器模块、LED指示灯、蜂鸣器、风扇以及STC89C51单片机。
温度传感器模块采用DS18B20型号,通过单总线接口与单片机相连,用于检测室内温度。
LED指示灯用于显示系统状态,包括运行状态和报警状态。
蜂鸣器用于发出报警信号。
风扇用于控制系统温度,实现温度自动控制。
STC89C51单片机负责系统的数据采集、运算和控制。
2.3 系统软件设计本系统的软件设计分为两部分:系统初始化和主程序部分。
系统初始化包括:串口初始化、温度传感器初始化、LED指示灯初始化、蜂鸣器初始化、风扇初始化等,主要用于对系统各个硬件进行初始化设置。
主程序部分包括:温度采集、温度判断、风扇控制和报警控制等。
主要通过程序实现室内温度的采集和判断,并根据设定温度范围控制风扇和报警控制信号等。
三、实验结果在实际测试中,将系统置于模拟室内环境中进行测试,测试数据显示本系统能够实现温度自动控制,并在温度超出设定范围时发出报警信号。
基于单片机的温度报警系统报告

基于单片机的温度报警系统报告温度报警系统是一种应用电子技术和单片机技术相结合的智能化设备,其主要功能是监测环境温度并在温度超过设定阈值时发出报警信号。
本报告将介绍基于单片机的温度报警系统的设计原理、硬件和软件实现以及系统的性能评估。
一、设计原理单片机温度报警系统的设计原理主要分为三个部分:传感器模块、控制模块和报警模块。
传感器模块用于检测环境温度,通常采用数字温度传感器,如LM35、控制模块使用单片机来读取传感器模块的温度值,并与预设的温度阈值进行比较。
如果温度超过阈值,控制模块将触发报警模块发出报警信号。
二、硬件实现1.单片机选择:常用的单片机有8051、PIC、AVR等。
根据实际需求选择性能适中的单片机。
2.传感器模块:采用数字温度传感器LM35,可提供线性的电压输出与温度变化之间的关系。
3.控制模块:通过单片机读取LM35的模拟输出电压,并通过AD转换将其转化为数字温度值。
然后与预设的温度阈值进行比较。
如果超过阈值,则触发报警。
4.报警模块:可选择蜂鸣器、LED灯等作为报警的输出设备。
三、软件实现1.初始化:设置单片机的各个引脚(输入或输出)、定时器、ADC等。
2.ADC转换:读取LM35的模拟输出电压并进行AD转换,将其转化为数字温度值。
3.温度比较:将读取到的温度值与预设的温度阈值进行比较。
4.报警触发:如果温度超过阈值,则触发报警,通过控制报警模块(如蜂鸣器或LED)输出报警信号。
5.延时处理:为了避免频繁的报警,可以设置一个延时处理时间,即在触发报警后,系统将进入一个延时状态。
四、系统性能评估1.精度:温度报警系统的精度主要依赖于传感器模块和ADC的精度。
2.响应时间:系统的响应时间取决于单片机的运行速度和各个模块的设计。
3.可靠性:系统的可靠性与硬件和软件的稳定性相关,如单片机的抗干扰性、温度传感器的稳定性等。
4.扩展性:系统的可扩展性决定了其在实际应用中的灵活性和适用范围。
综上所述,基于单片机的温度报警系统设计原理清晰,硬件和软件实现相对简单,能够实现对环境温度的准确监测和报警功能。
基于AT89C51单片机温度报警系统设计与制作.

一、摘要我们介绍的是一种基于单片机控制的数字温度报警,本温度系统具有多功能性,即可以当数字温度计使用,显示当前环境温度,又可以作为报警器使用,设置报警温度,当温度不在设置范围内时,可以报警,并采取措施使温度下降。
该温度报警系统控制器使用单片机AT89C51,测温传感器使DS18B20,用2位共阳极LED数码管,实现温度显示,能准确达到以上要求。
二、设计方案1、方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
2、方案二进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
温度报警系统电路设计总体设计方框图如图1所示1、单片机主板电路单片机AT89C51具有低电压供电和体积小等特点,该模块包括中央处理CPU -AT89C51、时钟电路及复位电路;图2复位电路图3 时钟电路2、DS18B20温度传感器与单片机的接口电路DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
该电路完成了信号的采集、转换和传输。
图43、上下限报警调整电路分别调整温度的上下限报警设置,有“+“、”“-”、“确定”等键图5上下限报警调整电路4、温度显示电路显示当前测得的温度,数码管采用74LS247驱动图6温度显示电路5、报警电路当环境温度超过设定温度时,蜂鸣器鸣叫,红灯点亮,发生报警;当人员发现警报时,可按图8中的按钮,暂时中断蜂鸣器的鸣叫。
基于51单片机温度警报器设计 单片机课程设计

《单片机原理及应用》课程设计任务书二级学院:电子信息与电气工程学院专业:班级:课程设计题目:基于单片机的数字温度报警器的设计姓名:学院:专业:班级:学号:指导教师:2011年9月15日目录摘要 (4)1 引言 (4)1.1课题背景 (4)1.2研究内容和意义 (6)2 芯片介绍 (6)2.1 DS18B20概述 (6)2.1.1 DS18B20封装形式及引脚功能 (7)2.1.2 DS18B20内部结构 (7)2.1.3 DS18B20供电方式 (9)2.1.4 DS18B20的测温原理 (10)2.1.5 DS18B20的ROM命令 (12)2.2 AT89C52概述 (13)2.2.1单片机AT89C52介绍 (13)2.2.2功能特性概述 (13)3 系统硬件设计 (14)3.1 单片机最小系统的设计 (14)3.2 温度采集电路的设计 (15)3.3 LED显示报警电路的设计 (16)4 总结 (16)致谢 (17)参考文献 (18)附录A 总电路图 (19)附录B 原器件清单 (19)附录C 温度报警器部分程序 (20)摘要随着时代的进步和发展,温度的测试已经影响到我们的生活、工作、科研、各个领域,已经成为了一种非常重要的事情,因此设计一个温度测试的系统势在必行。
本文主要介绍了一个基于AT89C52单片机的数字温度报警器系统。
详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度的采集和报警,并可以根据需要任意上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当做温度处理模块潜入其他系统中,作为其他主系统的辅助扩展。
DS18B20与AT89C52结合实现最简温度报警系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
基于单片机温度报警器的设计

基于单片机温度报警器的设计温度报警器是一种常见的安全设备,用于监测环境温度并在温度超过设定阈值时发出警报。
基于单片机的温度报警器可以实现温度监测、报警和数据记录等功能,具有灵敏度高、可靠性好、成本低等优点。
下面将描述一种基于单片机的温度报警器的设计。
设计思路:本设计采用温度传感器、单片机、蜂鸣器和LCD液晶显示器等组成,实现温度监测和报警功能。
温度传感器用于测量环境温度,将温度值传输给单片机进行处理;单片机负责对温度值进行比较和判断,当温度超过设定阈值时,通过控制蜂鸣器发出警报声,并在LCD显示器上显示温度值和警报信息。
硬件设计:1.温度传感器:可以选择数字温度传感器,如DS18B20。
将温度传感器连接到单片机的数字引脚上,通过引脚读取传感器输出的数字信号。
2.单片机:可以选择常见的8位单片机,如STC89C52、单片机具有较强的处理能力和丰富的IO资源,可以用于读取和处理温度传感器数据,并控制蜂鸣器和LCD显示器。
3.蜂鸣器:选择合适的蜂鸣器,并将其连接到单片机的IO引脚上。
当温度超过设定阈值时,单片机将IO引脚置高,使蜂鸣器发出警报声。
4.LCD液晶显示器:选择适配器单片机的LCD显示器,通过单片机的IO引脚与单片机连接。
当温度超过设定阈值时,将警报信息显示在LCD上。
软件设计:1.硬件初始化:设置单片机相关IO引脚为输入输出模式,初始化温度传感器和LCD显示器。
2.温度采集:通过单片机的数字引脚读取温度传感器输出的数字信号,并进行相应的数据转换,得到环境温度值。
3.温度监测:将环境温度值与设定的阈值进行比较,若温度超过阈值则触发报警。
4.报警处理:当温度超过设定阈值时,通过设置单片机的IO引脚,控制蜂鸣器发出警报声,并在LCD显示器上显示警报信息。
5.数据记录:可以选择将温度数据保存到EEPROM中,方便后续查询和分析。
总结:基于单片机的温度报警器是一种简单但实用的安全设备,通过温度传感器和单片机的配合,可以实现对环境温度的实时监测和报警功能。
基于单片机的温度报警器设计(方案)

天津滨海职业学院全日制高等职业教育毕业实践环节毕业设计(典型性项目)说明书基于单片机的温度报警器设计(方案)作者:李佳璐院系:天津滨海职业学院机电工程系专业:电子信息工程技术年级:2012级学号:20120012113指导教师:×××时间:2015年4月主要内容简介在农业生产中,温室的温度很难把握。
往往超过或低于允许值,致使大批良种的报废,耽误农时,影响生产。
这就需要设计一个温度报警器,在环境温度超过一定范围时报警,来提醒使用者。
基于以上背景设计基于单片机的温度报警器。
本设计采用ATMEL公司的ATmega16单片机为硬件核心系统,添加数码管、按键和温度传感器芯片,组成完整的硬件系统。
采用C语言为编程语言,进行系统的软件系统开发。
通过本系统硬件、软件部分设计完成如下目标:1、完成系统的硬件部分设计,硬件部分包括电源、显示、按键、温度接口、报警触发等部分设计。
在此基础上保证软件功能实现。
2、温度报警器可以通过按键方便设定报警范围。
3、温度报警器通过数码管显示实时显示测量的环境温度。
当环境温度温度超出设定范围时,启动报警。
本设计硬件制作方便,通过C语言程序实现软件设计,可移植性强,能够精准的对环境进行温度测量并显示,实用性强。
关键字:M16;18B20;温度控制;C语言目录一、绪论 (4)(一)研究背景与现状 (4)(二)设计内容及要求 (4)二、关键技术简介 (5)三、M16单片机概述 (6)(一)ATmega16 的主要性能 (6)(二)M16的基本组成及引脚 (6)(三)M16的引脚基本功能 (6)(四)外部晶体振荡器 (8)四、温度传感器18B20介绍 (8)(一)温度传感器18B20的特性 (8)(二)温度传感器18B20的基本组成,见下图4所示。
(9)(三)温度传感器18B20的测温操作 (10)五、硬件设计 (12)(一)硬件电路设计 (12)(二)电源和复位电路设计 (13)(三)输入、输出部分设计 (14)(四)驱动部分设计 (15)六、软件设计 (15)(一)显示部分设计 (15)(二)按键检测设计 (21)(三)1-wire 是一种通讯协议实现 (23)(四)软件总体设计 (27)一、绪论(一)研究背景与现状1.在农业生产中,温室的温度很难把握。
基于51单片机的温度报警器设计

基于51单片机的温度报警器设计引言:温度报警器是一种用来检测环境温度并在温度超过设定阈值时发出警报的装置。
本文将基于51单片机设计一个简单的温度报警器,以帮助读者了解如何利用单片机进行温度监测和报警。
一、硬件设计硬件设计包括传感器选择、电路连接以及报警装置的设计。
1.传感器选择温度传感器的选择非常重要,它决定了监测温度的准确性和稳定性。
常见的温度传感器有热敏电阻(如NTC热敏电阻)、热电偶以及数字温度传感器(如DS18B20)。
在本设计中,我们选择使用DS18B20数字温度传感器,因为它具有高精度和数字输出的优点。
2.电路连接将DS18B20与51单片机连接,可以采用一根三线总线(VCC、GND、DATA)的方式。
具体连接方式如下:-将DS18B20的VCC引脚连接到单片机的VCC引脚(一般为5V);-将DS18B20的GND引脚连接到单片机的GND引脚;-将DS18B20的DATA引脚连接到单片机的任意IO引脚。
3.报警装置设计报警装置可以选择发出声音警报或者显示警报信息。
在本设计中,我们选择使用蜂鸣器发出声音警报。
将蜂鸣器的一个引脚连接到单片机的任意IO引脚,另一个引脚连接到单片机的GND引脚。
二、软件设计软件设计包括温度读取、温度比较和报警控制的实现。
1.温度读取通过51单片机的IO引脚和DS18B20进行通信,读取DS18B20传感器返回的温度数据。
读取温度数据的具体步骤可以参考DS18B20的通信协议和单片机的编程手册。
2.温度比较和报警控制将读取到的温度数据和设定的阈值进行比较,如果温度超过阈值,则触发报警控制。
可以通过控制蜂鸣器的IO引脚输出高电平或低电平来控制蜂鸣器是否发出声音警报。
三、工作原理整个温度报警器的工作原理如下:1.首先,单片机将发出启动信号,要求DS18B20开始温度转换。
2.单片机等待一段时间,等待DS18B20完成温度转换。
3.单片机向DS18B20发送读取信号,并接收DS18B20返回的温度数据。
基于51单片机温度报警器设计

基于51单片机温度报警器设计
以上
研究背景
随着电子技术的发展,温度报警器的应用已有很大的普及,它可以准确的检测温度,
并且控制环境温度,从而给生活带来很多实施便利性。
51单片机温度报警器的研究是一项极具挑战的任务,因为除了要考虑温度传感原理,还需要研究51单片机的软硬件结构。
本研究即以51单片机为主要研究环节,结合温度特性,设计一款简单实用的温度报警器。
研究方法
本研究使用51单片机,采用51系统软件编程,结合串口程序实现温度检测功能。
51
芯片单片机能够轻松实现温度采集、数据处理、报警控制功能,并且能够满足用户的一些
特定功能实现要求。
本研究还考虑了温度传感器、报警器等元件,并在实验过程中对报警
器进行了优化改进,保证数据测量和控制精度。
研究结果
通过实验,本研究设计出一款温度报警器,它采用51单片机,结合温度传感器和报
警器而成。
51单片机校准温度采集、数据处理计算,报警器可以根据用户自定义的告警值发出声光报警。
整个系统对温度的测量和报警控制能够达到用户的要求。
此外,该温度报
警器采用独立模块化设计,在现场控制时可以灵活配置参数,增加报警器的功能性。
通过本研究设计出一款51单片机温度报警器,能够准确地检测温度,当温度超出预
定值时,发出报警,实现环境温度的控制。
同时,本研究还研发出独立模块化的系统,可
以灵活的配置参数,显著提高其报警功能。
基于单片机的温度报警器设计

温度报警器1、作品介绍:我个人设计的温度报警器是基于51单片机开发的一种能时时检测温度,并且报警的器件,它采用AT89S52单片机、DS18B20、1602液晶显示器等电学元器件,通过编写程序和一定的算法,最终实现的功能是:开机后单片机自动运行一套程序,使DS18B20检测室内的温度,并通过一定的算法对数据采样处理,计算出室内的温度,通过1602液晶显示器显示出来,当室温超过设定的值时,单片机驱动峰鸣发出声音!2、器件介绍:a、A T89S52单片机:AT89S52是一种低功耗、高性能8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
b、DS18B20测温芯片:DS18B20数字温度传感器,采用DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点: (1 )采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯。
单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
⏹(2 )测量温度范围宽,测量精度高DS18B20 的测量范围为-55 ℃~+ 125 ℃;在-10~+ 85°C 范围内,精度为±°C 。
⏹(3 )在使用中不需要任何外围元件。
⏹(4 )持多点组网功能多个DS18B20 可以并联在惟一的单线上,实现多点测温。
基于51单片机的温度警报器的设计

基于51单片机的温度警报器的设计温度警报器是一种能够实时监测温度并在温度超过设定阈值时发出警报的装置。
本设计基于51单片机,通过温度传感器、LCD显示屏、蜂鸣器等元件实现温度监测和报警功能。
设计方案如下:1.硬件设计:a.温度传感器:选择一款常见的温度传感器,如DS18B20,通过数据线连接到单片机的GPIO口,实时获取温度数据。
b.LCD显示屏:使用16x2LCD显示屏,通过I2C接口与单片机连接,用于显示当前温度和报警信息。
c.蜂鸣器:选择一个合适的蜂鸣器,通过单片机的GPIO口控制,用于发出声音报警信号。
d.电源电路:为单片机和其他电路提供稳定的电源,可以选择直流电源或电池供电。
2.软件设计:a.初始化:对单片机进行初始化设置,包括IO口初始化、LCD初始化、温度传感器初始化等。
b.温度采集:通过温度传感器不断采集温度数据,并将其显示在LCD 屏幕上。
c.温度判断:获取当前温度值,并与设定的阈值进行比较。
如果高于阈值,进入报警状态。
d.报警处理:当温度超过设定阈值时,触发蜂鸣器发出声音报警信号,并在LCD上显示相应警告信息。
同时,可以选择触发其他动作,如发送短信或邮件通知。
e.报警解除:当温度恢复正常后,蜂鸣器停止报警,LCD屏幕上显示正常温度信息。
通过以上硬件和软件设计,我们可以实现一个基于51单片机的温度警报器。
该警报器能够实时监测环境温度,当温度超过设定阈值时,蜂鸣器会发出声音报警,并在LCD显示屏上显示相应报警信息。
当温度恢复正常后,报警器会自动停止报警,并显示正常温度信息。
除了基本的功能,还可以根据需求进行一些扩展。
比如,可以添加按钮控制来设置温度阈值,或者增加温度记录功能,实时记录温度变化并保存。
总之,基于51单片机的温度警报器设计具有可扩展性和实用性,可以满足不同环境的需求。
基于51单片机温度报警器的设计

目录摘要 (2)第一章绪论 (4)1.1 系统背景 (4)1.2 温度控制系统设计的意义 (5)1.3 温度控制系统完成的功能 (5)第二章系统方案设计 (6)2.1 方案一 (6)2.2 方案二 (6)2.3 方案论证 (7)第三章硬件电路设计 (8)3.1系统总体设计 (8)3.2 各部分硬件电路设计 (9)3.2.1时钟电路设计 (9)3.2.2系统复位电路 (10)3.2.3报警与控制电路设计 (11)3.2.4 LED显示电路设计 (12)3.2.4温度检测电路设计 (14)3.2.5按键电路设计 (16)第四章软件设计 (17)4.1 主程序方案 (17)4.2 各个模块子程序设计 (20)4.2.1温度采集程序 (20)4.2.2数码管显示模块 (23)4.2.3温度处理程序 (24)第五章系统调试 (25)5.1测试环境及工具 (25)5.2测试方法 (25)5.3测试结果分析 (26)结论 (26)致谢 (26)参考文献 (27)附录一:系统原理图 (29)附录二:程序代码 (30)摘要随着现代信息技术的飞速发展,在生产中温度的准确测量是一个比较困难的事情从最初的酒精、水银温度计到现在的数字化、集成化的温度检测系统。
可见传感器的发展是飞快的。
它快速的发展必将带来新一轮的工业化的革命和社会发展的飞跃。
本文从硬软件两个方面介绍了基于AT89S52单片机温度自动检测系统的设计。
系统硬件由控制电路、温度采集电路、键盘和LED显示电路组成。
软件设计从设计思路、软件系统框图出发,先介绍整体的思路后,再逐一分析各模块程序算法的实现,最终编写出满足任务需求的程序。
最终通过DS18B20采集温度并显示出来,由此对周围环境的温度进行有效检测与报警。
基本上满足了温度检测与报警的要求,具有超调量小,采样值与设定值基本一致,操作简单等优点。
本设计创新点在于采用数字式温度传感器DS18B20 作为感温元件, 占用单片机引脚少, 因而可以利用空余引脚通过软件模拟和温度显示。
电子线路CAD课程---基于单片机的温度报警器设计与实现

电子线路CAD课程---基于单片机的温度报警器设计与实现一、课程设计目的(1).进一步熟悉Altium Designer 6.8软件(2).掌握所给电路原理图和PCB图的绘制。
(3).学会上网查找元件尺寸、封装。
二、课程设计内容(1).用Altium Designer 6.8软件画出原理图。
(2).用Altium Designer 6.8软件画出PCB图。
(3). 撰写课程设计报告。
(4).本次课程设计采用STC89C52RC单片机制作温度报警器,系统总体原理图如图1所示,由STC89C52RC单片机、时钟电路、复位电路、显示电路、电源电路、按键电路、报警电路和温度检测电路等组成。
图1 系统硬件电路三、课程设计步步骤(1)独立完成系统的原理设计(2)画出线路图四、数据及结果分析独立自主完成设计绘图,对原理图进行封装,得到完整PCB工程。
五、总结及心得体会通过这学期的学习,使我对CAD这门课程有了进一步的了解,一开始觉得它不是一个轻易学好的课程,觉得用处不是很大。
但经过这学期的学习下来,使我对这个课程的看法彻底改变了,不但用处很大,我们可以用它作出工程、建筑等方面的图画来,而且易学,就是把那些基本的套路把握熟悉了以后就很简单了,现在的速度比以前那是快很多了,不管是在设置还是在标注上,都有了很大的提高。
从这门课程中可以学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,在设计的过程中遇到问题,可以说得是困难重重,这毕竟是第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
如果要我用三个字来表达我对CAD的感觉,就是快、准、美!结合我自身的情况,我将继续练习使用CAD,做到能够把它运用得得心应手、挥洒自如,使它成为我今后学习和工作的助手。
基于单片机系统的温度报警器课程设计

2013级《模拟电子技术》课程设计说明书温度报警器院、部:电气与信息工程学生姓名:王运新学号:1430740104指导教师:何淑珍职称讲师专业:自动化班级:1401完成时间:2016年6月26日课程设计评定意见《模拟电子技术》课程设计任务书学院:电气与信息工程学院《模拟电子技术》课程设计任务书学院:电气与信息工程学院摘要本次课程设计由我们自己设计电源和温度报警器并制作实物。
温度报警器广泛应用于各个领域,为此带来了极大的便利。
一般来说,温度报警器大都采用温度传感器(如AD590)与其附加控制电路以及报警电路构成。
主要运用一些常见的电子元件和摸拟电子技术知识设计的一个简单报警电路,由直流稳压电源,温度—电压转换电路,K—℃电路,放大电路,比较电路和驱动报警电路5个部分组成。
直流稳压电源电路由学生自己设计制作;温度—电压转换电路由集成芯片AD590模拟温度传感器进行温度—电流转换;K—℃转换器由uA741运放组成的减法器来实现;放大电路同样是由uA741运放组成的反相比例放大器构成;最后通过uA741实现电压比较;由蜂鸣器和发光二极管构成驱动报警电路,当超过预定温度(50℃)时,发光二极管亮,蜂鸣器响,从而实现报警功能。
关键词:AD590;电压比较器;驱动报警电路ABSPRACTThe curriculum design by the power and temperature alarm and make our own design stuff. Temperature alarm is widely applied in various fields, for which brought great convenience. In general, the temperature alarm most used temperature sensor (AD590) with additional control circuit and alarm circuit. Using some common knowledge of electronic components and analog electronic technology design of a simple alarm circuit, by dc regulated power supply, temperature, voltage conversion circuit, K - ℃circuit, amplifying circuit, compare circuit and driver alarm circuit of five parts. Dc regulated power supply circuit is designed and manufactured by the students themselves; Temperature, voltage conversion circuit by integrated chip simulation temperature sensor AD590 temperature - current conversion; K - ℃converter composed by uA741 op-amp subtracter to implement; UA741 op-amp amplifier circuit is also made of inverse proportion amplifier; Finally by uA741 voltage; Alarm circuit driven by a buzzer and light-emitting diodes (leds), when more than predetermined temperature (50 ℃), light emitting diode light, buzzer sounded, so as to realize alarm function.Key words :AD590;V oltange comparator;Drive the alarm circuit目录1 任务与要求 (1)1.2 设计任务 (1)1.3设计要求 (1)2 方案设计 (1)2.1 方案选择 (1)2.1.1 直流稳压电源方案选择 (3)2.1.2 温度报警器方案选择 (3)2.2 温度传感器的选择 (4)2.3 AD590温度传感器的简介 (5)3 电路设计 (6)3.1直流稳压电源设计 (6)3.1.1电源变压器 (6)3.1.2整流电路 (6)3.1.3滤波电路 (6)3.1.4稳压电路的选择 (7)3.2温度报警器电路设计 (8)3.2.1温度—电压变换电路 (8)3.2.2 K—℃变换减法电路 (8)3.2.3电压的放大 (9)3.2.4比较电路 (10)3.2.5报警电路 (10)3.3 温度报警器整体电路设计 (10)3.4 电路仿真与制作 (11)3.4.1温度报警器仿真 (11)3.4.2 绘制PCB电路板的基本框图 (12)4 安装与调试 (14)4.1温度报警器的调试 (15)4.2 误差分析 (15)参考文献 (16)致谢 (17)附录 (18)附录A 原理图 (18)附录B PCB图 (19)附录C 实物图 (20)附录D 元器件清单 (21)1 任务与要求1.1设计任务(1)利用集成温度传感器AD590、集成运放等设计一个温度报警装置。
基于单片机的温度显示报警系统设计

基础课程设计(论文)基于单片机的温度显示报警系统设计专业:电气工程及其自动化指导教师:任守华小组成员:刘春秋(20114073143)许玖红(20114073159)王锐(20114073105)葛传宇(20114073126)刘冠兵(20114012006)信息技术学院电气工程系2011年11月16前言本文主要设计一种基于AT89S52单片机的温度显示报警系统,在此设计中主要从硬件软件两大方面来进行。
本文又分为四大设计来进行:系统整体方案,主要介绍了本设计的整体方案思想,即以单片机为核心,根据DS18B20温度传感器检测外界温度并转化为数字信号进行处理,把数据传输到显示模块,实现温度的显示,并对温度实施监测,当温度超过给定的最高温度或者低于给定的最低温度时,通过单片机处理发出报警信号;系统的硬件设计,硬件方面按照单片机最小系统电路、显示硬件电路、键盘硬件电路、温度传感器硬件电路、温度执行控制硬件电路、串行通信接口电路、温度报警电路以及给整个系统供电的开关电源电路等八个模块分别进行设计,各个模块电路通过主机电路控制,协调一致的进行工作,完成对被测物体的温度控制;系统的软件设计,软件方面按照软件模块、主程序模块、数据采集模块、中断处理模块、显示模块、报警模块和温度调节等八部分进行设计,软件的设计在很大程度上决定了测控系统的性能,为了满足系统的要求,编制软件达到易理解性、易维护性、实时性、准确性和可靠性;调试和仿真,从硬件、软件的调试到仿真,完成设计的最终要求,当温度过高或者过低时就进行报警。
作者2014年10月摘要温度控制是工业生产过程中经常遇到的过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量,因而设计一种较为理想的温度控制系统是具有不一般的价值与意义。
在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。
因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。
电子线路CAD---基于单片机的温度报警器设计与实现

电子线路CAD---基于单片机的温度报警器设计与实现一、程设计目的(1)进一步熟悉Altium Designer 6.8软件(2)掌握所给电路原理图和PCB图的绘制。
(3)学会上网查找元件尺寸、封装。
二、课程设计内容本次课程设计采用STC89C52RC单片机制作温度报警器,系统总体原理图如图1所示,由STC89C52RC单片机、时钟电路、复位电路、显示电路、电源电路、按键电路、报警电路和温度检测电路等组成。
其中显示电路由LCD1602组成,温度传感器的作用是采集实时温度,当实时温度值超过设定的上、下限值时,蜂鸣器发出蜂鸣声以达到报警的作用;按键电路由按键key2、key3、key4组成,按键key2用于模式的选择,每按一次按键key3温度值加1,每按一次按键key4温度值减1。
三、课程设计步骤(1)用Altium Designer 6.8软件画出原理图。
(2)用Altium Designer 6.8软件画出PCB图。
(3)根据PCB图及原理图撰写课程设计报告。
四、数据及结果分析伴随着工业不断的发展进步,温度作为工业生产等上的重要标尺已经是不可或缺的地位。
现在,在自动控制用温度控制做为一种控制量对系统进行控制已经越来越普及。
就这样的实际情况本文设计了一种简单的温度报警系统。
根据用Altium Designer 6.8软件画出的PCD图及原理图可知,该系统设计和布线简单,结构紧凑,性价比高,扩展方便等优点。
可应用于仓库测温、楼宇空调控制和生产过程监控等领域。
(1)时钟电路单片机的TXAL1和TXAL2两个引脚,其主要作用是外接石英晶体和微调电容,构成时钟电路。
(2)复位电路当RST端高电平持续的时间至少大于两个机器周期时,就可以完成复位功能。
(3)显示电路显示电路由液晶LCD1602和电位器组成,双向数据口接单片机的P2口。
(4)电源电路由三端稳压管78L05、电源插座PWR2.5及电容组成,输出电压4.8V~5.2V。
基于51单片机的温度报警器设计毕业论文

『2014届』题目基于51单片机的温度报警器设计姓名我学号专业班级通信电子技术指导教师于先生2014年12月3日毕业论文任务书主要实现:实时温度测量及显示,超出温度范围声光报警,上下限温度可通过按键设定等功能。
本数字温度报警器是基于51单片机及温度传感器DS18B20来设计的,温度测量范围0到99.9摄氏度,精度为0.1摄氏度,可见测量温度的范围广,精度高的特点。
可设置上下限报警温度,默认上限报警温度为38℃、默认下限报警温度为5℃(通过程序可以更改上下限值)。
报警值可设置范围:最低上限报警值等于当前下限报警值,最高下限报警值等于当前上限报警值。
将下限报警值调为0时为关闭下限报警功能。
目录前言 (2)1 设计要求与方案论证 (3)1.1 设计要求 (3)1.2 系统基本方案选择和论证 (3)1.2.1 单片机芯片的选择方案和论证 (3)1.2.2 温度传感器设计方案论证 (4)1.2.3 掉电保持方案论证 (4)1.3 电路设计最终方案决定 (5)2 主要元件介绍 (5)2.1 STC89C51介绍 (5)2.1.1 STC89C51主要功能及PDIP封装 (5)2.1.2 STC89C51引脚介绍 (5)2.1.3 单片机最小系统: (6)2.2 DS18B20传感器介绍 (7)2.2.1 DS18B20概述 (7)2.2.2 DS18B20引脚介绍 (8)2.2.3 DS18B20的内部结构 (8)2.2.4 DS18B20的程序流程图 (9)2.3 数码管介绍 (10)2.3.1 数码管概述 (11)2.4 AT24C02简介 (11)2.4.1 I2C总线说明 (12)3 程序流程图 (13)图6:程序流程图 (14)结论 (15)参考文献 (16)致谢 (17)附录1 系统原理图 (18)附录2 C语言程序 (19)基于51单片机的温度报警器设计摘要:单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度器,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
基于51单片机的温度报警器设计分解

基于51单片机的温度报警器设计分解首先,对于硬件设计,我们需选择一个合适的温度传感器。
常见的温度传感器有NTC热敏电阻和DS18B20数字温度传感器。
根据实际需求进行选择。
这里我们以DS18B20数字温度传感器为例。
硬件设计中,需要将DS18B20传感器与51单片机连接。
具体的连接可以参考DS18B20的数据手册。
一般情况下,将DS18B20的数据引脚连接到单片机的I/O口。
同时,为了保证传输质量,还需要在传输线上加上4.7K的上拉电阻。
其次,需要设计电路。
这里我们可以采用51单片机控制电路。
具体的电路设计包括单片机控制、显示电路和报警电路。
单片机控制电路主要包括51单片机、晶振、复位电路等。
显示电路主要包括数码管或LCD屏幕等。
报警电路可以采用蜂鸣器或LED等。
这里采用51单片机作为控制器,通过读取DS18B20的温度值来实现对温度的监测。
如果温度超过设定阈值,那么蜂鸣器会响起或者LED灯会亮起。
接下来进行软件设计,主要包括程序编写和功能实现。
根据硬件设计的要求,来编写相应的程序,实现相应功能。
具体的流程大致如下:1.初始化单片机和DS18B20传感器;2.读取传感器的温度值;3.判断温度值是否超过设定阈值;4.如果温度超过设定阈值,则蜂鸣器响起或LED灯亮起;5.如果温度未超过设定阈值,则继续读取温度值;6.循环执行以上步骤。
在设计过程中,需要注意以下几点:1.硬件电路的连线要正确,确保各个元件能够正常工作;2.程序要根据实际情况进行调试,确保功能正常;3.温度阈值的设定要合理,保证报警的准确性。
总结来说,基于51单片机的温度报警器设计分为硬件设计和软件设计两部分。
硬件设计主要涉及传感器的选择和电路设计,软件设计则包括程序编写和功能实现。
通过合理的硬件设计和软件编程,可以实现对温度的监测和报警。
在设计过程中需要注意硬件的连接和程序的调试,保证整个系统的稳定性和准确性。
基于单片机设计的温度报警器本科毕业论文

本科毕业论文(设计)题 目:基于单片机设计的温度报警器毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作 者 签 名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期: 年 月 日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、作品介绍:我个人设计的温度报警器是基于51单片机开发的一种能时时检测温度,并且报警的器件,它采用AT89S52单片机、DS18B20、1602液晶显示器等电学元器件,通过编写程序和一定的算法,最终实现的功能是:开机后单片机自动运行一套程序,使DS18B20检测室内的温度,并通过一定的算法对数据采样处理,计算出室内的温度,通过1602液晶显示器显示出来,当室温超过设定的值时,单片机驱动峰鸣发出声音!2、器件介绍:a、A T89S52单片机:AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash 允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
b、DS18B20测温芯片:DS18B20数字温度传感器,采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点: (1 )采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯。
单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
⏹(2 )测量温度范围宽,测量精度高DS18B20 的测量范围为-55 ℃~+ 125 ℃;在-10~+ 85°C 范围内,精度为±0.5°C 。
⏹(3 )在使用中不需要任何外围元件。
⏹(4 )持多点组网功能多个DS18B20 可以并联在惟一的单线上,实现多点测温。
⏹(5 )供电方式灵活DS18B20 可以通过内部寄生电路从数据线上获取电源。
因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。
⏹(6 )测量参数可配置DS18B20 的测量分辨率可通过程序设定9~12 位。
⏹(7 )负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
⏹(8 )掉电保护功能DS18B20 内部含有EEPROM ,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。
⏹DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。
DS18B20管脚排列:C、1602液晶:1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形(用自定义CGRAM,显示效果也不好)1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶图片:管脚功能:3、程序代码:#include<reg52.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件unsigned char code digit[11]={"zhaozhongmin"}; //定义字符数组显示数字unsigned char code Str[]={"1602-DS18B20"}; //说明显示的是温度unsigned char code Error[]={" DS18B20 ERROR"}; //说明没有检测到DS18B20unsigned char code Error1[]={" PLEASE CHECK"}; //说明没有检测到DS18B20unsigned char code Temp[]={"WENDU:"}; //说明显示的是温度unsigned char code Cent[]={"Cent"}; //温度单位unsigned char codeuser[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};unsigned char flag,tltemp; //负温度标志和临时暂存变量/******************************************************** ***********************以下是对液晶模块的操作程序******************************************************** ***********************/sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚/***************************************************** 函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒***************************************************/ void delay1ms(){unsigned char i,j;for(i=0;i<4;i++)for(j=0;j<33;j++);}/***************************************************** 函数功能:延时若干毫秒入口参数:n***************************************************/ void delaynms(unsigned char n){unsigned char i;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
result=1,忙碌;result=0,不忙***************************************************/bit BusyTest(void){bit result;RS=0; //根据规定,RS为低电平,RW为高电平时,可以读状态RW=1;E=1; //E=1,才允许读写_nop_(); //空操作_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间result=BF; //将忙碌标志电平赋给resultE=0; //将E恢复低电平return result;}/*****************************************************函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate***************************************************/void WriteInstruction (unsigned char dictate){while(BusyTest()==1); //如果忙就等待RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令RW=0;E=0; //E置低电平(根据表8-6,写指令时,E 为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"_nop_();_nop_(); //空操作两个机器周期,给硬件反应时间P0=dictate; //将数据送入P0口,即写入指令或地址_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:指定字符显示的实际地址入口参数:x***************************************************/ void WriteAddress(unsigned char x){WriteInstruction(x|0x80); //显示位置的确定方法规定为"80H+地址码x"}/*****************************************************函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)***************************************************/ void WriteData(unsigned char y){while(BusyTest()==1);RS=1; //RS为高电平,RW为低电平时,可以写入数据RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,// 就是让E从0到1发生正跳变,所以应先置"0"P0=y; //将数据送入P0口,即将数据写入液晶模块_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=1; //E置高电平_nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令}/*****************************************************函数功能:对LCD的显示模式进行初始化设置***************************************************/ void LcdInitiate(void){delaynms(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x38);delaynms(5); //延时5ms,给硬件一点反应时间 WriteInstruction(0x38); //连续三次,确保初始化成功delaynms(5); //延时5ms,给硬件一点反应时间 WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁delaynms(5); //延时5ms,给硬件一点反应时间 WriteInstruction(0x06); //显示模式设置:光标右移,字符不移delaynms(5); //延时5ms,给硬件一点反应时间WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除delaynms(5); //延时5ms,给硬件一点反应时间}/******************************************************** ****************以下是DS18B20的操作程序******************************************************** ****************/sbit DQ=P3^3;unsigned char time; //设置全局变量,专门用于严格延时/*****************************************************函数功能:将DS18B20传感器初始化,读取应答信号出口参数:flag***************************************************/bit Init_DS18B20(void){bit flag; //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在DQ = 1; //先将数据线拉高for(time=0;time<2;time++) //略微延时约6微秒;DQ = 0; //再将数据线从高拉低,要求保持480~960us for(time=0;time<200;time++) //略微延时约600微秒; //以向DS18B20发出一持续480~960us的低电平复位脉冲DQ = 1; //释放数据线(将数据线拉高)for(time=0;time<10;time++); //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time<200;time++) //延时足够长时间,等待存在脉冲输出完毕;return (flag); //返回检测成功标志}/*****************************************************函数功能:从DS18B20读取一个字节数据出口参数:dat***************************************************/ unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat; //储存读出的一个字节数据for (i=0;i<8;i++){DQ =1; // 先将数据线拉高_nop_(); //等待一个机器周期DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序_nop_(); //等待一个机器周期DQ = 1; //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备for(time=0;time<2;time++); //延时约6us,使主机在15us内采样dat>>=1;if(DQ==1)dat|=0x80; //如果读到的数据是1,则将1存入dat elsedat|=0x00;//如果读到的数据是0,则将0存入dat//将单片机检测到的电平信号DQ存入r[i]for(time=0;time<8;time++); //延时3us,两个读时序之间必须有大于1us的恢复期}return(dat); //返回读出的十六进制数据}/*****************************************************函数功能:向DS18B20写入一个字节数据入口参数:dat***************************************************/ WriteOneChar(unsigned char dat){unsigned char i=0;for (i=0; i<8; i++){DQ =1; // 先将数据线拉高_nop_(); //等待一个机器周期DQ=0; //将数据线从高拉低时即启动写时序DQ=dat&0x01; //利用与运算取出要写的某位二进制数据,//并将其送到数据线上等待DS18B20采样for(time=0;time<10;time++);//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样DQ=1; //释放数据线for(time=0;time<1;time++);//延时3us,两个写时序间至少需要1us的恢复期dat>>=1; //将dat中的各二进制位数据右移1位}for(time=0;time<4;time++); //稍作延时,给硬件一点反应时间}/***************************************************** 函数功能:做好读温度的准备***************************************************/ void ReadyReadTemp(void){Init_DS18B20(); //将DS18B20初始化WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delaynms(200); //转换一次需要延时一段时间Init_DS18B20(); //将DS18B20初始化WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位}/******************************************************** **********************以下是与温度有关的显示设置******************************************************** **********************//***************************************************** 函数功能:显示没有检测到DS18B20***************************************************/ void display_error(void){unsigned char i;WriteAddress(0x00); //写显示地址,将在第1行第1列开始显示i = 0; //从第一个字符开始显示while(Error[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Error[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(100); //延时100ms较长时间,以看清关于显示的说明}WriteAddress(0x40); //写显示地址,将在第1行第1列开始显示i = 0; //从第一个字符开始显示while(Error1[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Error1[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(100); //延时100ms较长时间,以看清关于显示的说明}while(1) //进入死循环,等待查明原因;}/*****************************************************函数功能:显示说明信息***************************************************/ void display_explain(void){unsigned char i;WriteAddress(0x00); //写显示地址,将在第1行第1列开始显示i = 0; //从第一个字符开始显示while(Str[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Str[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(100); //延时100ms较长时间,以看清关于显示的说明}}/*****************************************************函数功能:显示温度符号***************************************************/ void display_symbol(void){unsigned char i;WriteAddress(0x40); //写显示地址,将在第2行第1列开始显示i = 0; //从第一个字符开始显示while(Temp[i] != '\0') //只要没有写到结束标志,就继续写{WriteData(Temp[i]); //将字符常量写入LCDi++; //指向下一个字符delaynms(50); //延时1ms给硬件一点反应时间}}/*****************************************************函数功能:显示温度的小数点***************************************************/void display_dot(void){WriteAddress(0x49); //写显示地址,将在第2行第10列开始显示WriteData('.'); //将小数点的字符常量写入LCDdelaynms(50); //延时1ms给硬件一点反应时间}/*****************************************************函数功能:显示温度的单位(Cent)***************************************************/ void display_cent(void){unsigned char i;WriteAddress(0x4c); //写显示地址,将在第2行第13列开始显示for(i=0;i<8;i++)WriteData(user[i]);WriteAddress(0x4b);delaynms(5);WriteData(0x00);}/*****************************************************函数功能:显示温度的整数部分入口参数:x***************************************************/ void display_temp1(unsigned char x){unsigned char j,k,l; //j,k,l分别储存温度的百位、十位和个位 j=x/100; //取百位k=(x%100)/10; //取十位l=x%10; //取个位WriteAddress(0x46); //写显示地址,将在第2行第7列开始显示 if(flag==1) //负温度时显示“—”{WriteData(digit[10]); //将百位数字的字符常量写入LCD}else{WriteData(digit[j]); //将十位数字的字符常量写入LCD}WriteData(digit[k]); //将十位数字的字符常量写入LCDWriteData(digit[l]); //将个位数字的字符常量写入LCDdelaynms(50); //延时1ms给硬件一点反应时间}/***************************************************** 函数功能:显示温度的小数数部分入口参数:x***************************************************/ void display_temp2(unsigned char x){WriteAddress(0x4a); //写显示地址,将在第2行第11列开始显示WriteData(digit[x]); //将小数部分的第一位数字字符常量写入LCDdelaynms(50); //延时1ms给硬件一点反应时间}/*****************************************************函数功能:主函数***************************************************/ void main(void){unsigned char TL; //储存暂存器的温度低位unsigned char TH; //储存暂存器的温度高位unsigned char TN; //储存温度的整数部分unsigned char TD; //储存温度的小数部分LcdInitiate(); //将液晶初始化delaynms(5); //延时5ms给硬件一点反应时间if(Init_DS18B20()==1)display_error();display_explain();display_symbol(); //显示温度说明display_dot(); //显示温度的小数点display_cent(); //显示温度的单位while(1) //不断检测并显示温度{ flag=0;ReadyReadTemp(); //读温度准备TL=ReadOneChar(); //先读的是温度值低位TH=ReadOneChar(); //接着读的是温度值高位if((TH&0xf8)!=0x00)//判断高五位得到温度正负标志{flag=1;TL=~TL; //取反TH=~TH; //取反tltemp=TL+1; //低位加1TL=tltemp;if(tltemp>255) TH++; //如果低8位大于255,向高8位进1 TN=TH*16+TL/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了TD=(TL%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,}TN=TH*16+TL/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16//这样得出的是温度的整数部分,小数部分被丢弃了TD=(TL%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,//这样得到的是温度小数部分的第一位数字(保留1位小数)display_temp1(TN); //显示温度的整数部分display_temp2(TD); //显示温度的小数部分delaynms(10);}}4、应用:此作品的设计虽然是为了练习单片机的使用,但是它也有一定的使用价值,比如最简单的,可以把它放在室内,检测温度。