(完整版)基于51单片机的数字温度计

合集下载

基于MCS51系列单片机的数字温度计设计

基于MCS51系列单片机的数字温度计设计

基于MCS-51系列单片机的数字温度计设计基于MCS-51系列单片机的数字温度计设计摘要本文提出了基于MCS-51系列单片机的数字温度计的制作电路和编程思想。

该数字温度计以宏晶公司的STC89C52 单片机为主控,配以达拉斯公司的DS18B20数字温度传感器,采用1602双行英文字符液晶作显示。

实现了对温度的测量,显示,和报警等功能。

关键词:STC89C52单片机;数字传感器DS18B20;显示器LCD;目录摘要 (I)ABSTRACT ........................... 错误!未定义书签。

1 绪论 (4)1.1 选题的背景 (4)1.2 数字温度计简介 (4)1.2.1 数字温度计的特征 (4)1.2.2 设计实现的目标 (5)2 数字温度计的方案设计 (6)2.1 设计方案论证与比较 (6)2.1.1 显示电路方案 (6)2.1.2 测温电路方案 (6)2.2 系统总体方案 (6)3 数字温度计的硬件电路设计 (8)3.1 控制电路 (8)3.1.1 MCU简介 (8)3.2.2 最小系统模块 (9)3.3 温度传感器设计 (10)3.3.1 DS18B20简介 (10)3.3.2 温度传感器与单片机的连接 (12)3.3.3 复位信号及外部复位电路 (13)3.4 单片机与报警电路 (13)3.5 显示电路 (13)4 软件设计 (15)4.1 DS18b20的读操作 (15)4.2 DS18b20的温度数据处理 (16)4.3 1602显示部分 (17)5 数据测试 (20)参考文献 (22)附录1 程序源代码................ 错误!未定义书签。

1 绪论1.1 选题的背景随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。

传统的温度检测以热敏电阻为温度敏感元件。

热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。

基于51单片机的测温数字温度计的最小系统

基于51单片机的测温数字温度计的最小系统

●第一章设计目的——————————————3 ●第二章设计内容————————————— 3 ●第三章分析———————————————7 ●第四章示例程序——————————————7 ●第五章总结———————————————13一、设计目的:利用51单片机和ds18b20等元件设计一个实时的测量温度和报警的小系统。

系统可以通过数码管显示实时的温度值,显示的温度的精度是0.01℃。

然后,还可以利用按键进行最高温度值和最低温度值的设定,当温度超过设定的最高温度值的时候,蜂鸣器会响,并且会有一个led灯亮起;当温度值低于设定的最低温度值的时候,蜂鸣器会响,但是led灯不会亮。

二、设计内容:温度计电路设计总体设计方框图如图1所示,控制器采用单片机8051,温度传感器采用DS18B20,显示部分是一个四位一体的数码管,设置电路部分是3个按键和3个用于指示的led灯,报警电路部分是一个led灯和一个蜂鸣器。

图11、 温度传感器DS18B20与8051单片机连接非常简单,只需将DS18B20信号线与单片机一位I/O 线相连,且一位I/O 线可连接多个DS18B20,以实现单点或多点温度测量。

温度计仿真电路部分如图2所示。

图2单片机复位 时钟震荡主 控制 器数码管显示温度传感器报警电路设置电路Ds18b20需要严格的协议以确保数据的完整性。

协议包括集中单线信号类型:复位脉冲.存在脉冲.写0.写1.读0和读1。

所有这些信号,处存在脉冲外,都是由总线控制器发出的。

和ds18b20间的任何通讯都是需要以初始化序列开始,初始化序列见图3,一个复位脉冲跟着一个存在脉冲表明ds18b20已经准备好发送和接收数据。

图3Ds18b20的读写时序图如图4所示,Ds18b20的几个常用的功能命令如下: CCH 跳过ROM指令44H 温度转换指令BEH 读SRAM4EH 写SRAM三、分析:1.程序一开始测得温度并储存,然后对按键1进行判断,若按键1未按下则直接跳到第四步;2.若按键1按下,则开始设置最高温度,然后再判断按键2(3)是否按下,若按下,则对应设置十(个)位。

51单片机设计数字温度计(流程图+源码+实物图片)

51单片机设计数字温度计(流程图+源码+实物图片)

DS18B20获取温度程序流程图DS18B20的读字节,写字节,获取温度的程序流程图如图所示结束DS18B20初始化程序流程图写0x44启动DS18B20延时500 s_____ 、一DS18B20 初始化写0xcc跳过读RCMDS18B20获取温度程序流程图DS18B20读字节程序流程图图3-4 DS18B20程序流程图DS18B20写字节程序流程图显示程序设计显示电路是由四位一体的数码管来实现的。

由于单片机的I/O 口有限,所以数码管采用动态扫描的方式来进行显示。

程序流程图如图所示。

图显示程序流程图按键程序设计按键是用来设定上下限报警温度的。

具体的程序流程图如图所示N附 1 源程序代码******************************************************************* 程序名 ; 基于 DS18B20 的测温系统* 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。

K1 是用来 * 进入上下限调节模式的,当按一下 K1 进入上限调节模式,再按一下进入下限 * 调节模式。

在正常模式下,按一下K2 进入查看上限温度模式,显示 1s 左右自动* 退出;按一下 K3 进入查看下限温度模式,显示 1s 左右自动退出;按一下 K4 消除 * 按键音,再按一下启动按键音。

在调节上下限温度模式下, K2 是实现加 1 功能, * K1 是实现减 1 功能, K3 是用来设定上下限温度正负的。

* 编程者: ZPZ * 编程时间: 2009/10/2*******************************************************************bit s=0;〃s 是调整上下限温度时温度闪烁的标志位, s=0不显示200ms , s=1 显示 1s 左右bit s1=0; void display1(uint z); #include"ds18b20.h" //s1 标志位用于上下限查看时的显示//声明 display1 ()函数//将 ds18b20.h 头文件包含到主程序#include"keyscan.h" #include"display.h"/***********************//将 keyscan.h 头文件包含到主程序 //将 display.h 头文件包含到主程序 主函数 ************************/#include<AT89X52.h> #include<intrins.h>// 将 AT89X52.h 头文件包含到主程序 //将 intrins.h 头文件包含到主程序(调用其中的 函数延时)_nop_() 空操作#define uint unsigned int #define uchar unsigned char uchar max=0x00,min=0x00;//变量类型宏定义,用 //变量类型宏定义,用//max 是上限报警温度, uint 表示无符号整形( 16 位) uchar 表示无符号字符型( 8 位)min 是下限报警温度void main(){beer=1;led=1; timer1_init(0); get_temperature(1);while(1){keyscan();get_temperature(0);//获取温度函数//关闭蜂鸣器// 关闭LED 灯//初始化定时器1(未启动定时器1)// 首次启动DS18B20 获取温度(DS18B20 上点后自动将EEPROM 中的上下限温度复制到TH 和TL 寄存器)//主循环//按键扫描函数keyscan(); // 按键扫描函数display(temp,temp_d*0.625);// 显示函数 alarm(); //报警函数 keyscan();// 按键扫描函数}}/******************************************************************** * 程序名 ; __ds18b20_h__ * 功 能: DS18B20 的 c51 编程头文件 * 编程者: ZPZ * 编程时间: 2009/10/2* 说 明:用到的全局变量是:无符号字符型变量temp ( 测得的温度整数部分 ),temp_d* ( 测得的温度小数部分 ),标志位 f (测量温度的标志位‘ 0'表示“正温度”‘ 1'表 * 示“负温度”),标志位 f_max (上限温度的标志位‘ 0'表示“正温度”、‘ 1'表 * 示“负温度”),标志位f_min (下限温度的标志位‘ 0'表示“正温度”、‘ 1'表* 示“负温度”),标志位 w ( 报警标志位‘ 1'启动报警‘ 0'关闭报警 ) 。

