基于51单片机DS18B20温度可调上下限实训报告
基于51单片机的DS18B20温度检测设计报告
课程名称:微机原理课程设计题目:温度检测课程设计摘要随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的温度检测仪。
本设计使用简便,功能丰富。
可以实现温度采集,温度报警,重设上下限温度值等功能。
在现代化的工业生产中,需要对周围环境的温度进行检测和控制。
本设计对温控报警问题展开思考,设计一个能根据需求设置低温到高温进行报警并通过数码管显示的系统。
该系统使用STC89C51单片机,同时运用单线数字温度传感器DS18B20,四位共阴数码管显示,按键控制等模块可实现温度的检测与设置。
课题经过实验验证达到设计要求,具有一定的使用价值和推广价值。
本作品使用四位共阴数码管显示,可以清晰地显示当前的报警温度,一定程度避免使用者使用时出错,安全可靠,可使用于各种食品储存室,植物养殖所等地方,实用性很高。
关键字:温度报警器STC89C51单片机数码管DS18B20目录一、课程设计目的和要求 (1)1.1 设计目的 (1)1.2 设计要求 (1)二、总体设计方案 (1)三、硬件设计 (2)3.1 DS18B20传感器 (2)3.2 STC89C51功能介绍 (6)3.3 时钟电路 (8)3.4 复位电路 (8)3.5 LED显示系统电路 (9)3.6 按键控制电路 (11)3.7 蜂鸣器电路 (11)3.8 总体电路设计 (12)四、软件设计 (14)4.1 keil软件 (14)4.2 系统主程序设计 (14)4.3 系统子程序设计 (15)五、仿真与实现 (18)5.1 PROTEUS仿真软件 (18)5.2 STC-ISP程序烧录软件 (19)5.3 使用说明 (20)六、总结 (21)一、课程设计目的和要求1.1 设计目的熟悉典型51单片机,加深对51单片机课程的全面认识和掌握,对51单片机及其接口的应用作进一步的了解,掌握基于51单片机的系统设计的一般流程、方法和技巧,为我们解决工程实际问题打下坚实的基础。
DS18B20温度测量与控制实验报告
课程实训报告《单片机技术开发》专业:机电一体化技术班级: 104201 学号: ******** *名:***浙江交通职业技术学院机电学院2012年5月29日目录一、DS18B20温度测量与控制实验目的……………………二、DS18B20温度测量与控制实验说明……………………三、DS18B20温度测量与控制实验框图与步骤……………………四、DS18B20温度测量与控制实验清单……………………五、DS18B20温度测量与控制实验原理图…………………六、DS18B20温度测量与控制实验实训小结………………1.了解单总线器件的编程方法。
2.了解温度测量的原理,掌握DS18B20 的使用。
本实验系统采用的温度传感器DS18B20是美国DALLAS公司推出的增强型单总线数字温度传感器。
Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
DS18B20测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS18B20可以程序设定9~12位的分辨率,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20 内部结构DS18B20 内部结构主要由四部分组成:64 位光刻ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。
DS18B20 的管脚排列如下:DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。
光刻ROM 中的64 位序列号是出厂前被光刻好的,它可以看作是该DS18B20 的地址序列码。
大三上课设实验(DS18B20)报告
简易温度测量仪班级:0120902队员:指导老师:摘要温度测量仪主要有以DS18B20为核心的温度采集电路,以蜂鸣器为核心的报警电路以及学习板电路三部分电路构成。
软件实现方面包括三个模块:温度采集模块、报警模块、按键与显示模块。
本温度测试仪采用数码管显示温度测试范围0~+125℃,可实现两点温度测量、摄氏温度华氏温度相互转换、设置温度显示精度、设置报警温度上下限、蜂鸣器报警等五个功能。
关键词:温度测量仪 DS18B20 蜂鸣器分辨率多点测量目录目录……………………………………………………1第一章设计目的 (3)第二章方案的选取 (3)第三章DS18B20测温电路系统设计要求 (4)第四章DS18B20测温电路系统设计 (5)1.DS18B20测温电路的组成框图 (5)2. DS18B20的简介 (5)2.1 DS18B20的内部结构 (6)2.2 DS18B20的工作过程及时序 (7)3. 系统硬件电路 (10)3.1 DS18B20温度传感器与单片机的接口电路 (10)3.2 蜂鸣器电路 (11)4. 系统软件设计 (11)4.1系统主程序流程图 (11)4.2重点模块程序分析 (12)第五章系统测试和结论 (14)6.1测试条件及方案 (14)6.2测试结果和分析 (15)第六章设计体会 (15)一、设计目的1.进一步熟悉和掌握DS18B20芯片的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5.通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发单片机应用系统的全过程,为今后从事相应打下基础。
6.了解 DS1820数字温度传感器特性7. 掌握单片机基本功能的运用、简单接口电路如键盘、数码管显示电路设计及其相应驱动软件的编制软、硬件系统的调试二、方案的选取方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
基于51单片机于DS18B20的应用
功能:本实验可以正常利用DS18B20测量温度并显示,当温度高于所设温度上限时,蜂鸣器报警,高温灯亮;当温度低于所设温度下限时,继电器工作,D2给DS18B20加热。
本实验利用DS18B20中的EEPROM,所以每次手动调节好的温度断电后可以保存,很方便,也是本实验的亮点。
Protues下仿真通过,用Keil编写的程序正常显示温度:高温:低温:程序:(基于51单片机,keil编写,protues下运行)由于程序长,所以使用封装函数LCD1602.h。
.H文件#ifndef __LCD1602_H__#define __LCD1602_H__#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define DATPORT P0sbit rs=P2^4;sbit rw=P2^5;sbit e =P2^6;void delay(uint xx);void write_com(uchar com);void write_dat(uchar dat);void lcd_init();void disp_assic(uchar *dat,uchar loc,uchar len); #endif.C文件#include "LCD1602.h"void delay(uint xx){while(xx--);}void write_com(uchar com) {e=0;rs=0;rw=0;delay(50);DA TPORT=com;e=1;delay(50);e=0;delay(50);}void write_dat(uchar dat) {e=0;rs=1;rw=0;delay(50);DA TPORT=dat;e=1;delay(50);e=0;delay(50);}void lcd_init(){write_com(0x38);delay(50);write_com(0x38);delay(50);write_com(0x38);delay(50);write_com(0x06);delay(50);write_com(0x0c);delay(50);write_com(0x01);delay(50);}void disp_assic(uchar *dat,uchar loc,uchar len) {uchar i;write_com(loc);for(i=0;i<len;i++){write_dat(dat[i]);}}主函数#include"LCD1602.h"sbit sck=P1^0;sbit sda=P1^1;sbit DQ=P3^4;sbit red=P2^0;sbit green=P2^1;sbit yellow=P2^2;sbit led_sheng=P3^6;sbit beep=P3^7;sbit kongzhi=P1^4;sbit shengwen=P1^5;sbit jiangwen=P1^6;uchar data result[5];uint t1,t2;uchar tflag,i;uchar one,two,three,four;uchar aa[2];uchar set_hightemp=33,set_lowtemp=15;uchar code str1[]="Temperature is: ";uchar code str2[]="";uchar code str3[]="set_hightemp: ";uchar code str4[]="set_lowtemp: ";void delay_1ms(uchar tt){uint i,j;for(i=0;i<tt;i++)for(j=0;j<114;j++);}void ds18b20_init() //DS18B20的初始化{uchar t=0;DQ=1;delay(4);DQ=0;delay(100);DQ=1;delay(40);}uchar read_byte() //读一个字节{uchar value=0;uchar t=0;for (t=8;t>0;t--){DQ=0;value>>=1;DQ=1;if(DQ)value|=0x80;delay(10);}return (value);}void write_byte(uchar dat) //写一个字节{uchar t=0;for (t=8; t>0; t--){DQ=0;DQ=dat&0x01;delay(10);DQ=1;dat>>=1;}}uchar start_test() //启动温度测试模块,并收集数据{uchar a,b;ds18b20_init(); //复位总线write_byte(0xCC); //忽略ROM匹配操作write_byte(0x44); //温度转换命令delay(300);ds18b20_init();write_byte(0xCC); //忽略ROM匹配操作write_byte(0xBE); //读取RAM寄存器a=read_byte(); //读取第一字节b=read_byte(); //读取第二字节t1=b;t1<<=8;t1=t1|a;if(t1<0x0eff) //判断正负。
DS18B20数字温度计设计实验报告(1)【范本模板】
单片机原理及应用课程设计报告书题目:DS18B20数字温度计姓名: 李成学号:133010220指导老师:周灵彬设计时间: 2015年1月目录1. 引言 (3)1。
1.设计意义31.2。
系统功能要求32。
方案设计 (4)3. 硬件设计 (4)4. 软件设计 (8)5。
系统调试106. 设计总结 (11)7. 附录 (12)8. 参考文献 (15)DS18B20数字温度计设计1.引言1.1. 设计意义在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。
而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。
其缺点如下:●硬件电路复杂;●软件调试复杂;●制作成本高.本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为—55~125℃,最高分辨率可达0。
0625℃。
DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的热点。
1.2. 系统功能要求设计出的DS18B20数字温度计测温范围在0~125℃,误差在±1℃以内,采用LED数码管直接读显示.2. 方案设计按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路.数字温度计总体电路结构框图如4。
1图所示:图4.13。
硬件设计温度计电路设计原理图如下图所示,控制器使用单片机AT89C2051,温度传感器使用DS18B20,使用四位共阳LED 数码管以动态扫描法实现温度显示。
AT89C51 主 控制器 DS18B20 显示电路 扫描驱动主控制器单片机AT89C51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携手持式产品的设计使用.系统可用两节电池供电。
AT89C51的引脚图如右图所示:VCC:供电电压。
DS18B20温度测量与控制实验报告
课程实训报告《单片机技术开发》专业:机电一体化技术班级: 104201学号: 10420134姓名:杨泽润浙江交通职业技术学院机电学院2012年5月29日目录一、DS18B20温度测量与控制实验目的……………………二、DS18B20温度测量与控制实验说明……………………三、DS18B20温度测量与控制实验框图与步骤……………………四、DS18B20温度测量与控制实验清单……………………五、DS18B20温度测量与控制实验原理图…………………六、DS18B20温度测量与控制实验实训小结………………一、实验目的1.了解单总线器件的编程方法。
2.了解温度测量的原理,掌握 DS18B20 的使用。
二、实验说明本实验系统采用的温度传感器DS18B20是美国DALLAS公司推出的增强型单总线数字温度传感器。
Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
DS18B20测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS18B20可以程序设定9~12位的分辨率,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20 内部结构DS18B20 内部结构主要由四部分组成:64 位光刻 ROM、温度传感器、非挥发的温度报警触发器 TH 和 TL、配置寄存器。
DS18B20 的管脚排列如下: DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。
光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该DS18B20 的地址序列码。
实验报告DS18B20温度检测控制
实训五 DS18B20温度检测控制实训一、实训目的1.温度传感器电路的工作原理。
2.了解温度控制的基本原理。
3.掌握一线总线接口的使用。
二、实训说明1.DALLAS最新单线数字温度传感器DS18B20简介Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。
DS18B20测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS18B20可以程序设定9~12位的分辨率,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列如下:DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校训码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
(完整版)基于51单片机与DS18B20的数字温度计设计定稿毕业论文
安徽农业大学课程设计报告基于单片机的DS18B20数字温度计设计学生姓名杜恒院系名称物理与电子工程学院专业名称电子信息工程班级2008 级 6 班学号指导教师汪文蝶完成时间2011年 5 月 20 日基于单片机的DS18B20数字温度计设计学生姓名:杜恒指导老师:汪文蝶内容摘要:随着现代信息化技术的飞速发展和传统工业改造的逐步实现,能独立工作的温度检测系统已广泛应用于各种不同的领域。
本文介绍了一个基于STC89C52单片机和数字温度传感器DS18B20的测温系统,并用LED数码管显示温度值,易于读数。
系统电路简单、操作简便,能任意设定报警温度并可查询最近的10个温度值,系统具有可靠性高、成本低、功耗小等优点。
关键词:单片机数字温度传感器温度计1 引言 (4)2 设计要求 (4)2.1 基本要求 (4)2.2 扩展功能 (4)3 总体方案设计 (4)3.1 方案论证 (4)3.1.1 方案一 (4)3.1.2 方案二 (5)3.2 总体设计框图 (5)4 硬件设计 (5)4.1 单片机系统 (5)4.2 数字温度传感器模块 (6)4.2.1 DS18B20性能 (6)4.2.2 DS18B20外形及引脚说明 (7)4.2.3 DS18B20接线原理图 (7)4.2.4 DS18B20时序图 (7)4.2.5 数据处理 (9)4.3 显示电路 (10)4.4 声光报警电路 (10)4.5 键盘输入电路 (11)5 软件设计 (11)5.1 主程序模块 (11)5.2 读温度值模块 (12)5.3 中断模块 (14)5.4 温度查询模块 (15)5.5 温度设定、报警模块 (16)5.6 数码管驱动模块 (18)6 源程序 (19)7 总结 (26)参考文献: (28)1 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。
DS18B20实训报告
绵阳职业技术学院信息工程系单片机应用实训时间 2011年12月26日——31日项目题目 DS18B20数字温度计的设计地点实验楼405 、406、102二O一一年十二月29 日摘要本项目以单片机AT89S52、DS18B20为控制中心,通过DS18B20在—55度~125度的范围内采集不同的数据,将其采集的信号通过通过三线与单片机相连,进行传递。
单片机通过转换输出信号,使用9012PNP三级管作驱动,将输出来的信号通过4共阳数码管显示。
关键词:AT89S52 DS18B20 9012 数码管显示目录一.设计任务及要求 (4)1.1设计目的 (4)1.2设计任务 (4)1.3功能要求 (4)二.方案论证 (5)2.1. 方案一: (5)2.2. 方案二: (6)2.3 两种方案比较 (6)三.电路模块设计与分析 (6)3.1单片机89C52模块 (6)3.2 DS18B20的设计电路 (8)3.1.1、DS18B20简介 (8)3.1.2 DS18B20接线原理图 (10)3.1.3 DS18B20时序图 (10)3.1.4 数据处理 (11)3.1.5 温度传感器的工作原理 (12)四.系统程序的设计 (13)4.1 主程序 (13)4.2 读出温度子程序 (13)4.3 温度转换命令子程序 (14)4.4计算温度子程序 (15)4.5显示数据刷新子程序 (15)五.仿真与调试 (16)5.1 Proteus软件 (16)5.1.1 Proteus简介 (16)5.1.2 4大功能模块 (17)5.1.3 Proteus简单应用 (18)5.1.4 Proteus软件运行流程 (18)5.1.5 硬件调试结果 (20)5.2 Keil软件 (20)5.2.1 Keil软件简介 (20)5.2.2 Keil软件调试流程 (21)六.设计总结与心得体会 (22)七.附录 (23)附录一: (23)附录二: (29)附录三: (30)一.设计任务及要求1.1设计目的以单片机为核心,设计单片机最小系统,构成数字式温度计,能够实现实时温度的显示巩固所学知识、加强综合能力、提高软、硬件设计调试方面的能力、启发创新思维,使将相关专业课程知识综合起来,融会贯通,形成系统的概念,从而实现理论与实践相结合提高设计能力、电子线路的组装调试能力和创新能力,通过查阅资料、选定方案、设计电路、调试软件并下载到芯片中、写出完整的报告等过程.步骤:根据教学内容和实验设备的情况设计课程设计内容。
基于DS18B20的温控系统实习报告
河南农业大学《智能仪器设计实习》设计说明书题目:基于DS18B20的温控系统学院:理学院专业:电子信息科学与技术班级:07电科4班学号:0708101099姓名:徐亚利指导教师:成绩:时间:2010 年11 月29 日至2010 年12 月13 日智能仪器设计实习设计任务书题目基于DS18B20的温控系统专业、班级07电科4班学号0708101099 姓名主要内容、基本要求、主要参考资料等:主要内容:功能要求:完成温控制系统的设计1)在设置模式下,用户可以通过按键设置允许最高温度T H 、允许最低温度T L 及转换精度。
2)在测温模式下,实时测出当前温度并显示。
(可采用LED显示或LCD显示,显示结果精度不得低于0.1°C)。
3)在测温模式下,实时比较当前温度与报警温度,当高于高温报警T H 时,系统红灯亮,声音警报响,同时启动冷却电路开始制冷(冷却电路的启动用继电器控制);当在高温报警T H与低温报警T L 之间时,系统绿灯亮。
上述内容为基本要求,可按照自己的理解增加功能使之更完善。
基本要求:●明确设计任务,复习与查阅有关资料。
设计所用硬件芯片按给定使用。
●按要求对设计进行简要说明,总体设计方案,各部分的详细设计。
●写出体会和总结。
要求全部使用A4纸打印稿,不少于5000字。
主要参考资料:●李朝青编.《单片机原理及接口技术》(简明修订版).北京航空航天大学出版社,1998●冯克.《MCS-51单片机实用子程序及其应用实例》.黑龙江科学技术出版社,1990●杨欣荣等.《智能仪器原理、设计与发展》.中南大学出版社,2003●孙传友等.《感测技术基础》.电子工业出版社,2001●王福瑞等.《单片微机测控系统设计大全》.北京航空航天大学出版社,1999●科技期刊:《单片机与嵌入式系统应用》、《实用测试技术》、《自动化仪表》、《传感器世界》、《测控技术》、《电子技术应用》等2001年以后各期。
51单片机驱动DS18B20温度传感器程序及心得
51单片机驱动DS18B20温度传感器程序及心得关于DS18B20温度传感器,在没有硬件设备的辅助下,写内部程序有些困难,因为看不到实际信号波形。
对于单片机,我。
渐渐的有些心灰意冷。
虽然掌握了1_WIRE总线,却少了很多喜悦,下雨了。
它是我的爱好,我付出了很多,可是我看不到实际的前景。
以我个人之力,要步入尖端芯片领域,很困难,在这里,采棉花是个普遍性的大问题,大型机械设备缺陷很多,如果以微控制芯片提高精度,我想效益会相当可观,可是技术瓶颈难以逾越。
硬件研发,失败了,所有投入赴之东流,成功了,回报丰厚。
现在,各行各业都处于饱和,没有成熟先进的技术,很难有立足之地,,,,,我开始重新审视我的选择。
艰难。
/*建立时间: 2013年5月2日;前言: 我用软件仿真,测算延时时间,效果不错,但是根据教程,复位时,先释放总线(wd高电平),然后主机拉低wd,持续时间为400--960微妙.后主机拉高wd,持续15-60微妙,后从机,会拉低电平持续时间是60--240微妙(此时表示复位成功),如果从机没有将总线拉低,则复位失败.然后,主机拉高电平60--240微妙.复位结束;可,实验证明,在,从机,拉低总线电平后,持续一定时间,从机还会将总线拉高!这是教程中的一个重大错误!temperature sensor reset module finishing time: 23:08:00(温度传感器复位模块完成时间 )temperature sensor 操作过程:1. reset DS18B20;2. 发出Skip ROM 命令(CCH); (跳跃ROM命令)3. 发出Convert T命令(44H); (温度转换命令)4. reset DS18B20;5. 发出Skip ROM命令(CCH);(跳跃ROM命令)6. 发出读取命令(BEH);7. 读出两个字节的温度;8. 温度格式转换;2013年5月8日22:56:44DS18B20 Temperature sensor read data module accomplish;(温度传感器读数据模块完成)现在还有温度显示模块没有完成,硬件是1602液晶屏......2013年5月9日19:32:31今天,温度传感器的程序主体结构全部完成!!!!! 不容易啊,值得庆祝一下!!!!!!一共写了7天程序!{陆陆续续};喝个品酸乳果汁.......*/#include ;typedef unsigned char uint8 ;typedef unsigned int uint16;sbit wd = P3^2; //定义数据单总线;sbit e =P1^5; // 定义1602液晶显示器数据使能端口; sbit rs=P1^0; // 定义数据/指令选择端口;sbit rw=P1^1; // 定义读/写选择端口;sbit BF=P0^7; // 定义繁忙位;bit w=0; //定义一个全局一位变量;//===========1602液晶显示器模块;=============== busy() //液晶屏繁忙检测函数;{ e=0;rs=0;rw=0;P0=0xff;do{ e=0;//使能位清零;rs=0;//指令;rw=1;//读;e=1;//数据传输启动;}while(BF); //如果BF==0;则液晶处于空闲状态; e=0;}play_data(uint8 wr) //液晶写入数据;{busy();//繁忙检测;P0=wr;//装载数据;rs=1;//数据;rw=0;//写入;e=1;//传输开始;e=0;//传输结束;}play_cmd(uint8 cmd) //液晶写入指令; {busy(); //繁忙检测;P0=cmd; //装载数据;rs=0;//指令;rw=0;//写入;e=1;//传输开始;e=0;//传输结束;}reset_1602()//1602液晶显示器初始化函数;play_cmd(0x38);play_cmd(0x0c);play_cmd(0x06);play_cmd(0x01);}//=========温度传感器延时模块============================// sbit led= P1^0;delay(uint8 num )//如果unm等于1;延时16.28微妙; {while(num--); //如果num大于一,则16.28+(num-1)*6.51.}delay2()//此函数延时3.26微秒;{uint8 j=0;j=9;}delay3()uint16 s=60000;while(s--);}reset_1820() //========复位温度传感器; ======== {while(wd){wd=1;delay(140);//拉高总线,延时大概921微妙左右;(延时值自定); wd=0;//总线由单片机拉低,下为延时函数,大概800微秒左右;delay(61); //1个此函数会延时400微妙左右;delay(61); //两个是800微妙左右;wd=1;//主机拉高总线,68微秒左右;delay(9);//延时68微妙左右if(wd==0)//如果wd是0就终止复位;(代表复位成功);{while(wd==0);//总线一旦为低,那么就等待从机再将总线拉高. break;//终止while循环;(reset function end)}else{wd=1;delay(20);//延时140微妙;}}delay(30); //此时总线为高电平并延时205微妙,复位成功!;// if(wd)led=0;//此语句为检验是否复位成功;P1^0外接9012三极管接led小灯;}write_byte(uint8 dat){uint8 i=0;for(i=0;i;>;=1;delay(6); //A点到此处用时65.11微秒;wd=1;//总线释放;delay2(); //延时3.26微秒;}}//========此函数执行完成之后总线为高电平; uint8 read_byte() //=====读8位数据;==================={uint8 j=0, dat =0;for(j=0;j;>;=1;wd=0; // A点 mcu拉低电平3.26微秒;delay2();// 延时3.26微秒;wd=1;if(wd){dat|=0x80;}//读完数据后A点到此处是11.93微秒,保持在15微秒之内;delay(9);// A点到此处80.29微秒; 理想时间范围是60--120微秒;wd=1; //释放总线;delay2(); //延时3.26微秒;}return dat;}start_sensor()//启动传感器;{reset_1820();write_byte(0xcc); //跳跃命令;write_byte(0x44); //转换temperature(温度)命令; }uint8 read_temp()//从温度传感器度温度数据过程;{uint8 ak[2];uint16 dat=0 , j=0;reset_1820();//复位温度传感器write_byte(0xcc); //跳跃rom命令;write_byte(0xbe) ; // 发出读数据命令;ak[0]=read_byte(); //读取第一个字节数据;ak[1]=read_byte(); //读取第二个字节数据;dat=ak[1];//要把两个八位数据载入1个16位变量里;dat;>;11)==0x1f) //此语句是负温度进入.0x1f是二进制5个全1;{dat=(~dat)+1;//负温度要取反加一操作;dat/=16;//传感器给的温度系数要除以16后,得到的数才是常规温度系数;w=0;//此语句是在主函数中用来判断是正温度还是负温度;return dat; //向主函数返回数据,并终止函数; }j=dat;if((j>;>;11)==0)//如果是零则是正温度;{dat/=16;//数据直接除以16,就得到了常规温度系数;w=1;//1代表正;return dat; //向主函数返回数据,并终止函数;}return 130; //向主函数返回数据,并终止函数;}delay_ms() //延时1秒;{uint8 i=250;uint16 j=608;while(j--){ while(i--);i=250;}}error() //测温出错;{uint8 i=5, j=0 ,ak[]="Error!"; while(i--)play_cmd(0x82);while(ak[j]!='\0'){play_data(ak[j++]);} j=0;delay3();play_cmd(0x01);delay3();}}main(){uint8dat=0 ,j=3,len=0 ,num[]="start.....";reset_1602();while(j--)//这是启动电源时,液晶显示:start....(并闪烁3次){play_cmd(0x82);while(num[len]!='\0'){play_data(num[len++]);}len=0;delay3();play_cmd(0x01);delay3();}while(1){start_sensor();//启动温度传感器;delay_ms();//等待1秒;dat = read_temp(); //读取温度数据并赋给dat变量;if(dat==130)//如果返回来的数据是130,表明采集温度出错;{error();}else if(w==1) //如果w是1,就代表正温度.输出;{play_cmd(0x83);play_data(dat/10+'0');play_data(dat%10+'0');}else//否则,就是负温度,输出时前面加一个负号;{play_cmd(0x82);play_data('-');play_data(dat/10+'0');play_data(dat%10+'0');}} //我的亲娘四舅奶奶啊!!!!!!终于完成了!!!!2013年5月9日19:32:10}。
基于51单片机和DS18B20的数字温度计设计说明
基于51单片机和DS18B20的数字温度计设计说明题目:基于89C51和DS18B20的数字温度计设计一、设计要求数字式温度计要求测温范围为-55~125°C,精度误差在0.1°C以内,LED数码管直读显示。
二、方案论证根据系统的设计要求,选择DS18B20作为本系统的温度传感器,选择单片机AT89C51为测控系统的核心来完成数据采集、处理、显示、报警等功能。
选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。
该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到AT89C51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器用4位共阳LED数码管以动态扫描法实现。
检测范围-55摄氏度到125摄氏度。
按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。
数字温度计总体电路结构框图如图1所示。
图1 数字温度计总体电路结构框图三、系统硬件电路的设计温度计电路设计原理图如图2所示,控制器使用单片机AT89C51,温度传感器使用DS18B20,用4位共阳LED数码管实现温度显示。
图2 数字温度计设计电路原理图1、主控制器AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2、显示电路显示电路采用4位共阳LED数码管,从P0口输出段码,列扫描用P3.0~P3.3口来实现,列驱动用8550三极管。
3、温度传感器工作原理DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
基于51单片机的DS18B20温度显示
基于51单片机的DS18B20温度显示本讲内容:了解温度传感器DS18B20的使用,并通过一个例程展示温度传感器DS18B20测温过程。
DS18B20简介:DS18B20 是单线数字温度传感器,即“一线器件”,其具有独特的优点:(1)采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。
单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络。
(2)测量温度范围宽,测量精度高。
DS18B20 的测量范围为-55 ℃ ~+ 125 ℃;在 -10~+ 85°C 范围内,精度为± 0.5°C 。
(3)多点组网功能多个 DS18B20 并联在惟一的单线上,实现多点测温。
DS18B20的存储器由一个高速暂存RAM 和一个非易失性、电可擦除(E2)RAM 组成。
配置寄存器:出场设置默认R0、R1为11。
也就是12位分辨率,也就是1位代表0.0625摄氏度。
DS18B20经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
所以当我们只想简单的读取温度值的时候,只用读取暂存器中的第0和第1个字节就可以了。
简单的读取温度值的步骤如下: 1:跳过ROM 操作 2:发送温度转换命令 3:跳过ROM 操作 4:发送读取温度命令 5:读取温度值 DS18B20接口电路图:DS18B20的初始化:主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。
若无低电平出现一直都是高电平说明总线上无器件应答。
做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。
基于51单片机的DS18B20数字温度计的实训报告
电子信息职业技术学院暨国家示性软件职业技术学院单片机实训题目:用MCS-51单片机和18B20实现数字温度计姓名:系别:网络系专业:计算机控制技术班级:计控指导教师: * 伟时间安排:2013年1月7日至 2013年1月11日摘要随着国民经济的发展,人们需要对各中加热炉、热处理炉、反应炉和锅炉中温度进行监测和控制。
采用单片机来对他们控制不仅具有控制方便,简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大的提高产品的质量和数量。
在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。
在生产过程中,为了高效地进行生产,必须对它的主要参数,如温度、压力、流量等进行有效的控制。
温度控制在生产过程中占有相当大的比例。
温度测量是温度控制的基础,技术已经比较成熟。
传统的测温元件有热电偶和二电阻。
而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相对比较复杂,需要比较多的外部硬件支持。
我们用一种相对比较简单的方式来测量。
我们采用美国DALLAS半导体公司继DS18B20之后推出的一种改进型智能温度传感器DS18B20作为检测元件,温度围为-55~125 ºC,最高分辨率可达0.0625 ºC。
DS18B20可以直接读出北侧温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
本文介绍一种基于AT89C51单片机的一种温度测量及报警电路,该电路采用DS18B20作为温度监测元件,测量围0℃-~+100℃,使用LED模块显示,能设置温度报警上下限。
正文着重给出了软硬件系统的各部分电路,介绍了集成温度传感器DS18B20的原理,AT89C51单片机功能和应用。
该电路设计新颖、功能强大、结构简单。
关键词:单片机,数字控制,温度计, DS18B20,AT89S51第1章.数字温度计总体设计方案1.1数字温度计设计方案论证1.1.1方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
DS18B20数字温度计设计实验报告(1)
DS18B20数字温度计设计实验报告(1)目:DS18B20数字温度计姓名:李成学号:133010220指导老师:周灵彬设计时间:全文结束》》年1月目录1、引言31、1、设计意义31、2、系统功能要求32、方案设计33、硬件设计44、软件设计85、系统调试106、设计总结117、附录128、参考文献15DS18B20数字温度计设计1、引言1、1、设计意义在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。
而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。
其缺点如下:● 硬件电路复杂;● 软件调试复杂;● 制作成本高。
本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125℃,最高分辨率可达0、0625℃。
DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的热点。
1、2、系统功能要求设计出的DS18B20数字温度计测温范围在0~125℃,误差在±1℃以内,采用LED数码管直接读显示。
2、方案设计按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。
数字温度计总体电路结构框图如4、1图所示:AT89C51主控制器DS18B20显示电路扫描驱动图4、13、硬件设计温度计电路设计原理图如下图所示,控制器使用单片机AT89C2051,温度传感器使用DS18B20,使用四位共阳LED数码管以动态扫描法实现温度显示。
主控制器单片机AT89C51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携手持式产品的设计使用。
系统可用两节电池供电。
AT89C51的引脚图如右图所示:VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
DS18B20温度测量设计实验报告2
信息工程学院成绩课程设计说明书(论文)题目: 温度测量课程名称: 单片机课程设计专业: 电子信息工程班级: 电信0901学生姓名:学号: 31 16 10设计地点: 3#北603指导教师:设计起止时间:2012年5月2日至2012年5月22日目录一、设计功能要求: (3)二、系统总体设计方案: (5)1、基本设计思想: (5)2、实施方案论述: (6)三、系统分析与设计: (6)1、程序流程图及说明 (6)2、温度计的的电路设计 (9)四、源码清单: (12)五、改进意见与收获体会: (18)六、主要参考资料: (19)一、设计功能要求:本次的设计主要是利用了数字温度传感器DS18B20测量温度信号,计算后可以在LCD数码管上显示相应的温度值。
其温度测量范围为-55~125℃,精确到0.5℃。
本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
数字温度计所测量的温度采用数字显示,控制器使用单片机89C51,测温传感器使用DS18B20,用LCD1602实现温度显示。
从温度传感器DS18B20可以很容易直接读取被测温度值,进行转换即满足设计要求。
本次使用的单片机89C51和MCS-51是完全兼容的,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器。
其主要特点如下:•8位CPU。
•工作频率最高为24M。
•128B数据存储器。
•4KB程序存储器。
•程序存储器的寻址空间为64KB。
•片外数据存储器的寻址空间为64KB。
•128个用户位寻址空间。
•21个字节特殊功能寄存器。
•4个8位的并行I/O接口:P0、P1、P2、P3。
•两个16位定时/计数器。
•两个优先级别的5个中断源。
•1个全双工的串行I/O接口,可多机通信。
•111条指令,喊乘法指令和除法指令。
基于51单片机DS18B20温度可调上下限实训报告汇编
温度上下限可调式数字温度检测显示器设计与制作1101电信19刘朋朋一、任务与计划:采用 AT89C51 单片机作为控制器,数字温度传感器 DS18B20检测现场温度,能显示温度检测值、设定温度上限值和下限值,当温度超过设定上限时,显示“over tempH”,有红色LED闪亮警示,当温度低于设定的下限值时,显示"under tempL",有黄色LED闪亮警示。
将检测到的温度信息显在1602LCD 液晶显示器第一行形式为“Temp xx.x℃”。
第二行显示设定的温度上下限值和超限警示显示,温度上限值30+小组号,温度下限为25-学号末位数,第二行后两位显示学号。
二、及电路原理图设计1、液晶显示选用1602显示环境温度以及温度上下限的值,如:图(1-1)所示。
2、温度传感器DS18B20测环境温度如:图(1-2)所示。
3、按键模块如图:(1-3)所示,而本次设计只需用到四个按键即可,其中K2、K1控制设定温度的上限值的加减,K4、K3控制设定温度的下限值的加减。
4、8只LED模块如:图(1-4)所示,本次设计只需两只LED灯的闪烁来反映出检测的温度是否在设定的温度范围内。
5、元件模块和接口一览表如:图(1-5)所示。
6、运用Proteus软件绘制硬件电路如:图(1-6)所示。
图1-1液晶显示图1-2 DS18B20图1-3 独立按键图1-4 LED图1-5 元件模块和接口一览表图1-6 硬件电路设计三、设计、编译#include<reg52.h> //所包含头文件#include<stdio.h>#include "18b20.h"#include "1602.h"#include "delay.h"#define KeyPort P3 //定义按键端口sbit led1=P1^0;//定义高温报警LEDsbit led2=P1^1;//定义低温报警LEDbit ReadTempFlag;//定义读时间标志void Init_Timer0(void);//定时器初始化unsigned char KeyScan(void);//键盘扫描函数声明/*------------------------------------------------串口通讯初始化------------------------------------------------*/void UART_Init(void){SCON = 0x50;TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率晶振11.0592MHzTR1 = 1; // TR1: timer 1 打开//EA = 1; //打开总中断//ES = 1; //打开串口中断TI=1;}/*------------------------------------------------主函数------------------------------------------------*/void main (void){int temp,tempH=30,tempL=25;//给出初始化的温度上下线float temperature;unsigned char TempFlag=0;//定义温度标志位char displaytemp[16],num;//定义显示区域临时存储数组LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); //清屏Init_Timer0();UART_Init();Lcd_User_Chr(); //写入自定义字符while (1) //主循环{num=KeyScan();switch(num)//调整温度上下线的按键操作{case 1:if(tempH<127)tempH++;break;case 2:if(tempH>-55)tempH--;break;case 3:if(tempL<127)tempL++;break;case 4:if(tempL>-55)tempL--;break;default:break;}switch(TempFlag)//LCD显示温度上下线以及报警时动态{case 0: //输出温度上限下限sprintf(displaytemp,"H.%3d L.%3d ",tempH,tempL);LCD_Write_String(0,1,displaytemp);//显示第二行 break;case 1:LCD_Write_String(0,1,"over tempH 19 ");break;case 2:LCD_Write_String(0,1,"under tempL 19 ");break;default:break;}if(ReadTempFlag==1){ReadTempFlag=0;temp=ReadTemperature();temperature=temp*0.0625;temp>>=4;if(temp>tempH)//实际温度高于上线所执行的操作{led1=0;//高温LED闪亮报警led2=1;TempFlag=1;}else if(temp<tempL) 实际温度低于下限所执行的操作{led2=0;//低温LED闪亮报警led1=1;TempFlag=2;}else //正常显示所执行的操作{led1=1;led2=1;TempFlag=0;}//读取温度与写入温度sprintf(displaytemp,"Temp %6.2f ",temperature);//打印温度值LCD_Write_String(0,0,displaytemp);//显示第一行LCD_Write_Char(13,0,0x01);//写入温度右上角点LCD_Write_Char(14,0,'C'); //写入字符CLCD_Write_String(0,1,displaytemp);LCD_Write_Char(13,1,'1');LCD_Write_Char(14,1,'9');}}}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/ void Timer0_isr(void) interrupt 1{static unsigned int num;TH0=(65536-2000)/256; //送初始值定时2个毫秒 TL0=(65536-2000)%256;num++;if(num==400) //{num=0;ReadTempFlag=1; //读标志位置1}}unsigned char KeyScan(void) //按键扫描{unsigned char keyvalue;if(KeyPort!=0xff) //判断按键按下并返回相应的值{DelayMs(10);if(KeyPort!=0xff){keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue){case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;case 0xf7:return 4;break;case 0xef:return 5;break;case 0xdf:return 6;break;case 0xbf:return 7;break;case 0x7f:return 8;break;default:return 0;break;}}}return 0;}四、安装和调试1、高温报警时的状态(如图2-1)图(2-1)2、调低温度上限前后的比较(如图2-2)图(2-2)3、温度报警的近照(如图2-3)图(2-3)五、小结通过这次可调温度18b20的设计制作中在今天的调试中复习了按键扫描,显示程序,1602液晶显示的基本应用。
基于51单片机的DS18B20温度检测设计报告
课程名称:微机原理课程设计题目:温度检测课程设计摘要随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的温度检测仪。
本设计使用简便,功能丰富。
可以实现温度采集,温度报警,重设上下限温度值等功能。
在现代化的工业生产中,需要对周围环境的温度进行检测和控制。
本设计对温控报警问题展开思考,设计一个能根据需求设置低温到高温进行报警并通过数码管显示的系统。
该系统使用STC89C51单片机,同时运用单线数字温度传感器DS18B20,四位共阴数码管显示,按键控制等模块可实现温度的检测与设置。
课题经过实验验证达到设计要求,具有一定的使用价值和推广价值。
本作品使用四位共阴数码管显示,可以清晰地显示当前的报警温度,一定程度避免使用者使用时出错,安全可靠,可使用于各种食品储存室,植物养殖所等地方,实用性很高。
关键字:温度报警器STC89C51单片机数码管DS18B20目录一、课程设计目的和要求 (1)1.1 设计目的 (1)1.2 设计要求 (1)二、总体设计方案 (1)三、硬件设计 (2)3.1 DS18B20传感器 (2)3.2 STC89C51功能介绍 (6)3.3 时钟电路 (8)3.4 复位电路 (8)3.5 LED显示系统电路 (9)3.6 按键控制电路 (11)3.7 蜂鸣器电路 (11)3.8 总体电路设计 (12)四、软件设计 (14)4.1 keil软件 (14)4.2 系统主程序设计 (14)4.3 系统子程序设计 (15)五、仿真与实现 (18)5.1 PROTEUS仿真软件 (18)5.2 STC-ISP程序烧录软件 (19)5.3 使用说明 (20)六、总结 (21)一、课程设计目的和要求1.1 设计目的熟悉典型51单片机,加深对51单片机课程的全面认识和掌握,对51单片机及其接口的应用作进一步的了解,掌握基于51单片机的系统设计的一般流程、方法和技巧,为我们解决工程实际问题打下坚实的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
温度上下限可调式数字温度检测显示器设计与制作1101电信19刘朋朋一、任务与计划:采用 AT89C51 单片机作为控制器,数字温度传感器 DS18B20检测现场温度,能显示温度检测值、设定温度上限值和下限值,当温度超过设定上限时,显示“over tempH”,有红色LED闪亮警示,当温度低于设定的下限值时,显示"under tempL",有黄色LED闪亮警示。
将检测到的温度信息显在1602LCD 液晶显示器第一行形式为“Temp xx.x℃”。
第二行显示设定的温度上下限值和超限警示显示,温度上限值30+小组号,温度下限为25-学号末位数,第二行后两位显示学号。
二、及电路原理图设计1、液晶显示选用1602显示环境温度以及温度上下限的值,如:图(1-1)所示。
2、温度传感器DS18B20测环境温度如:图(1-2)所示。
3、按键模块如图:(1-3)所示,而本次设计只需用到四个按键即可,其中K2、K1控制设定温度的上限值的加减,K4、K3控制设定温度的下限值的加减。
4、8只LED模块如:图(1-4)所示,本次设计只需两只LED灯的闪烁来反映出检测的温度是否在设定的温度范围内。
5、元件模块和接口一览表如:图(1-5)所示。
6、运用Proteus软件绘制硬件电路如:图(1-6)所示。
图1-1液晶显示图1-2 DS18B20图1-3 独立按键图1-4 LED图1-5 元件模块和接口一览表图1-6 硬件电路设计三、设计、编译#include<reg52.h> //所包含头文件#include<stdio.h>#include "18b20.h"#include "1602.h"#include "delay.h"#define KeyPort P3 //定义按键端口sbit led1=P1^0;//定义高温报警LEDsbit led2=P1^1;//定义低温报警LEDbit ReadTempFlag;//定义读时间标志void Init_Timer0(void);//定时器初始化unsigned char KeyScan(void);//键盘扫描函数声明/*------------------------------------------------串口通讯初始化------------------------------------------------*/void UART_Init(void){SCON = 0x50;TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; // TH1: 重装值 9600 波特率晶振11.0592MHzTR1 = 1; // TR1: timer 1 打开//EA = 1; //打开总中断//ES = 1; //打开串口中断TI=1;}/*------------------------------------------------主函数------------------------------------------------*/void main (void){int temp,tempH=30,tempL=25;//给出初始化的温度上下线float temperature;unsigned char TempFlag=0;//定义温度标志位char displaytemp[16],num;//定义显示区域临时存储数组LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); //清屏Init_Timer0();UART_Init();Lcd_User_Chr(); //写入自定义字符while (1) //主循环{num=KeyScan();switch(num)//调整温度上下线的按键操作{case 1:if(tempH<127)tempH++;break;case 2:if(tempH>-55)tempH--;break;case 3:if(tempL<127)tempL++;break;case 4:if(tempL>-55)tempL--;break;default:break;}switch(TempFlag)//LCD显示温度上下线以及报警时动态{case 0: //输出温度上限下限sprintf(displaytemp,"H.%3d L.%3d ",tempH,tempL);LCD_Write_String(0,1,displaytemp);//显示第二行 break;case 1:LCD_Write_String(0,1,"over tempH 19 ");break;case 2:LCD_Write_String(0,1,"under tempL 19 ");break;default:break;}if(ReadTempFlag==1){ReadTempFlag=0;temp=ReadTemperature();temperature=temp*0.0625;temp>>=4;if(temp>tempH)//实际温度高于上线所执行的操作{led1=0;//高温LED闪亮报警led2=1;TempFlag=1;}else if(temp<tempL) 实际温度低于下限所执行的操作{led2=0;//低温LED闪亮报警led1=1;TempFlag=2;}else //正常显示所执行的操作{led1=1;led2=1;TempFlag=0;}//读取温度与写入温度sprintf(displaytemp,"Temp %6.2f ",temperature);//打印温度值LCD_Write_String(0,0,displaytemp);//显示第一行LCD_Write_Char(13,0,0x01);//写入温度右上角点LCD_Write_Char(14,0,'C'); //写入字符CLCD_Write_String(0,1,displaytemp);LCD_Write_Char(13,1,'1');LCD_Write_Char(14,1,'9');}}}/*------------------------------------------------定时器初始化子程序------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响//TH0=0x00; //给定初值//TL0=0x00;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}/*------------------------------------------------定时器中断子程序------------------------------------------------*/ void Timer0_isr(void) interrupt 1{static unsigned int num;TH0=(65536-2000)/256; //送初始值定时2个毫秒 TL0=(65536-2000)%256;num++;if(num==400) //{num=0;ReadTempFlag=1; //读标志位置1}}unsigned char KeyScan(void) //按键扫描{unsigned char keyvalue;if(KeyPort!=0xff) //判断按键按下并返回相应的值{DelayMs(10);if(KeyPort!=0xff){keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue){case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;case 0xf7:return 4;break;case 0xef:return 5;break;case 0xdf:return 6;break;case 0xbf:return 7;break;case 0x7f:return 8;break;default:return 0;break;}}}return 0;}四、安装和调试1、高温报警时的状态(如图2-1)图(2-1)2、调低温度上限前后的比较(如图2-2)图(2-2)3、温度报警的近照(如图2-3)图(2-3)五、小结通过这次可调温度18b20的设计制作中在今天的调试中复习了按键扫描,显示程序,1602液晶显示的基本应用。
理解了SWITCH语句的基本应用提高了技能,掌握模块化编程的思想。
同时也提高了我的动手画图的能力处理解决问题的能力!。