1、数字显示温度计 目 录1 系统简介 211 系统整体功能说明 212 方案论证 213 基本设计任务 214 发挥设计任务 215电路特点 32 电路设计 32.1 总体方框图 33 各主要电路及部件工作原理 33.1 数字显示电路 33.2 计数器实现电压步进增减 43.3 D/A转化电路设计 53.4 调整输出部分 74 原理总图 95 元器件清单 96 调试过程及测试数据 106.1 通电前检查 106.2 通电检查 106.2.1按钮开关的检查 106.2.2 数字显示单元电路的调试 106.2.3 计数器的调试 106.2.4二极管、发光二极管及三极管的调试 106.3 结果分析 1
2、17 系统使用说明 118 设计体会及今后的改进意见 118.1 体会 118.2 本方案特点及存在的问题 128.3 改进意见 12参考文献 13 1系统简介温度测量在生产和生活中的作用是显而易见的。如在一些生产现场,需要实时测量和监控温度;一些石化企业中,根据不同的温度可以分离出汽油、柴油、煤油等产品;日常生活中,需要根据气温加减衣物,如此等等。为了实现简单方便且实用的目的,本设计采用了最常用的温度传感器DS18B20作为温度采集工具,发光二极管来模拟声光报警器,同时用蜂鸣器报警。软件是采用C语言编程。11系统整体功能说明本系统由单片机最小系统作为主控电路,STC89C52芯片作为主控芯片
3、,电路分为MCU单元,数码显示单元,串行口电路,报警电路等等。系统中,单片机控制两个DS18B20分别采集两点的温度,并送往数码管分时轮流显示,两个显示时间间隔为两秒(间隔时间可做调整),在此过程中,若有某个DS18B20测得温度超出设定的安全温度,则会立即锁定显示这个DS18B20的温度值,同时这个DS18B20指向的发光二极管亮(模拟声光报警器),直到温度正常。这样设计的目的在于,即使在人到不了的地方,也可以实时监控多点温度,用声音和光同时发出提示信号,且通过不同测量点对应相应的发光二极管来让工作人员知道哪个测量点温度超出既定的温度限。另外该系统亦适用于其它用于测量和监控温度的场合。12
4、方案论证方案一:设计一个测温电路,包括温度传感器,温度变送器,A/D转换电路。具体流程为温度传感器测量温度信号,经过温度变送器变换为电流信号,再通过A/D转换器转换为数字信号进入单片机进行处理,再在数码管上显示。 采用热电偶温差电路测温,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成(热电偶的构成如图 2.1),热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。数据采集部分则使用带有A/D 通道的单片机,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处
5、理,在显示电路上,就可以将被测温度显示出来。热电偶的优点是工作温度范围非常宽,且体积小,但是它们也存在着输出电压小、容易遭受来自导线环路的噪声影响以及漂移较高的缺点,并且这种设计需要用到A/D 转换电路,感温电路比较麻烦。图 2.1热电偶电路图方案二:温度测量上使用集成芯片DS18B20,由于DS18B20内部已实现模数转换,可实现温度测量并输出数字信号,由单片机接收。该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。同时该方案具有很强的扩展性,可以方便地实现多点测量,已得到准确和科学的实验结果。综上所述
6、,决定采用方案二进行课程设计。 13 基本设计任务系统硬件设计:根据任务要求,完成单片机系统设计;系统软件设计:根据温度测量及显示功能要求,完成程序编写及调试;系统功能要求:至少利用3位数码管进行测量值的显示;温度测量范围:-50100;测量误差0.5; 14 发挥设计任务根据实际情况自由添加附加功能,如设置温度的上下限报警功能,利用语音或声光报警、多点温度测量等。15电路特点由单片机最小系统作为主控电路,STC89C52芯片作为主控芯片,电路分为MCU单元,数码显示单元,串行口电路,键盘电路,报警电路,EEPROM电路,DS18B20以及电源电路。2 电路设计2.1 总体方框图图2-1 总体
7、方框图 3 各主要电路及部件工作原理3.1 单片机主控电路图3-1 单片机主控电路图3-1-1 SST89E51各引脚SST89E51各引脚功能:BI:4脚是消隐控制端,当BI=0时,不管其他输出状态是怎么样的,七段数码管都会处于消隐也就是不显示的状态。LE:锁存控制端,当LE=0时,允许译码输出。LE=1时译码器是锁存保持状态,译码器输出被保持在LE=0时的数值。LT:3脚是测试信号的输入端,当BI=1,LT=0时,译码输出全为1,不管输入DCBA状态如何,七段均发亮全部显示。它主要用来检测数7段数码管是否有物理损坏。A1,A2,A3,A4为8421BCD码输入端。a、b、c、d、e、f、g
8、:为译码输出端,输出为高电平1有效。由各个脚的功能便可设计出数码显示电路3.2数码显示单元电路 图3-2 数码显示单元电路P1口控制四个数码管的段选,P0.0,P0.1,P0.2,P0.3控制四个数码管的位选,采用数码管动态扫描:动态扫描就是每个数码管逐个的点亮,再熄灭。循环进行该过程。一次扫描的周期够短,人眼看起来就像是同时亮起来的。例如想显示123这个数字:1,让第一个数码管显示1,其它的熄灭2,数码管全灭3,让第二个数码管显示2,其它的熄灭4,数码管全灭 5,让第三个数码管显示3,其它的熄灭6,数码管全灭最后,让这六个步骤循环进行,快速的扫描。3.3 电源电路图3-3 电源电路图3-3-
9、1 max232各引脚Max232各引脚功能:1 载波检测 DCD2 接收数据 RXD3 发送数据 TXD4 数据终端准备好 DTR5 信号地 SG6 数据准备好 DSR7 请求发送 RTS8 清除发送 CTS9 振铃提示 RI3.4 报警电路单片机的P0.4口控制蜂鸣器,程序控制P0.4为底时,三极管PN结导通,蜂鸣器响;P0.4为高时,三极管PN结截止,蜂鸣器不再响。图3-5 报警电3.6 EEPROM电路图3-6 EEPROM电路3.7 温度采集电路图3-7 温度采集电路DS18B20简介:编程流程为:初始化 ROM操作命令 存储器操作命令 执行/数据1, 主要特点1.1、适应电压范围更
10、宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电1.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯1.3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温1.4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内1.5、温范围55125,在-10+85时精度为0.51.6、可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温1.7、在9位分辨率时最多在93.75ms内把温度转
11、换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快1.8、测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 2、DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。2、DS18B20的外形及管脚排列如下图1:3、DS18B20引脚定义: (1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
12、4、DS18B20工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其 振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信 号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行 计数,如此循环直到计数器2计数到0时,
13、停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图3中的斜率累加器用于补偿和修正测温过程中的非 线性,其输出用于修正计数器1的预置值。4 原理总图图4-1-1 多功能数字温度计工作原理图图4-1-2 多功能数字温度计PCB图5 源程序(所有程序经调试) /=/文件名称: DS18B20/功能说明: 第一,二个DS18B20测试温度数据并通过LED轮流显示,如有某个超出安 /温度范围,则锁定显示且报警,同时,用这个被锁定的温度传感器所指向的发光二极管,/模拟声光报警器点亮。DS18B20子程序采用的是12位的转换,获得了11位精度的/温度数据,显示正负温度。但是在显示中,由于LED位
14、数的限制,考虑数据的有效性,/取了四位温度数据 /硬件描述:/资源说明: 11.0592M晶体/创建日期: 2012-03-03/软件版本: v 1.0 /=#include #define uchar unsigned char#define uint unsigned int/=变量定义=extern uchar data LedDispBuff;extern uchar data IntgerM;extern uchar data IntgerL;extern uchar data DecimalH;extern uchar data DecimalMH;extern uchar dat
15、a IntgerM02;extern uchar data IntgerL02;extern uchar data DecimalH02;extern uchar data DecimalMH02;extern uchar data m;extern uchar data n;extern bit bdata flag; /=调用函数=void MnLed(void);void MnDS18B20(void);void MnDS18B2002(void);void MnApp(void);void MnApp02(void);/=/函 数 名: main()/功能描述: LED动态扫描主循环/
16、输入参数: 无/输出参数: 无/设 计 者:/创建日期:/=void main(void) while(1) n=10; m=10; while(n-) MnLed(); MnDS18B20(); MnApp(); while(m-) MnLed(); MnDS18B2002(); MnApp02(); /=/函 数 名: MnApp()/功能描述: LED数码管显示内容修改函数/输入参数: i,j,m,n/输出参数: 无/设 计 者:/创建日期:/=void MnApp(void) LedDispBuff0=IntgerM; LedDispBuff1=IntgerL; LedDispBuff
17、2=DecimalH; LedDispBuff3=DecimalMH;void MnApp02(void) LedDispBuff0=IntgerM02; LedDispBuff1=IntgerL02; LedDispBuff2=DecimalH02; LedDispBuff3=DecimalMH02; /=/文件名称:(FILE7)第一个DS18B20驱动文件/功能说明: 读出温度数据,并转换为BCD码。/ 本驱动只针对单总线上挂一只DS18B20的情况。/硬件描述: 数据口P34,上拉4.7K电阻,未采用寄生电源供电/使用晶体: 11.0592M晶体/创建日期: 2012-03-03/软件
18、版本: v 1.0 /=#include #include #define uchar unsigned char #define uint unsigned int /=常量=#define SkipROM 0xcc /跳过ROM指令 #define TempCvt 0x44 /温度转化命令#define ReadTemp 0xbe /读温度命令sbit DQ18B2002 = P27; /数据口/=变量=uint data TempReg02; /温度值bit bdata NPflag02; /正负标志 uchar data IntgerH02; /BCD码表示uchar data Int
19、gerM02;uchar data IntgerL02;uchar data DecimalH02;uchar data DecimalMH02;uchar data DecimalML02;uchar data DecimalL02;extern bit bdata flag; /小数部分转换表uint code TempTab02 = 0x0000,0x0625,0x1250,0x1875, 0x2500,0x3125,0x3750,0x4375, 0x5000,0x5625,0x6250,0x6875, 0x7500,0x8125,0x8750,0x9375 ;/=/函 数 名: _nN
20、OP_()/功能描述: 短延时函数/输入参数: i/输出参数: 无/设 计 者:/创建日期:2012-03-03/=/=/函 数 名: _nNOP_()/功能描述: 短延时函数/输入参数: i/输出参数: 无/设 计 者:/创建日期:2012-03-03/=void _nNO_ (uint i) for(;i0;i-) _nop_(); /=/函 数 名: Init18B20()/功能描述: 18B20初始化函数/输入参数: 无/输出参数: Init18B20()/设 计 者:/创建日期:2012-03-03/=bit Init18B2002(void) DQ18B2002 = 0; /数据线
21、拉低 _nNO_(500); /延时480us DQ18B2002 = 1; /数据线拉高 _nNO_(7); /延时25us if(DQ18B2002=1) DQ18B2002 = 1; /数据线拉高 return(0); /初始化失败返回0 else _nNO_(240); /延时240us DQ18B2002 = 1; /数据线拉高 return(1); /初始化成功返回1 /=/函 数 名: Write18B20()/功能描述: 18B20写数据函数/输入参数: Data/输出参数: 无/设 计 者:/创建日期:2012-03-03/= void Write18B2002(uchar
22、Data) uchar data i; for (i=8; i0; i-) DQ18B2002 = 0; DQ18B2002 = Data&0x01; _nNO_(10); DQ18B2002 = 1; Data=1; /=/函 数 名: Read18B20()/功能描述: 读18B20两字节数据函数/输入参数: 无/输出参数: TempReg/设 计 者:/创建日期:2012-03-03/=uchar Read18B2002(void) uchar data i=0; uchar data Data = 0; for (i=8;i0;i-) DQ18B2002 = 0; /给脉冲信号 Dat
23、a=1; DQ18B2002 = 1; /给脉冲信号 if(DQ18B2002) Data|=0x80; _nNO_(10); return(Data);/=/函 数 名: GetTemp()/功能描述: 得到温度数据函数/输入参数: 无/输出参数: /设 计 者:/创建日期:2012-03-03/=void GetTemp02(void) uchar data TempL02,TempH02; if(Init18B2002()=0); /初始化不成功则继续初始化 Write18B2002( SkipROM ); /发出跳过ROM指令 Write18B2002( TempCvt ); /发出温
24、度转化命令 _nNO_(800); /延时800us if(Init18B2002()=0); /初始化不成功则继续初始化 Write18B2002( SkipROM ); /发出跳过ROM指令 Write18B2002( ReadTemp); /发出读温度命令 TempL02 = Read18B2002(); /调用读程序,读出两字节 TempH02 = Read18B2002(); TempReg02 = TempH02; TempReg02 = TempReg028; TempReg02 = TempReg02|TempL02; if(TempReg02&0x800)!=0x800) NPflag02 = 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1