(完整)基于51单片机的数字温度计设计

(完整)基于51单片机的数字温度计设计

(完整)基于51单片机的数字温度计设计编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)基于51单片机的数字温度计设计)的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)基于51单片机的数字温度计设计的全部内容。

基于51单片机的数字温度计设计一.课题选择随着时代的发展,控制智能化,仪器小型化,功耗微量化得到广泛关注。

单片机控制系统无疑在这方面起到了举足轻重的作用。

单片机的应用系统设计业已成为新的技术热点,其中数字温度计就是一个典型的例子,它可广泛应用与生产生活的各个方面,具有巨大的市场前景。

二.设计目的1.理解掌握51单片机的功能和实际应用。

2.掌握仿真开发软件的使用。

3.掌握数字式温度计电路的设计、组装与调试方法。

三.实验要求1.以51系列单片机为核心器件,组成一个数字式温度计.2.采用数字式温度传感器为检测器件,进行单点温度检测。

3.温度显示采用4位LED数码管显示,三位整数,一位小数。

四.设计思路1.根据设计要求,选择STC89C51RC单片机为核心器件。

2.温度检测采用DS18B20数字式温度传感器。

与单片机的接口为P3。

6引脚.3.采用usb数据线连接充电宝供电,接电后由按钮开关控制电路供电。

硬件电路设计总体框图为图1:五.系统的硬件构成及功能1.主控制器单片机STC89C51RC具有低电压供电和体积小等特点,有40个引脚,其仿真图像如下图所示:2.显示电路显示电路采用4位共阳LED数码管,从P3口RXD,TXD串口输出段码。

LED数码管在仿真软件中如下图所示:3.温度传感器DS18B20是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

基于51单片机的数字温度计课程设计毕业论文 .docx

基于51单片机的数字温度计课程设计毕业论文  .docx

摘要温度的检测与控制是工业生产过程中比较典型的应用。

本设计以AT89C52 单片机为核心,采用DS18B20温度传感器检测温度,由温度采集、温度显示,温度报警等功能模块组成。

基于题口基木要求,本系统对温度采集和温度显示系统行了重点设计。

木系统大部分功能能由软件实现,吸收了硬件软件化的思想。

实际操作时,各功能在开发板上也能完美实现。

本系统实现了要求的基本功能,其余发挥部分也能实现。

关键字:AT89C52单片机、DS18B20温度传感器、数码管显示、温度采集目录绪论 ................................................ 二•设计目的.............................................三.设计要求.............................................四.设计思路.............................................五.系统的硬件构成及功能.................................5.1主控制器...........................................5.2显示电路...........................................5.3温度传感器.........................................六.系统整体硬件电路.....................................七.系统程序设计.........................................八.测量及其结果分析.....................................九.设计心得体会.........................................十.参考文献.............................................. 附录1源程序附录2元件清单及PCB图一. 绪论随着时代的发展,控制智能化,仪器小型化,功耗微量化得到广泛关注。

基于51单片机的数字温度计

基于51单片机的数字温度计

引言:数字温度计是一种基于51单片机的温度测量装置,它通过传感器感知环境的温度,并使用单片机将温度值转换为数字形式,并显示在液晶屏上。

本文将详细介绍数字温度计的设计原理、硬件连接、软件编程以及应用领域。

概述:数字温度计基于51单片机的设计理念,其基本原理是通过传感器将温度转换为电信号,然后通过ADC(模数转换器)将电信号转换为数字信号,最后使用单片机将数字信号转换为温度值。

同时,数字温度计还将温度值显示在液晶屏上,方便用户直观地了解环境温度。

正文内容:1. 硬件连接:1.1 使用温度传感器感知环境温度:常用的温度传感器有NTC热敏电阻和DS18B20数字温度传感器。

通过将传感器连接到51单片机的引脚上,可以实现对环境温度的感知。

1.2 连接ADC进行模数转换:ADC是将模拟信号转换为数字信号的关键部件。

通过将51单片机的引脚连接到ADC芯片的输入端,可以将模拟的温度信号转换为数字信号。

1.3 连接液晶屏显示温度值:通过将51单片机的引脚连接到液晶屏的控制引脚和数据引脚,可以将温度值以数字形式显示在液晶屏上。

2. 软件编程:2.1 初始化引脚和ADC:在软件编程中,需要初始化51单片机的引脚设置和ADC的工作模式。

通过设置引脚为输入或输出,以及设置ADC的参考电压和工作模式,可以确保硬件正常工作。

2.2 温度测量算法:根据传感器的工作原理和电压-温度特性曲线,可以编写相应的算法将ADC测得的电压值转换为温度值。

例如,对于NTC热敏电阻,可以使用Steinhart-Hart公式进行温度计算。

2.3 温度值显示:将温度值以数字形式显示在液晶屏上。

通过设置液晶屏的控制引脚和数据引脚,可以控制液晶屏的显示内容,并将温度值以数字形式显示在屏幕上。

3. 基于51单片机的数字温度计应用:3.1 家庭温度监测:数字温度计可以安装在家庭中的不同区域,实时监测室内温度,并通过数字显示提供直观的温度信息。

这对于家庭的舒适性和节能都有重要意义。

基于51单片机的数字温度计

基于51单片机的数字温度计

基于AT89S51的温度计院系:电子和信息工程学院专业:电子信息科学和技术班级:09信本学生姓名:刘辉学号:093621059第一部分 设计要求:采用AT89C51单片机和LCD 液晶显示器设计一个数字温度计,当外界温度变化时,显示屏上的温度值也随着变化。

数字温度计的测温范围为-55°C 到125°C 之间。

第二部分 硬件原理框图:硬件部分主要分为晶振振荡电路、复位电路、LCD 液晶显示电路、DS18B20温度传感器采集电路、电源电路等部分组成。

