一.数字温度计的总体方案设计
根据系统设计的功能, 本时钟温度系统的设计必须采用单片机软件系统实现, 用单片机的自动控制能力来测量、 显示温度数值。
初步确定设计系统由单片机主控模块、 测温模块、 显示模块共3个模块组成, 电路系统框图如图1.1所示。
图1.1 系统基本方框图
对于单片机的选择, 如果用8051系列, 由于它没有内部RAM, 系统又需要一定的内存存储数据。ATS52是一个低功耗、 高性能CMOS 8位的单片机, 片内含8k Bytes ISP的可重复擦写1000次的Flash只读程序存储器, 兼容标准MCS-51指令系统及80C51引脚结构, 功能强大的ATS52可为许多嵌入式控制应用系统提供高性价比的解决方案。而ATS52与ATC51相比, 外型管脚完全相同, ATC51的HEX程序无须任何转换可直接在ATS52运行, 且ATS52比ATC51新增了一些功能, 相比较后, 在本设计中选用ATS52更能很好的实现温度计控制功能。
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
测温电路能够使用热敏电阻之类的器件, 利用其感温效应, 将被测温度变化的电压或电流采集过来, 进行A/D转换后, 就能够用单片机进行数据处理。可是这种感温电路比较复杂, 且采用热敏电阻精度低, 重复性、 可靠性都比较差。
如果采用温度传感器DS18B20能够减少外部硬件电路, 而且能够很容易直接读取被测温度值, 进而转换, 且成本低、 易使用, 能够很好的满足设计要求。因此本文采用传感器DS18B20代替传统的测温电路。
温度的显示能够采用LED数码管来显示, LED亮度高、 醒目, 可是电路复杂, 占用资源多且信息量小。而采用液晶显示器有明显的优点: 工作电流比LED小几个数量级, 功耗低; 尺寸小, 厚度约为LED的1/3; 字迹清晰、 美观、 使人舒服; 寿命长, 使用方便, 可得性强。故本设计采用LCD来显示温度。 二、 系统器件的具体选择 2.1单片机的选择
本次设计采用的是单片机ATC52。
ATC52是一个低电压, 高性能CMOS 8位单片机, 片内含8k bytes的可重复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器( RAM) , 器件采用ATMEL公司的高密度、 非易失性存储技术生产, 兼容标准MCS-51指令系统, 片内置通用8位处理器和Flash存储单元, ATC52单片机在电子行业中有着广泛的应用。
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
图2.1 PDIP封装的ATC52 引脚图 ATC52为8 位通用微处理器, 采用工业标准的C51内核, 在内部功能及管脚排布上与通用的8xc52 相同, 其主要用于会聚调整时的功能控制。
功能包括对会聚主IC 内部寄存器、 数据RAM及外部接口等功能部件的初始化, 会聚调整控制, 会聚测试图控制, 红外遥控信号IR的接收解码及与主板CPU通信等。
主要管脚有: XTAL1( 19 脚) 和XTAL2( 18 脚) 为振荡器输入输出端口, 外接12MHz 晶振。RST/Vpd( 9 脚) 为复位输入端口, 外接电阻电容组成的复位电路。VCC( 40 脚) 和VSS( 20 脚) 为供电端口, 分别接+5V电源的正负端。P0~P3 为可编程通用I/O 脚, 其功能用途由软件定义, 在本设计中, P0 端口( 32~39 脚) 被定义为N1 功能控制端口, 分别与N1的相应功能管脚相连接, 13 脚定义为IR输入端, 10 脚和11脚定义为I2C总线控制端口, 分别连接N1的SDAS( 18脚) 和
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
SCLS( 19脚) 端口, 12 脚、 27 脚及28 脚定义为握手信号功能端口, 连接主板CPU 的相应功能端, 用于当前制式的检测及会聚调整状态进入的控制功能。 2.2 温度传感器的选择
2.2.1 DS18B20的简单介绍
DS18B20温度传感器是一种改进型智能温度传感器, 与传统的热敏电阻等测温元件相比, 它能直接读出被测温度, 而且可根据实际要求经过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下:
①独特的单线接口仅需要一个端口引脚进行通信;
②多个DS18B20能够并联在惟一的三线上, 实现多点组网功能;
③无须外部器件;
④可经过数据线供电, 电压范围为3.0~5.5V; ⑤零待机功耗;
⑥温度以9或12位数字;
⑦负电压特性, 电极接反时, 温度计不会因发热而烧毁, 只是不能正常工作。
2.2.2 DS18B20的外形和内部结构
DS18B20内部结构主要由四部分组成: 位光刻ROM、 温度传感器、 非挥发的温度报警触发器TH和TL、 配置寄存器。
DS18B20的管脚排列、 各种封装形式如图 2.3 所示, DQ 为
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下, 也能够向器件提供电源; GND为地信号; VDD为可选择的VDD引脚。当工作于寄生电源时, 此引脚必须接地。
图2.2 外部封装形式 图2.3 DS18B20的电路
DS18B20采用3脚PR-35封装或8脚SOIC封装, 其内部结构框图如图2-4所示。
存储器与6 I/4 C 温度传高温触发低温触发器配置寄位 ROM Vdd 和高速缓8位CRC发生 图2-4 DS18B20内部结构
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
位ROM的结构开始8位是产品类型的编号, 接着是每个器件的惟一的序号, 共有48位, 最后8位是前面56位的CRC检验码, 这也是多个DS18B20能够采用一线进行通信的原因。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为9字节的存储器。头2个字节包含测得的温度信息, 第3和第4字节TH和TL的拷贝, 是易失的, 每次上电复位时被刷新。第5个字节, 为配置寄存器, 它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。低5位一直为1, TM是工作模式位, 用于设置DS18B20在工作模式还是在测试模式, DS18B20出厂时该位被设置为0, 用户要去改动, R1和R0决定温度转换的精度位数, 来设置分辨率。
2.2.3 DS18B20的测温原理
DS18B20的温度值的位数因分辨率不同而不同, 温度转换时的最大延时为750ms。 DS18B20测温原理如图2.5所示。图中低温度系数晶振的振荡频率受温度影响很小, 用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变, 所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数, 当计数器1的预置值减到0时, 温度寄存器的值将加1, 计数器1的预置将重新被装入, 计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数, 如此循环直到
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
计数器2计数到0时, 停止温度寄存器值的累加, 此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性, 其输出用于修正计数器1的预置值。
图2.5 DS18B20测温原理
2.2.4 DS18B2的外部电路图
根据设计要求, 传感器的硬件电路图如图2.6所示。
图2.6 DS18B20外部电路图
三.程序流程
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
图3.1 DS18B20温度计主程序流程图 图3.2 读出温度子程序流程图
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
图3.3计算温度子程序 图3.4显示数据刷新子程序流程图
四.Proteus仿真调试结果及分析
温度计电路设计原理图如图4.1所示,控制器使用单片机ATC2052,温度计传感器使用DS18B20,用液晶实现温度显示。
本温度计大致分三个工作过程。首先, 由DS18820温度传感器
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
芯片测量当前的温度, 并将结果送入单片机。然后, 经过C2052单片机芯片对送来的测量温度读数进行计算和转换, 井将此结果送入液晶显示模块。最后, SMC1602A芯片将送来的值显示于显示屏上。
由图4.1可看到, 本电路主要由DSl8820温度传感器芯片、 SMCl602A液晶显示模块芯片和C2052单片机芯片组成。其中, DSI8B20温度传感器芯片采用”一线制”与单片机相连, 它地完成温度测量以及将温度测量结果送到单片机的工作。
图3.1 温度计电路设计仿真图
五.硬件调试结果及分析
5.1软件调试
根据流程图编写程序软件。本次设计系统的调试以程序的调试为主。
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
程序的调试我们采用Keil C51.Keil C51 软件是众多单片机应用开发的优秀软件之一, 它集编辑, 编译, 仿真于一体, 支持汇编,PLM 语言和 C 语言的程序设计, 界面友好, 易学易用。
5.2系统调试
软硬件分别调试完成以后, 将程序下载入单片机中, 电路板接上电源, 按刷新按钮LCD显示当前温度。用手去碰触温度传感器, 按刷新按钮, 温度显示值出现变化, 显示当前手的温度值。
完成了我们预期的要求。
六.设计感受与看法
本次综合实训是针对MCS-51系列的单片机芯片STCC52来设计一个数字温度计, 该设计充分利用了温度传感器DS18B20功能强大的优点, 如DS18B20能够直接读出被测温度值, 进行转换; 而且采用三线制与单片机相连, 减少了外部的硬件电路, 具有低成本和易使用的特点, 大大简化了硬件电路, 也使得该数字温度计不但具有结构简单、 成本低廉、 精确度较高、 反应速度较快、 数字化显示和不易损坏等特点, 而且性能稳定, 适用范围广, 因此特别适用于对测温要求比较准确的场所。
在这次设计中, 熟悉了制作一个产品的总体流程, 能熟练使用一些必要的设计工具和仿真工具等。经过选认元件, 连线, 调试检测等过程, 锻炼自己的理论联系实际的能力和实际操作能力, 从而综合性地巩固所学的知识, 为将来的工作做一次实战演习。
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
经过将近2周的综合实训, 终于完成了我的数字温度计的设计, 虽然没有完全达到设计要求, 但从心底里说, 还是高兴的,
从这次的课程设计中, 我真真正正的意识到, 在以后的学习中, 要理论联系实际, 把我们所学的理论知识用到实际当中, 学习单机片机更是如此, 程序只有在经常的写与读的过程中才能提高, 这就是我在这次实训中的最大收获。
七.附件一: 元器件清单
STCC51 1个 温度传感器DS18B20 1个 插针 1排 LCD1602 1个 40脚插座 1个 12MHZ晶振 1个 电容 30PF 2个 22UF 1个 电阻 10K 2个 4.7K 1个
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
附件二: 源程序 #include #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^0; sbit RW=P3^1; sbit EN=P3^2; unsigned char code str1[]={\"temperature: \ unsigned char code str2[]={\" \ uchar data disdata[5]; uint tvalue;//温度值 uchar tflag;//温度正负标志 /*************************lcd1602**************************/ void delay1ms(unsigned int ms)//延时1毫秒( 不够精确的) {unsigned int i,j; for(i=0;i 程 序 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 { delay1ms(1); RS=0; RW=0; EN=0; P2=com; delay1ms(1); EN=1; delay1ms(1); EN=0; } void wr_dat(unsigned char dat)//写数据// { delay1ms(1);; RS=1; RW=0; EN=0; P2=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; } void lcd_init()//初始化设置// 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 {delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } void display(unsigned char *p)//显示// { while(*p!='\\0') { wr_dat(*p); p++; delay1ms(1); } } init_play()//初始化显示 { lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 } /*****************ds1820 *********************************/ void delay_18B20(unsigned int i)//延时1微秒 { while(i--); } void ds1820rst()/*ds1820复位*/ { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低 delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); } 程序 uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1; 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } void ds1820wr(uchar wdata)/*写数据*/ {unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ {uchar a,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍, 精确到1位小数 return(tvalue); } /*******************************************************************/ void ds1820disp()//温度值显示 { uchar flagdat; disdata[0]=tvalue/1000+0x30;//百位数 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号:- if(disdata[0]==0x30) {disdata[0]=0x20;//如果百位为0, 不显示 if(disdata[1]==0x30) {disdata[1]=0x20;//如果百位为0, 十位为0也不显示 } } wr_com(0xc0); wr_dat(flagdat);//显示符号位 wr_com(0xc1); wr_dat(disdata[0]);//显示百位 wr_com(0xc2); wr_dat(disdata[1]);//显示十位 wr_com(0xc3); wr_dat(disdata[2]);//显示个位 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 wr_com(0xc4); wr_dat(0x2e);//显示小数点 wr_com(0xc5); wr_dat(disdata[3]);//显示小数位 } /******************** 主 ***********************************/void main() { init_play();//初始化显示 while(1) {read_temp();//读取温度 ds1820disp();//显示 } } 九.附录三: 实物图及使用说明 说明: 按键刷新温度 程 序 资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务