1、摘要:本设计单片机采用STC89C52芯片,数字温度传感器采用单总线器件DS18B20,与单片机组成一个测温系统,当系统上电时,温度传感器就会读出当前环境的温度,并在八位LED数模显示管上显示出当前的温度,该测温仪的测温范围为099,按此要求设计硬件和软件以实现这一功能。温度超出200-300摄氏度这个范围时候,报警器报警。 关键词:单片机STC89C52 温度传感器DS18B20 汇编语言 温度目录1 引言:32 总体设计方案:32.1 设计思路:32.2设计主元件电气性能:42.2.1 电源42.2.2 STC89C52的主要性能:42.2.3 DS18B20的主要性能82.2.4 74H
2、C573的主要性能102.2.5 蜂鸣器123 系统整体硬件电路124 设计原理分析:144.1 时钟电路的设计:144.2 控制电路的设计:154.3 计算温度子程序165 程序:17结束语:25参考文献:26谢辞27附录:实物图281 引言: 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。单片机渗透到我们生活的各个领域,在检测和控制系统中得到广泛的应用, 温度则是系统常需要测量、控制和保持的一个量。本设计具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片
3、机STC89C52,测温传感器使用DS18B20,用4位共阴极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。2 总体设计方案:2.1 设计思路:(1)本设计是测温电路,使用热敏电阻之类的器件利用其感温效应,将随被测温度变化的电压或电流采集,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。(2)从中考虑到用温度传感器,采用一只温度传感器DS18B20,很容易直接读取被测温度值,进行转换,就可以满足设计要求。采用方案(2),电路比较简单,软件设计也比较简单,故采用了方案(2)。 根据设计的所需
4、要求分析单片机的工作原理,可得出来温度计电路设计总体设计方框图如图1所示,控制器采用单片机STC89S52,温度传感器采用DS18B20,用4位LED数码管、蜂鸣器以串口传送数据实现温度显示。2.2设计主元件电气性能:2.2.1 电源 直接由外接USB接口提供5V直流电源。2.2.2 STC89C52的主要性能:1.主要性能特点 与MCS-51单片机产品兼容、8KFlash字节闪速存储器、1000次擦写周期、全静态操作:0Hz88Hz、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针。2.引脚
5、排列图2 引脚排列3.89C52单片机接口资源 VCC : 电源 GND: 地 P0 口:8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1 口: 具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部
6、拉低的引脚由于内部电阻,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表1所示。在flash编程和校验时,P1口接收低8位地址字节。 P2 口:具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在
7、这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 表1 P1口功能 表2 P3口功能 P3 口:具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如上表2所示。在flash编程和校验时,P3口也接收一些控制信号。 R
8、ST: 复位输入。 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。 PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当S
9、TC89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。 EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。4.存储器结构 程序存储器:如果EA引脚接地,程序读取只从外部存储器开始。对于89S52,如果EA 接VCC,程序读写先从内部存储器(地址为0000H1FFFH)开始
10、,接着从外部寻址,寻址地址为:2000HFFFFH。 数据存储器:STC89C52 有256 字节片内数据存储器。高128 字节与特殊功能寄存器重叠。5.晶振特性 如图2所示,STC89C52 单片机有一个用于构成内部振荡器的反相放大器,XTAL1 和XTAL2 分别是放大器的输入、输出端。石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器图3 自激振荡器原理图6.89C52单片机中断系统 89C52提供具有2个优先级的8个中断源。中断源,中断向量与中断优先级INTO-外部中断0请求。低电平有效。通过P32引脚输入。INT1-外部中断1请求。低电平有效。通过P33引脚输入。T0- 定时器计数器0
11、溢出中断请求。T1- 定时器计数器1溢出中断请求。T2- 定时器计数器2溢出中断请求。2.2.3 DS18B20的主要性能 本次设计使用到了由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小、接口方便、高性能、抗干扰能力强、易配微处理器,可直接将温度转化成串行数字信号供处理器处理。 特性:l 适应电压范围宽3.05.5V ,在寄生电源方式下可由数据线供电;l 独特的单线接口方式,它与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信
12、;l 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;l 温度可测范围-55+125;l 可编程分辨率为912位,对应的可分辨温度为:0.5、0.25、0.125和0.0625;l 测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。引脚定义电源负极信号输入输出电源正极 图4 引脚定义图工作原理: 33H-读ROM。读DS18B20温度传感器ROM中的编码(即64位地址)。 55H-匹配ROM。发出此指令后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20并使之做出响应,为下一步
13、为其的读写做准备。 F0H-搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,为操作各器件做好准备。 CCH-跳过ROM。忽略64位ROM地址,直接向18B20发温度变换命令,适用于一个从机工作。 ECH-告警搜索命令。执行后温度超过设定值上下限的芯片才做出响应。表4 64位光刻ROM各位定义如果主机只对一个DS18B20进行操作,不需读取以及匹配ROM编码,用跳过ROM(CCH)命令,就可进行如下温度转换和读取操作。 44H-温度转换。启动DS18B20进行温度转换,结果存入内部9字节RAM。 BEH-读暂存器。读内部RAM中9字节的温度数据。 4EH-写暂存器
14、。发出向内部RAM的第2、3字节写上下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 48H-复制暂存器。将RAM中的第2、3字节的内容复制到E2PROM中。 B8H-重调E2PROM中的内容恢复到RAM的第3、4字节。 B4H-读供电方式。寄生供电时,DS18B20发送0,外接电源供电时,DS18B20发送1.表5 高速暂存RAM 高速暂存RAM由9个字节的存储器组成,第01个字节是温度的显示位,第二和第三个字节是复制的TH和TL,同时这两个字节的数字可以更新,第4个字节是配置寄存器,数字也可以更新,第5、6、7三个字节是保留的。 DS18B20中的温度传感器可完成对温度的测量,以12
15、位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,S为符号位。 表6 DS18B2012位温度数据 存储在18B20的两个8比特的RAM中,二进制中前5位是符号位,若测得的温度大于0,这5位为0,将测到的数值乘于0.0625即可得到实际温度;若温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。如下表为18B20的温度/数据关系 表7 DS18B20的温度/数据关系图5温度传感器原理图2.2.4 74HC573的主要性能74HC573有20个脚,是一个8数据锁存器。主要用于数码管、按键等的控制。 图6每个脚的作用如下:2, 3,
16、 4, 5, 6, 7, 8, 9脚是数据的输入脚(从D0到D7),11脚作用为:连接这个脚此IC为高电压激活,连接1脚为低电压激此芯片,19, 18, 17, 16, 15, 14, 13, 12这几个脚是数据的输出脚,10是接地,20是电源。图7 LE为锁存控制端;OE为使能端。图8 74HC573与数码管原理图2.2.5 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机等电子产品中,用作发声器件。本设计中采用的是电磁式蜂鸣器,由振荡器、电磁线圈、磁铁、振动膜片及外壳组成。接通电源后,振荡器产生的音频电流
17、信号通过电磁线圈使其产生磁场。震动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。3 系统整体硬件电路 系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主板电路等,通过利用电路画图工具pretel DXP可画出如图4 所示的电路图。图9 主芯片电路原理图因为此次制作的电路为自制的PCB板,再经过电路CAD工具Protel DXP的电路板PCB绘出电路所需PCB版图制作出自制的PCB板.图10 主芯片PCB图4 设计原理分析:4.1 时钟电路的设计: 通过设置T2CON中的TCLK或RCLK可选择定时器2 作为波特率发生器。如果定时器2作为发送或接收波特率发生器,定时器1可用作
18、它用,发送和接收的波特率可以不同。设置RCLK 和(或)TCLK 可以使定时器2 工作于波特率产生模式。波特率产生工作模式与自动重载模式相似,因此,TH2 的翻转使得定时器2 寄存器重载被软件预置16位值的RCAP2H和RCAP2L中的值。模式1和模式3的波特率由定时器2溢出速率决定,定时器可设置成定时器,也可为计数器。在多数应用情况下,一般配置成定时方式(CP/T2=0)。定时器2 用于定时器操作与波特率发生器有所不同,它在每一机器周期(1/12晶振周期)都会增加;然而,作为波特率发生器,它在每一机器状态(1/2晶振周期)都会增加。4.2 控制电路的设计: 主程序的主要功能是负责温度的实时显
19、示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图5所示。 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。4.3 计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图8所示。5 程序:#includereg52.h#includestdio.h#define uchar unsigned char#define uint unsigned intsbit ds=P22;sbit dula=P26;sbit w
20、ela=P27;sbit beep=P23;uint temp;float f_temp;uint warn_l1=200;uint warn_h1=300;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef;void delay(uint z) uchar x,y; for(x=z;x0;x-) for(y=110;y0;y-);void dsreset(void) uint i; ds=0; i
21、=103; while(i0)i-; ds=1; i=4; while(i0)i-; bit tempreadbit(void) uint i; bit dat; ds=0;i+; ds=1;i+;i+; dat=ds; i=8;while(i0)i-; return(dat);uchar tempread(void) uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1);return(dat);void tempwritebyte(uchar dat) uint i; uchar j; bit testb; for(j
22、=1;j1; if(testb) ds=0; i+;i+; ds=1; i=8;while(i0)i-; else ds=0; i=8;while(i0)i-; ds=1; i+;i+; void tempchange(void) dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0x44);uint get_temp() uchar a,b; float f_temp; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); b=te
23、mpread(); temp=b; temp=8; temp=temp|a; f_temp=temp*0.0625; temp=f_temp*10+0.5; f_temp=f_temp+0.05; return temp;void display(uchar num,uchar dat) uchar i; wela=0; i=0xff; i=i&(0x01)warn_h1)|(t0;i-) dis_temp(get_temp(); deal(temp); sprintf(buff,%f,f_temp); for(i=10;i0;i-) dis_temp(get_temp(); 程序结束结束语:
24、此次的课程设计是一个综合性的课程设计,通过设计考查了我们对单片机课程的认识和学习程度,从中认识到自己学习中的不足,总结自己的学习中的缺陷,从而改进以后的学习方法。而本次的课程实际摆脱了只是学习书本知识却脱离了实际的实践的缺陷,使我们能实际操作结合书本知识,理论结合实践,更能加强我们的实践能力。在设计过程中,学生能充分发挥主观能动性,提高分析问题和解决问题的能力。再次感谢这次指导我的老师和帮助我完成设计的同学们。参考文献:1郭天祥 .新概念51单片机C语言教程 电子工业出版社,20102 雷思效,冯育长.单片机系统设计及工程应用.西安:西安电子科技大学出版社,20053 唐俊翟 .单片机原理与应
25、用 北京:治金工业出版社,20034 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编(19941999)M.北京:北京理工大学出版社,1997.5 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编(2001)M.北京:北京理工大学出版社,2003.6 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编(2003)M.北京:北京理工大学出版社,2005.7 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编(2005)M.北京:北京理工大学出版社,2007.谢辞 本设计是在左望霞导师教授的悉心指导下完成的,导师渊博的知识,严谨的治学态度,一丝不苟的工作作风,平易近人的性格都是我学习的楷模。在论文的研究及整理期间,导师给了我很大的支持和鼓励,才使得论文得以顺利的完成,在此谨向导师表示忠心的感谢和崇高的敬意。同时感谢实验室的等老师,他们给我们提供了必要的实验器材,提供了很大的方便,感谢同实验室的同学,在作论文期间,他们不仅在学习上对我有很大的帮助,还在生活上提供方便。这四个月,我和他们相处的是非常愉快的。由于本人知识有限,不足之处在所难免,还请各位评委指正。附录:实物图第 27 页