第三部分 硬件原理图:硬件模块原理图:AT89C51单片机晶振振荡电路 复位电路 L CD 液晶显示电路温度传感器采集电路电 源 电 路一、晶振振荡电路该电路是由两个电容和一个晶振组成,晶振产生基本的时钟信号它给单片机提供时钟信号。

二、复位电路复位的主要作用是把特殊功能寄存器的数据刷新为默认数据,单片机在运算过程中由于干扰等外界原因造成寄存器中数据混乱不能使其正常继续执行程序或产生的结果不正确时均需要复位,以使程序重新开始运行。

三、LCD液晶显示电路经过温度传感器,将采集到的温度信息传给单片机,单片机处理后又将信息发给P0口,P0口和LCD的数据口相连接,液晶屏上会显示采集到的温度值。

四、温度传感器采集电路单线数字温度传感器DS18B20测量温度范围为-55°C~+125°C,-10~+85°C范围内,精度为±0.5°C。

DS1822的精度较差为± 2°C 。

DS18B20的管脚排列如下: DQ 为数字信号输入/输出端;GND 为电源地;VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM 指令,最后发送RAM 指令,这样才能对DS18B20进行预定的操作。

51单片机程序(数字温度计)

51单片机程序(数字温度计)

数字温度计1、LCD.c#include <reg51.h>#include<LCD.h>unsigned char code number_X[]={ //宽x高=8x16,纵向字节倒序0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, //00x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, //10x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, //20x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, //30x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, //40x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, //50x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, //60x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, //70x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00, //80x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, //90x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00, //-0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //nop 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00, //:0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};void LCD_WriteCommandE1(unsigned char com) {while(CRADD1 & 0x80);CWADD1 = com;}void LCD_WriteDataE1(unsigned char dat)while(CRADD1 & 0x80);DWADD1 = dat;}void LCD_WriteCommandE2(unsigned char com) {while(CRADD2 & 0x80);CWADD2 = com;}void LCD_WriteDataE2(unsigned char dat){while(CRADD2 & 0x80);DWADD2 = dat;}void LCD_Init(){LCD_WriteCommandE1(0xe2);LCD_WriteCommandE2(0xe2);LCD_WriteCommandE1(0xa4);LCD_WriteCommandE2(0xa4);LCD_WriteCommandE1(0xa9);LCD_WriteCommandE2(0xa9);LCD_WriteCommandE1(0xa0);LCD_WriteCommandE2(0xa0);LCD_WriteCommandE1(0xc0);LCD_WriteCommandE2(0xc0);LCD_WriteCommandE1(0xaf);LCD_WriteCommandE2(0xaf);}void LCD_Clear(void){unsigned char i,j;for(i=0;i<4;i++){LCD_WriteCommandE1(i+0xb8);LCD_WriteCommandE2(i+0xb8);LCD_WriteCommandE1(0x00);LCD_WriteCommandE2(0x00);for(j=0;j<0x50;j++){LCD_WriteDataE1(0x00);LCD_WriteDataE2(0x00);}}void display_cn(unsigned char lin,unsigned int col,unsigned int len,unsigned char *p) {unsigned int seg,i,j;unsigned char a,L,n;switch(lin){case 0: n=0xba;break;case 1: n=0xb8;break;}for(i=0;i<len;i++){for(j=0;j<2;j++){L=col;LCD_WriteCommandE1(n+j);LCD_WriteCommandE2(n+j);for(seg=0;seg<16;seg++){if (L < 61){a = L;LCD_WriteCommandE1(a);LCD_WriteDataE1(*p++);}else{a = L-61;LCD_WriteCommandE2(a);LCD_WriteDataE2(*p++);}L++;}}col=col+16;}}void display_number(unsigned char lin,unsigned int col,unsigned char num){unsigned int seg,i,j;unsigned char a,L,n,k;switch(lin){case 0: n=0xba;break;case 1: n=0xb8;break;}k=num*16;for(j=0;j<2;j++){L=col;LCD_WriteCommandE1(n+j);LCD_WriteCommandE2(n+j);for(seg=0;seg<8;seg++){if (L < 61){a = L;LCD_WriteCommandE1(a);LCD_WriteDataE1(number_X[k++]);}else{a = L-61;LCD_WriteCommandE2(a);LCD_WriteDataE2(number_X[k++]);}L++;}}}void display_unsigned_int(unsigned char lin,unsigned int col,unsigned int dat) {unsigned int seg;unsigned char k[4];k[3]=dat%10;k[2]=((dat/10)%10);k[1]=((dat/100)%10);k[0]=((dat/1000)%10);if(k[0]==0) {k[0]=12;}if((k[0]==12)&&(k[1]==0)){ k[0]=12;k[1]=12;}if((k[0]==12)&&(k[1]==12)&&(k[2]==0)){k[0]=12;k[1]=12;k[2]=12;}for(seg=0;seg<4;seg++){display_number(lin,col,k[seg]);col=col+10;}}void display_signed_int(unsigned char lin,unsigned int col,signed int dat){unsigned int seg;unsigned char k[5],a;k[0]=12;if(dat<0){dat=(~dat)+1;k[0]=11;}k[4]=dat%10;k[3]=((dat/10)%10);k[2]=((dat/100)%10);k[1]=((dat/1000)%10);a=k[0];if(k[1]==0) {k[0]=12;k[1]=a;}if((k[1]==a)&&(k[2]==0)){ k[0]=12;k[1]=12;k[2]=a;}if((k[1]==12)&&(k[2]==a)&&(k[3]==0)){k[0]=12;k[1]=12;k[2]=12;k[3]=a;}for(seg=0;seg<5;seg++){display_number(lin,col,k[seg]);col=col+10;}}void display_unsigned_char(unsigned char lin,unsigned int col,unsigned char dat) {unsigned int seg;unsigned char k[3];k[1]=dat%10;k[0]=((dat/10)%10);for(seg=0;seg<2;seg++){display_number(lin,col,k[seg]);col=col+10;}}2、LCD.h#include <reg51.h>#include <absacc.h>#ifndef __LCD__#define __LCD__#define CWADD1 XBYTE[0x8000]#define DWADD1 XBYTE[0x8001]#define CRADD1 XBYTE[0x8002]#define DRADD1 XBYTE[0x8003]#define CWADD2 XBYTE[0x8004]#define DWADD2 XBYTE[0x8005]#define CRADD2 XBYTE[0x8006]#define DRADD2 XBYTE[0x8007]extern void LCD_Init();extern void display_cn(unsigned char lin,unsigned int col,unsigned int len,unsigned char *p);extern void display_signed_int(unsigned char lin,unsigned int col,signed int dat);extern void display_unsigned_int(unsigned char lin,unsigned int col,unsigned int dat);extern void display_unsigned_char(unsigned char lin,unsigned int col,unsigned char dat);extern void LCD_Clear(void);#endif3、DS18B20.c#include <reg51.h>#include "string.h"#include "intrins.h"#include "DS18B20.h"sbit DQ=P1^0;void delay(unsigned int uSeconds){for(;uSeconds>0;uSeconds--);}unsigned char ow_reset(void){unsigned char xdata presence;DQ = 0;delay(48);DQ = 1;delay(7);presence = DQ;delay(48);return(presence);}unsigned char read_byte(void){unsigned char i;unsigned char value = 0;for (i=8;i>0;i--){value>>=1;DQ = 0; // pull DQ low to start read timeslotDQ = 1; // then rlease DQ_nop_();_nop_();_nop_();_nop_();_nop_(); // read DQ data at 1 to 15us,here delay 6us;if(DQ)value|=0x80;delay(7); // wait for rest of timeslot,72us }return(value);}void write_byte(char val){unsigned char i;for (i=8; i>0; i--) // writes byte, one bit at a time{DQ = 0; // pull DQ low to start timeslotDQ = val&0x01;delay(7); // hold value for remainder of timeslot,here 72us DQ = 1;val=val/2;}delay(5);}float Read_Temperature(void){unsigned char Hdata,Ldata,b;int a;bit flag;float x,y,z;ow_reset();write_byte(0xCC); // Skip ROMwrite_byte(0xBE); // Read Scratch Paddelay(100);Ldata=read_byte(); // Low byte firstHdata=read_byte(); // High byte afterow_reset();write_byte(0xCC); //Skip ROMwrite_byte(0x44); // Start Conversiona=Hdata*256+Ldata;x=(float)(Ldata&0x0f);x=x/16;if(a<0)flag=1;else flag=0;b=a>>4;z=(float)(b);if(flag==1){b=~b+1;z=(float)(b);z=0-z;}y=z+x;return y;}4、DS18B20.h#ifndef __DS18B20__#define __DS18B20__extern float Read_Temperature(void); #endif5、main.c#include <reg51.h>#include<LCD.h>#include<main.h>#include "DS18B20.h"void wait(unsigned int x){unsigned int i;i=0;for(i=0;i<x;i++);}void main(void){float F;signed int a;LCD_Init();LCD_Clear();display_cn(0,20,5,szwdj);display_cn(1,0,3,wdz);while(1){F=Read_Temperature( );a=(signed int)F;display_signed_int(1,40,a);wait(5000);}}6、main.h#ifndef MAIN_H__#define MAIN_H__// 中文字模库16x16点阵code unsigned char szwdj[]={ //纵向字节倒序。

基于51单片机的智能电子体温计

基于51单片机的智能电子体温计

智能体温计摘要:本智能体温计采用AT89S52作为核心器件实现对系统的自动控制,单片机将采集到温度值在LED数码管上显示出来。

此外温度预制,报警电路模块功能也由单片机完成。

通过系统的设计与实现说明本设计方案切实可以,能够完成题目所要求的基本功能部分,并留有相应的接口,为完成扩展功能打下基础。

关键字:单片机AD590 ADC0809 ISD2560一、主要模块的方案论证与比较1、温度传感器的选择方案一:采用热敏电阻。

热敏电阻价格便宜,对温度灵敏,原理简单,但线性度不好,如不进行线性补偿,对于本设计归一化输出的要求,难于达到设计精度;如要对非线性进行补偿,则电路结构复杂,难于调整。

故不采用。

方案二:采用热电偶。

热电偶在测温范围内热电性质稳定,不随时间变化而变化,电阻温度系数小,导电率高,比热小,但热电偶一般体积较大,使用不方便,价格相对较高。

作为一个智能体温计的温度传感器,要求体积小,使用方便,便于携带,故此方案不合适。

方案三:采用集成温度传感器。

集成温度传感器一般且有具有线性好、精度高、灵敏度高、体积小、使用方便等优点。

根据实验室现有材料可选取AD590。

AD590的测温范围为-55℃~+150℃,能满足本设计的0~50度测量要求。

根据相关技术资料:AD590线性电流输出为1 A/K,正比于绝对温度;AD590的电源电压范围为4V~30V,并可承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。

该方案能完全满足此设计的要求,故采用此方案。

2、A/D转换器的选择方案一:选用AD574。

AD574的数字量位数可设成8位也可以设为12位,且无需外接CLOCK时钟,转换时间达到25μs,输出模拟电压可以是单极性的0-10V或0-20V,也可以是双极性的±5V或±10V之间。

AD574精度高,但与8位的单片机接口较复杂,且价格昂贵,考虑到体温计是对温度的测量,其响应时间的要求不高。

基于51单片机数字温度计系统设计与实现

基于51单片机数字温度计系统设计与实现

基于51单片机数字温度计系统设计与实现数字温度计是一种可以测量环境温度并将结果以数字方式显示的设备。

在本次任务中,我们将基于51单片机设计和实现一个数字温度计系统。

本文将介绍数字温度计的原理、硬件设计、软件设计以及系统的实施过程。

首先,让我们来了解一下数字温度计的工作原理。

数字温度计通过传感器获取环境温度的模拟信号,然后将其转换为数字信号进行处理,并最终在数字显示器上显示温度值。

通常,我们使用的传感器是温度敏感电阻或数字温度传感器。

接下来,我们将讨论硬件设计。

在本次任务中,我们使用的是51单片机作为主控制器。

我们需要连接一个温度传感器来测量温度,并将温度值转换为数字信号。

同时,我们还需要连接一个数字显示器,用于显示温度值。

为了实现这些功能,我们需要设计一个电路板,并正确布局电子元件。

另外,我们还需要通过键盘或按钮来控制系统的操作,例如切换温度单位等。

在软件设计方面,我们需要编写程序来完成以下任务:首先,我们需要初始化51单片机的引脚和中断。

然后,我们需要编写一个温度转换的函数,将传感器输出的模拟信号转换为数字信号。

接下来,我们需要编写一个显示函数,将转换后的数字温度值显示在数字显示器上。

最后,我们还可以添加一些功能,例如设置温度单位(摄氏度或华氏度)和存储温度数据等。

在系统实施过程中,我们需要按照以下步骤进行操作:首先,进行硬件的连接和组装。

确保所有电子元件正确连接并固定在电路板上。

然后,烧录编写好的程序到51单片机中。

接下来,我们可以通过设置开关或按键来控制系统的操作。

最后,我们可以测试系统的功能和性能,确保数字温度计正常工作。

值得注意的是,在设计和实现数字温度计系统时,我们需要考虑一些问题。

例如,温度传感器的精度和响应时间,数字显示器的显示精度和分辨率,以及系统的稳定性和可靠性等。

通过合理的设计和选择高质量的元件,我们可以提高系统的性能和可靠性。

总结起来,本次任务中我们基于51单片机设计和实现了一个数字温度计系统。

基于51单片机的数字温度计实时监测方案探究

基于51单片机的数字温度计实时监测方案探究

基于51单片机的数字温度计实时监测方案探究数字温度计是一种能够实时监测环境温度的仪器。

本方案通过使用51单片机,将温度传感器与单片机相连接,以实现对环境温度的实时监测。

以下是本方案的详细内容。

一、硬件设计1. 硬件器材准备:准备一个51单片机开发板,一个温度传感器(如DS18B20)、若干杜邦线、一个电阻和一个LCD液晶显示屏。

2. 连接电路:将温度传感器的Vcc引脚连接到单片机的VCC引脚,将GND引脚连接到单片机的GND引脚。

将传感器的DATA引脚连接到单片机的一个IO引脚,并通过一个4.7kΩ的上拉电阻连接到VCC引脚。

将LCD显示屏的引脚连接到单片机相应的IO引脚和电源引脚。

3. 编写单片机程序:使用C语言编写单片机程序,通过读取传感器数据并将结果显示到LCD屏幕上。

程序中需要包括初始化函数、温度读取函数以及数据显示函数。

二、软件设计1. 初始化函数:在初始化函数中设置单片机的工作模式、引脚功能和相关参数,如为LCD显示屏设置数据总线引脚和控制引脚等。

2. 温度读取函数:通过单片机的IO口读取传感器数据。

使用51单片机的串行通信功能与温度传感器进行通信,并读取传感器发送的数据。

根据传感器的规格说明书,将接收到的数据转换为温度值。

3. 数据显示函数:将读取到的温度值显示到LCD屏幕上。

先清除LCD屏幕上的内容,然后使用LCD屏幕上的光标控制函数将温度值显示到特定位置。

可以选择在LCD屏幕上显示华氏度或摄氏度。

三、实时监测方案1. 循环读取温度值:在主函数中,使用一个无限循环来实现连续地读取温度值。

在每次循环中调用温度读取函数,读取传感器当前的温度值。

2. 设置温度报警:根据实际需求,在主函数中添加一个判断语句,当温度值超过或低于某个阈值时,触发温度报警。

可以通过LED灯、蜂鸣器等外设来实现报警。

3. 数据保存和上传:根据需求,可以将读取的实时温度值保存到相应的存储介质中,如SD卡或EEPROM。

基于51单片机的数字温度计设计

基于51单片机的数字温度计设计

基于51单片机的数字温度计设计数字温度计是一种广泛使用的电子测量设备,通过传感器将温度转化为数字信号,并显示出来。

本文将介绍基于51单片机的数字温度计的设计。

该设计将使得使用者能够准确、方便地测量温度,并实时显示在液晶显示屏上。

1. 硬件设计:- 传感器选择:在设计数字温度计时,我们可以选择使用NTC(负温度系数)热敏电阻或者DS18B20数字温度传感器作为温度传感器。

这里我们选择DS18B20。

- 信号转换:DS18B20传感器是一种数字传感器,需要通过单总线协议与51单片机进行通信。

因此,我们需要使用DS18B20专用的驱动电路,将模拟信号转换为数字信号。

- 51单片机的选择:根据设计要求选择合适的51单片机,如STC89C52、AT89S52等型号。

单片机应具备足够的IO口来与传感器和液晶显示屏进行通信,并具备足够的计算和存储能力。

- 显示屏选择:为了实时显示温度,我们可以选择使用1602型字符液晶显示屏。

该显示屏能够显示2行16个字符,足够满足我们的需求。

通过与51单片机的IO口连接,我们可以将温度数据显示在屏幕上。

2. 软件设计:- 采集温度数据:通过51单片机与DS18B20传感器进行通信,采集传感器传输的数字温度数据。

通过解析传感器发送的数据,我们可以获得当前的温度数值。

- 数据处理:获得温度数据后,我们需要对其进行处理。

例如,可以进行单位转换,从摄氏度到华氏度或者开尔文度。

同时,根据用户需求,我们还可以对数据进行滤波、校准等处理。

- 显示数据:通过与液晶显示屏的连接,我们可以将温度数据显示在屏幕上。

可以使用51单片机内部的LCD模块库来控制液晶显示屏,显示温度数据以及相应的单位信息。

- 用户交互:可以设置一些按键,通过与51单片机的IO口连接,来实现用户与数字温度计的交互。

例如,可以设置一个按钮来进行温度单位的切换,或者设置一个按钮来启动数据保存等功能。

3. 功能拓展:- 数据存储:除了实时显示当前温度,我们还可以考虑增加数据存储功能。

(完整word版)基于51单片机的数字温度计的设计

(完整word版)基于51单片机的数字温度计的设计

《单片机原理与接口技术》课程设计题目: 数字温度计学院(系):年级专业:学号:学生姓名:指导教师:课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 基于51单片机的数字温度计的设计初始条件:1.运用所学的单片机原理与接口技术知识和数字电路知识;2.51单片机应用开发系统一套;3.PC机及相关应用软件;要求完成的主要任务:1.完成数字温度计的设计和调试。

2.要求用DS18B20测量室温,用四位八段数码管显示,并能设置显示精度.3.撰写课程设计说明书.4.课程设计说明书要求:引言、设计要求、系统结构、原理设计、各个模块的设计与实现、软件设计、调试过程、收获、体会及总结、参考文献、电路图和源程序。

说明书使用A4打印纸计算机打印或手写,用Protel等绘图软件绘制电子线路图纸。

时间安排:第1天下达课程设计任务书和日程安排,根据任务书查找资料;第2~3天完成方案论证,单片机系统的设计;第4~6天参考有关文献,完成程序的编写;第7~10天调试硬件系统和软件程序;第11~12天结果分析整理、撰写课程设计报告,验收和答辩.指导教师签名:2010 年6 月10 日系主任(或责任教师)签名:2010 年6 月10 日摘要··1一、引言··2二、总体方案设计与论证··31、方案一··32、方案二··4三、系统硬件选择··51、单片机的选择··52 89C51 引脚功能介绍:·63、温度传感器的选择··8四.硬件电路设计··101.温度检测电路··112.显示电路··12五、系统软件设计··131.概述··132.主程序流程图··133.C语言程序··14六、设计体会··20附录:参考文献··21摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。

(完整版)基于51单片机数字温度计毕业设计论文

(完整版)基于51单片机数字温度计毕业设计论文

课程设计题目:基于51单片机的数字温度计设计姓名:张鹏班级名称:采矿1109班学号:指导老师:曹金燕2015年设计任务书目录第1章概述 (1)1.1简述 (1)1.2任务描述 (1)1.3设计思路 (2)第2章系统主要元器件介绍 (2)2.1单片机的选用及功能介绍 (2)2.2DS18B20温度传感器介绍 (5)2.2.1引脚功能 (6)2.2.4 DS18B20的测温原理 (12)2.374LS244反相器简介 (14)第3章硬件电路的设计 (15)3.1接口设计 (15)3.2主板电路设计 (15)3.3其他电路设计 (16)第4章软件设计 (19)4.1主程序 (19)4.2读出温度子程序 (19)4.3温度转换命令子程序 (20)4.5显示数据刷新子程序 (21)4.6主要设计程序 (21)4.7调试 (23)第5章结束语 (24)参考文献 (25)致谢 (26)附录一 (27)摘要本文主要介绍了一种基于AT89S51单片机和DS18B20数字温度传感器来进行测温的方法。

具体设计时,作者对AT89S51和DS18B20进行了接口电路设计,同时利用74LS244进行段码驱动、实现数码管的显示输出;并在此基础上,通过软件设计实现温度的数据采集和传输。

由于DS18B20数字温度传感器是单总线器件,与AT89S51单片机组成一个测温系统,具有线路简单、体积小等特点,并且由于是在同一根通信线上,因此可以扩展、挂接很多这样的测温系统,十分方便。

关键词:数字温度计;AT89S51;DS18B20;74LS2第一章概述1.1 简述单片机在测控领域中具有十分广泛的应用,它既可以直接处理电信号,也可以间接处理温度、湿度、压力等非电信号。

由于该特点,因而被广泛应用于工业控制领域。

另一方面,由于单片机的接口信号是数字信号,因此使用它来进行温度、湿度、压力等这类非电信号的信息处理,必须使用对应的传感器进行AD或DA转换,最后再传输给单片机进行最终的数据处理和显示。

基于51单片机数字温度计的设计与实现

基于51单片机数字温度计的设计与实现

基于51单片机数字温度计的设计与实现数字温度计是一种能够测量环境温度并显示数值的设备。

基于51单片机的数字温度计设计与实现是指利用51单片机作为核心,结合温度传感器和其他辅助电路,实现一个能够测量温度并通过数码管显示温度数值的系统。

本文将从硬件设计和软件实现两个方面介绍基于51单片机数字温度计的具体设计与实现过程。

一、硬件设计1. 温度传感器选取在设计数字温度计时,首先需要选取合适的温度传感器。

市面上常用的温度传感器有热敏电阻、功率型温度传感器(如PT100)、数字温度传感器(如DS18B20)等。

根据设计需求和成本考虑,我们选择使用DS18B20数字温度传感器。

2. 电路设计基于51单片机的数字温度计的电路设计主要包括单片机与温度传感器的连接、数码管显示电路和电源电路。

(1)单片机与温度传感器的连接在电路中将51单片机与DS18B20数字温度传感器相连接,可采用一线总线的方式。

通过引脚的连接,实现单片机对温度传感器的读取控制。

(2)数码管显示电路为了能够显示温度数值,我们需要设计一个数码管显示电路。

根据温度传感器测得的温度值,通过数字转换和数码管驱动,将温度数值显示在数码管上。

(3)电源电路电源电路采用稳压电源设计,保证整个系统的稳定供电。

根据实际需求选择合适的电源电压,并添加滤波电容和稳压芯片,以稳定电源输出。

3. PCB设计根据电路设计的原理图,进行PCB设计。

根据电路元件的布局和连线的走向,绘制PCB板的线路、元件和连接之间。

二、软件实现1. 单片机的编程语言选择对于基于51单片机的数字温度计的软件实现,我们可以选择汇编语言或者C语言进行编程。

汇编语言的效率高,但编写难度大;C语言的可读性好,开发效率高。

根据实际情况,我们选择使用C语言进行编程。

2. 温度传感器数据获取利用单片机的IO口与温度传感器相连,通过一线总线协议进行数据的读取。

根据温度传感器的通信规则,编写相应的代码实现数据的读取。

基于51单片机数字体温计设计

基于51单片机数字体温计设计

基于STC89C52最小系统的数字体温计设计摘要现代信息技术的三大基础是信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技术)。

传感器属于信息技术的前沿尖端产品,尤其是温度传感器种类日益繁多,数字温度传感器更因适用于各种微处理器接口组成的自动温度控制系统具有可以克服模拟传感器与微处理器接口时需要信号调理电路和A/D转换器的弊端等优点,被广泛应用于工业控制、电子体温计、测温仪器等各种温度控制系统中。

智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。

它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。

它们内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。

有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。

智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU);并且它是在硬件的基础上通过软件来实现测试功能的,其智能化程度也取决于软件的开发水平。

对某些智能温度传感器而言,单片机还可通过相应的寄存器来设定其A/D转换速率(典型产品为MAX6654),分辨力及最大转换时间(典型产品为DS1624)。

随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,采用单片机控制已经成为了一种潮流。

本文将介绍一种基于STC89C52单片机控制的数字体温计,配合采用DS18B20为温度采集模块,HS1602液晶显示模块显示结果,另外用MAX232模块进行电压转换进行程序的烧写,实现对体温的采集与再现。

关键词:52单片机,DSI8B20,HS1602,体温计THE DIGITAL THERMOMETERS DESIGN BASED ON ST C89C52’S MINUIMUM SYSTEMABSTRACTModern information technology is based on the three information collection (ie, sensor technology), information transfer (ICT) and information processing (computer technology). Sensor belongs to the forefront of cutting-edge information technology products, especially the increasingly diverse types of temperature sensors, digital temperature sensor is more suitable for a variety of microprocessor interface for the composition of the automatic temperature control system can overcome the analog sensors and signal conditioning required for microprocessor interfacing circuit and A / D converter defects, etc., are widely used in industrial control, electronic thermometer, thermometer, etc. of various temperature control systems. Smart temperature sensor (also known as digital temperature sensor) in the mid-1990s, came out. It is the micro-electronics technology, computer technology and automated testing techniques (ATE) of the crystal. They contain the internal temperature sensor, A / D converter, signal processor, memory (or registers) and the interface circuit. Some products are also with the multiplexer, the central controller (CPU), random access memory (RAM) and read-only memory (ROM). Smart temperature sensor is characterized by the temperature data can be exported and the related amount of temperature control, fit a variety of microcontrollers (MCU); and it is based on the hardware to achieve through software testing capabilities, and its degree depends on intelligent in the software development level. Some smart temperature sensor, the controller can also register through the appropriate set of its A / D conversion rate (typical products MAX6654), the maximum resolution and conversion time (typical product DS1624). With the progress and development, microcontroller technology has spread to our lives, work, research in various fields, has become a relatively mature technology, using SCM hasbecome a trend. This article describes a microcontroller based control of digital thermometers STC89C52, with the use of DS18B20 the temperature acquisition module, HS1602 liquid crystal display module displays the results, another module with a MAX232 voltage conversion, to achieve the temperature of the acquisition and reproduction.Keywords: 52 microcontroller; DSI8B20; HS1602; thermometer目录1引言-------------------------------------------------------------- 1 2总体设计方案------------------------------------------------------ 32.1方案论证----------------------------------------------------- 32.1.1单片机系统--------------------------------------------- 32.1.2电源模块----------------------------------------------- 32.1.3温度传感器--------------------------------------------- 32.1.4显示模块----------------------------------------------- 42.1.5确定方案----------------------------------------------- 42.2总体设计----------------------------------------------------- 43 硬件设计---------------------------------------------------------- 53.1 单片机系统-------------------------------------------------- 53.1.1单片机最小系统----------------------------------------- 73.1.2 复位电路----------------------------------------------- 83.1.3 时钟振荡电路------------------------------------------- 83.1.4电源模块----------------------------------------------- 9 3.2温度传感器模块-------------------------------------------------- 93.2.1 DS18B20原理------------------------------------------- 93.2.2 DS18B20电路连接-------------------------------------- 133.3 液晶显示模块----------------------------------------------- 133.4串口通信模块------------------------------------------------ 15 4软件设计--------------------------------------------------------- 174.1 软件流程--------------------------------------------------- 174.2 DS18B20模块程序设计--------------------------------------- 184.2.1 程序流程------------------------------- 错误!未定义书签。

基于51单片机的数字温度计开发及应用

基于51单片机的数字温度计开发及应用

基于51单片机的数字温度计开发及应用数字温度计是一种利用数字技术来实现温度测量和显示的仪器。

它具有测量精度高、响应迅速、体积小、易于携带等优点,广泛应用于工业控制、生活中的温度测量和监控。

本文将介绍基于51单片机的数字温度计的开发及应用。

一、硬件设计1. 温度传感器选择:常见的温度传感器有热电偶、热敏电阻、半导体温度传感器等。

根据应用需求选择合适的温度传感器,如DS18B20数字温度传感器。

2. 电路设计:根据温度传感器的工作原理,设计合适的电路进行温度测量。

一种常用的电路是将温度传感器与单片机相连,通过单片机来读取传感器的温度数值。

电路设计要注意电源稳定性、信号放大和滤波等。

3. 显示器选择:可以选择液晶显示器、LED数码管等来显示温度数值。

液晶显示器可以显示更多信息,LED数码管则结构简单、适合简单的温度显示。

4. 控制器选择:选择一款合适的51单片机作为控制器,具有丰富的外设接口和较高的性价比。

如常用的STC89C52单片机。

二、软件开发1. 编程语言选择:使用C语言进行开发,具有相对较高的运行效率和开发效率。

2. 温度测量算法:根据温度传感器的特性和电路设计,编写测量算法来准确读取温度数值。

对于DS18B20传感器,可以参考其提供的通信协议进行编程。

3. 数据处理与显示:读取到温度数值后,通过算法和数据处理来获得最终的温度值。

将温度值显示在选定的显示器上,可以实现数字显示、小数点显示等功能。

4. 控制模块设计:可以根据需求设计控制模块,如报警功能、温度范围设定、温度记录等。

根据温度数值进行判断和控制,实现相应的控制逻辑。

三、应用场景1. 家庭温度监控:将数字温度计应用于家中,实时监测室内温度。

可以设置温度报警阈值,当温度超过设定值时发出警报提示。

2. 工业控制:在工业生产中,温度是一个重要的参数。

将数字温度计应用于控制系统中,实时监测生产环境的温度变化,保持生产过程的稳定性和安全性。

3. 温室农业:数字温度计可以应用于温室农业中,实时监测温室内外的温度差异,帮助农民掌握温室环境,并进行相应的调节和控制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

硬件课程设计实验报告课题:数字温度计班级:作者:学号:指导老师:课设评价:课设成绩:目录一.需求分析 (1)二.概要设计 (1)三.硬件电路设计 (3)四.系统软件设计 (5)五.软件仿真 (8)六.实际连接与调试 (9)七.本次课设的收获与感受 (11)附录(程序源代码) (12)一.需求分析功能要求:测量环境温度,采用接触式温度传感器测量,用数码管显示温度值。

设计要求:(一)功能要求(1) 由4位数码管显示当前温度。

(2) 具备报警,报警门限通过键盘设置。

(3) 精度为0.5℃。

(二)画出参考的电路原理图(三)画出主程序及子程序流程图、画出MCS51内部RAM分配图,并进行适当地解释。

(四)写出实现的程序及实现过程。

并进行适当地解释说明。

二.概要设计(一)方案选择由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

(二)系统框图该系统可分为以下七个模块:(1)控制器:采用单片机STC89C52对采集的温度数据进行处理;(2)温度采集:采用DS18B20直接向控制器传输12位二进制数据;(3)温度显示:采用了4个LED共阴极七段数码管显示实际温度值;(4)门限设置:主要实现模式切换及上下门限温度的调节;(5)报警装置:采用发光二极管进行报警,低于低门限或高于高门限均使其发光;(6)复位电路:对整个系统进行复位;(7)时钟振荡模块:为整个系统提供统一的时钟周期。

(三)重要器件及其相关参数(1)单片机STC89C52P0.0~P0.7:通用I/O引脚或数据低8位地址总线复用地址;P1.0~P1.7:通用I/O引脚;P2.0~P2.7:通用I/O引脚或高8位地址总线复用地址;P3.0~P3.7:通用I/O引脚或第二功能引脚(RxD、TxD、INT0、INT1、T0、T1、WR、RD);XTAL1、XTAL2:外接晶振输入端;RST/Vpd:复位信号输入引脚/备用电源输入引脚;Vcc:接+5V电源;Vss:地端。

(2)DS18B20(a)通过单线总线端口访问 DS1820 的协议如下:•初始化• ROM 操作命令•存储器操作命令•执行/数据DS1820 需要严格的协议以确保数据的完整性。

协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0 和读1。

所有这些信号,除存在脉冲外,都是由总线控制器发出的。

和 DS1820 间的任何通讯都需要以初始化序列开始,初始化序列见图11。

一个复位脉冲跟着一个存在脉冲表明DS1820 已经准备好发送和接收数据(适当的ROM 命令和存储器操作命令)(b)当总线上只有一个器件时,DS18B20读温度的流程为:复位发0CCH SKIP ROM命令发44H开始转换命令延时复位发0CCHSKIP ROM命令发0BEH读存储器命令连续读出两个字节数据(即温度)结束。

➢Convert T [44h]这条命令启动一次温度转换而无需其他数据。

温度转换命令被执行,而后DS1820 保持等待状态。

如果总线控制器在这条命令之后跟着发出读时间隙,而DS1820 又忙于做时间转换的话,DS1820 将在总线上输出“0”,若温度转换完成,则输出“1”。

如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。

➢Read Scratchpad [BEh]这个命令读取暂存器的内容。

读取将从字节0 开始,一直进行下去,直到第9(字节8,CRC)字节读完。

如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

(c)DS18b20 用12 位存贮温值度最高位为符号位,下图为18b20 的温度存储方式,负温度S=1 正温度S=0LSB:D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0三.硬件电路设计本次实验采用了老师提供的单片机系统,所以整体的硬件电路设计需要在已知的硬件条件下进行设计。

(一)下图为已有的单片机系统部分电路图分析:(1)由上图可知,时钟振荡电路,复位电路均以在原系统中正确连接。

(2)数字温度计所需的显示电路电路中,原系统将段码输出连在P2接口中,但由图可知,该图中的六个数码管中的小数点均无法点亮,原因在于图中并未对其进行连接,也无引脚供外界连接。

而六个数码管的位选端口连在P1接口上。

本次课程设计中,我们选择使用P1.0~P1.3上所连接的四个数码管。

(3)通过软件测试验证,原系统中的数码管为共阴极,且原系统中位选信号是通过一个反向器之后才输入数码管。

(4)原系统中P0端口未使用,所以可以用排线引出,连接我们所需要补充的电路,包括DS18B20总线输入电路、门限设置电路以及报警电路。

(二) 温度采集电路、门限设置电路及报警电路(其余电路省略)图中:(1)门限中的三个按键,分别为模式切换按键、加按键、减按键;(2)报警电路中,超过高门限或者低于低门限时发光二极管被点亮,其余时刻均熄灭;(3)DS18B20温度采集电路中,需要注意的是DQ上需要一个上拉电阻,一般为4.7KΩ左右。

四.系统软件设计(一)读取数据的流程图DSl8820的主要数据元件有:64位激光Lasered ROM,温度灵敏元件和非易失性温度告警触发器TH和TL。

DSBl820可以从单总线获取电源,当信号线为高电平时,将能量贮存在内部电容器中;当单信号线为低电平时,将该电源断开,直到信号线变为高电平重新接上寄生(电容)电源为止。

此外,还可外接5 V电源,给DSl8820供电。

DSl8820的供电方式灵活,利用外接电源还可增加系统的稳定性和可靠性。

下图读取数据流程图。

(二)温度数据处理程序的流程图读出温度数据后,temp的低四位为温度的小数部分,可以精确到0.0625℃,temp的中间8位为温度的整数部分,temp的高四位全部为1表示负数,全为0表示正数。

所以先将数据提取出来,分为三个部分:小数部分、整数部分和符号部分。

小数部分进行显示时要使用另外的查询表,与整数显示查询表有所不同。

因为本次课程设计只要求测试的温度范围为0~70℃,所以符号位S必为0,软件设计中则默认所测数据为正,从而不设符号位判定。

(三)模式切换流程图使用模式值st来标记不同模式,st=1时,表示在正常温度模式,st=2,表示在高门限模式,st=3表示在低门限模式,每次按下一次模式切换键,st+1,待其加至4时,将该值返回至1。

从而形成了模式键不断按下,三种模式循环切换的情况。

防抖在这里是十分关键的。

因为此处的按键是按下然后又返回为按了一次。

所以按下时,则进入程序,为了防止机械抖动等不确定情况,延时恰当的一段时间后再次检测是否确实按下。

若确实按下,则对模式进行切换。

切换后,延时等待按键返回高位,返回高位后,再次延时消除抖动,再次检验,确定按键返回高位后,退出程序。

五.软件仿真电路图连接:严格按照硬件设计中已有的单片机系统的连接方式和自己补充的电路的连接方式进行仿真,要最贴近实际电路,才能更准确的得到仿真结果。

系统电路图高门限下数码管显示低门限下数码管显示正常模式下数码管显六.实际连接与调试(一)仿真成功后,在实际操作中,电路图的连接应该严格按照仿真电路进行。

问题:在最开始实验中,我将DS18B20的DQ连接在P1.4,且仿真成功。

但是在实际连接中,我将DQ连接在了P0.4端口,但实际电路中无任何数据显示。

再次仿真,将DQ接至P0.4,仿真不成功。

后查阅P0、P1、P2以及P3口的内部结构后发现,除P0外另外三口均接有上拉电阻,而P0则无。

所以P0在作为通用I/O接口使用时,必须外接上拉电阻,其余端口则不需要。

所以,为方便起见,实际中,将DQ按照最初仿真设计,接至P1.4。

(二)原系统所拥有资料太少,数码管类型未知。

因只查阅到原系统的部分电路图,且无详细说明,所以为证明在网上搜索到的电路图的正确性以及确定数码管的类型。

先编写一个简单的数字显示程序。

最开始,我并没有意识到原系统中的片选信号接有反向器,在测试程序中,无论使用共阴还是共阳数字查询表,数码管均显示8888,后发现问题将所有片选数值取反,再次进行测试,确定数码管为共阴极。

同时,在测试过程中,发现原系统的小数点是无法点亮的。

(三)关于位选在最开始的测试数码管类型中,我只测试了一位数码管,使其显示数值1,但测试成功后,6位数码管均显示为1。

在测试过程中,我并未注意这个问题。

测试结束后,进行整体联调。

但数码管始终无正确显示。

当时,我首先着手于寻找软件程序中是否有错误。

所以人为将temp设定为一个固定值,先确定数据处理程序和数据显示程序无误。

然而数码管无法正常显示我预先设定的值,后经过反复改动,发现,在位选过程中,必须在选中一位数码管的过程中同时将其余所有的数码管关闭,否则将产生混乱。

若逐一设定S1=1;S2=0;S3=0;S4=0未免太过麻烦,所以设定一个数组,分别赋值0x08,0x04,0x02,0x01。

片选时按照规则将上值赋给,则一举多得。

(四)DQ数据采集上述问题均解决后,再次进行调试,数码管显示25592。

这个值非常特殊,且第5个数码管,在程序中所有地方均是将其熄灭的,为何此处会亮呢??显然采集的数据是有很大问题的,因为很明显2559中,9为小数部分,将2559换为二进制则为1111 1111 1111。

这就说明电路并没有采集到温度数据,原因一:DQ上接有上拉电阻,在输出正常温度数据外始终为高电平,所以此处很可能并没有采集到正常输出温度数据;原因二:室温不可能为25592。

但是当时,我并没有对器件是否损坏产生怀疑。

原因在于,大部分时候数码管显示的是12791,且两边的1很亮且基本无闪烁,279则在不断闪烁,频率很快,造成了27.9为数码管要显示的温度的错觉,且27.9是与当时实验室的温度非常接近的。

同时,在我不断的对程序中DS18B20的初始化时等部分的时序进行调整时,279的闪烁频率发生变化,两个1并无变化。

在经历了无法显示正常温度的挫败后,我仔细查阅了DS18B20的数据手册,确定了在其初始化过程中,DQ电平应该如何变化且应当延时多少。

同时也确定了DS8B20的在12位分辨率情况下数据A/D转换所需时间为500ms~750ms,所以在发出转换命令后需要给其充分的时间来进行A/D转换。

相关文档
最新文档