1、目录第一章 摘要2第二章 引言2第三章 DS18B20温度传感器相关介绍33.1 DS18B20特点33.2 DS18B20工作过程立即序3 3.3 DS18B20结构图5第四章 LED数码管介绍8第五章 硬件设计 10 5.1温度采集模块11 5.2温度显示模块11第六章 软件设计12 6.1读18B20ROM系列号程序.126.2温度转换和读取程序176.3温度在数码管显示程序23第七章 心得体会26 参考资料27第一章 摘要此次课程设经过基于MCS-51系列单片机SST80C51和DS18B20温度传感器检测温度,熟悉芯片使用,温度传感器功效,LED数码管使用,汇编语言设计;而且把我们这
2、十二个月所学数字和模拟电子技术、检测技来掌握相关知识。第二章 引言在人类生活环境中,温度饰演着极其关键角色。不管你生活在哪里,从事什么工作,无时无刻不在和温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝正确联络。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,能够说几乎80%工业部门全部不得不考虑着温度原因。温度对于工业如此关键,由此推进了温度传感器发展。进入二十一世纪后,温度传感器正朝着高精度、多功效、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技方向快速发展。在工农业生产中,温度检测及其控制占有举足轻重地位,伴随现代信息技术飞速发展和传
3、统工业改造逐步实现 ,能够独立工作温度检测和显示系统已经应用于很多领域。要达成较高测量精度需要很好处理引线误差赔偿问题、多点测量切换误差问题和放大电路零点漂移误差等问题,使温度检测复杂化。单片机以其功效强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用器件,尤其在日常生活中也发挥越来越大作用。采取单片机对温度采集进行控制,不仅含有控制方便、组态简单和灵活性大等优点,而且能够大幅度提升被控数据技术指标,从而能够大大提升产品质量和数量。第三章 DS18B20温度传感器相关介绍3.1 DS18B20特点:(1)独特单线接口方法:DS18B20和微处理器连接时
4、仅需要一条口线即可实现微处理器和DS18B20双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0 +5.5 V。(4)测温范围:-55 - +125 。固有测温分辨率为0.5 。(5)经过编程可实现9-12位数字读数方法。(6)用户可自设定非易失性报警上下限值。(7)支持多点组网功效,多个DS18B20能够并联在惟一三线上,实现多点测温.(8)负压特征,电源极性接反时,温度计不会因发烧而烧毁,但不能正常工作。3.2 DS18B20工作过程立即序DS18B20内部低温度系数振荡器是一个振荡频率随温度改变很小振荡器,为计数器1提供一频率稳定计数脉冲。高温度系数振荡
5、器是一个振荡频率对温度很敏感振荡器,为计数器2提供一个频率随温度改变计数脉冲。初始时,计数器1预置是和-55相对应一个预置值。以后计数器1每一个循环预置数全部由斜率累加器提供。为了赔偿振荡器温度特征非线性性,斜率累加器提供预置数也随温度对应改变。计数器1预置数也就是在给定温度处使温度寄存器寄存值增加1计数器所需要计数个数。DS18B20内部比较器以四舍五入量化方法确定温度寄存器最低有效位。在计数器2停止计数后,比较器将计数器1中计数剩下值转换为温度值后和0.25进行比较,若低于0.25,温度寄存器最低位就置0;若高于0.25,最低位就置1;若高于0.75时,温度寄存器最低位就进位然后置0。这么
6、,经过比较后所得温度寄存器值就是最终读取温度值了,其最终位代表0.5,四舍五入最大量化误差为1/2LSB,即0.25。温度寄存器中温度值以9位数据格式表示,最高位为符号位,其它8位以二进制补码形式表示温度值。测温结束时,这9位数据转存到暂存存放器前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。DS18B20测量温度时使用特有温度测量技术。DS18B20内部低温度系数振荡器能产生稳定频率信号;一样,高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率非线性度加以赔偿。测量结果存入温度
7、寄存器中。通常情况下温度值应该为9位,但因符号位扩展成高8位,所以最终以16位补码形式读出。DS18B20工作过程通常遵照以下协议:初始化ROM操作命令存放器操作命令处理数据 初始化单总线上全部处理均从初始化序列开始。初始化序列包含总线主机发出一复位脉冲,接着由隶属器件送出存在脉冲。存在脉冲让总线控制器知道DS1820 在总线上且已准备好操作。 ROM操作命令一旦总线主机检测到隶属器件存在,它便能够发出器件ROM操作命令之一。全部ROM操作命令均为8位长。这些命令列表以下:Read ROM(读ROM)33h 此命令许可总线主机读DS18B208位产品系列编码,唯一48位序列号,和8位CRC。此
8、命令只能在总线上仅有一个DS18B20情况下能够使用。假如总线上存在多于一个隶属器件,那么当全部从片企图同时发送时将发生数据冲突现象(漏极开路会产生线和结果)。Match ROM( 符合ROM)55h 此命令后继以64位ROM数据序列,许可总线主机对多点总线上特定DS18B20寻址。只有和64位ROM序列严格相符DS18B20才能对后继存贮器操作命令作出响应。全部和64位ROM序列不符从片将等候复位脉冲。此命令在总线上有单个或多个器件情况下均可使用。Skip ROM( 跳过ROM )CCh 在单点总线系统中,此命令经过许可总线主机不提供64位ROM编码而访问存放器操作来节省时间。假如在总线上存
9、在多于一个隶属器件而且在Skip ROM命令以后发出读命令,那么因为多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线和效果)。Search ROM( 搜索ROM)F0h 当系统开始工作时,总线主机可能不知道单线总线上器件个数或不知道其64位ROM编码。搜索ROM命令许可总线控制器用排除法识别总线上全部从机64位编码。Alarm Search(告警搜索)ECh 此命令步骤和搜索ROM命令相同。不过,仅在最近一次温度测量出现告警情况下,DS18B20才对此命令作出响应。告警条件定义为温度高于TH 或低于TL。只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显
10、示出非告警值或改变TH或TL设置,使得测量值再一次在许可范围之内。贮存在EEPROM内触发器值用于告警。存放器操作命令 Write Scratchpad(写暂存存放器)4Eh 这个命令向DS18B20暂存器中写入数据,开始位置在地址2。接下来写入两个字节将被存到暂存器中地址位置2和3。能够在任何时刻发出复位命令来中止写入。Read Scratchpad(读暂存存放器)BEh 这个命令读取暂存器内容。读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。假如不想读完全部字节,控制器能够在任何时间发出复位命令来中止读取。Convert T(温度变换)44h 这条命令开启一次温度转换
11、而无需其它数据。温度转换命令被实施,以后DS18B20保持等候状态。假如总线控制器在这条命令以后跟着发出读时间隙,而DS18B20又忙于做时间转换话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。假如使用寄生电源,总线控制器必需在发出这条命令后立即起动强上拉,并保持500ms。处理数据: DS18B20高速暂存存放器由9个字节组成,其分配图3所表示。当温度转换命令公布后,经转换所得温度值以二字节补码形式存放在高速暂存存放器第0和第1个字节。单片机可经过单线接口读到该数据,读取时低位在前,高位在后。 DS18B20温度数据表上表是DS18B20温度采集转化后得到12位数据,存
12、放在DS18B20两个8比特RAM中,二进制中前面5位是符号位,假如测得温度大于或等于0,这5位为0,只要将测到数值乘于0.0625即可得到实际温度;假如温度小于0,这5位为1,测到数值需要取反加1再乘于0.0625即可得到实际温度。温度转换计算方法举例: 比如当DS18B20采集到+125实际温度后,输出为07D0H,则:实际温度=07D0H0.0625=0.0625=1250C。比如当DS18B20采集到-55实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:实际温度=370H0.0625=8800.0625=550C。3.3 DS18B
13、20结构图 图1管脚排列图 在TO-92和SO-8封装中引脚有所不一样,具体差异请查阅PDF手册,在TO-92封装中引脚分配以下: 1(GND):地2(DQ):单线利用数据输入输出引脚3(VDD):可选电源引脚 第四章 LED数码管介绍LED数码管实际上是由七个发光管组成8字形组成,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。当数码管特定段加上电压后,这些特定段就会发亮。通常情况下,单个发光二极管管压降为1.8V左右,电流不超出30mA。发光二极管阳极连接到一起连接到电源正极称为共阳数码管,发光二极管阴极连接到一起连接到电源负极称为共阴数码管。常见LED数码管显
14、示数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。 图2 数码管引脚定义图八段LED数码显示管原理和结构:数码管分为共阳型和共阴型,共阳极型就是发光管正极全部连在一起 ,作为一条引线,负极分开。八段数码发光管就是8个发光二极管组成,在空间排列成为8字型带个小数点,只要将电压加在阳极和阴极之间对应笔画就会发光。8个发光二极管阳极并接在一起,8个阴极分开,所以称为共阳八段数码管。相反则为共阴八段数码管。共阴极八段译码管显码表:(输入为sp、g、f、e、d、c、b、a)输入输出输入输出3FH07FH806H16FH95BH277HA4FH37CHB66H439HC6DH5
15、5EHD7DH679HE07H771HF动态显示驱动:数码管动态显示介面是单片机中应用最为广泛一个显示方法之一,动态驱动是将全部数码管8个显示笔划a,b,c,d,e,f,g,dp 同名端连在一起,另外为每个数码管公共极COM增加位元选通控制电路,位元选通由各自独立I/O线控制。当单片机输出字形码时,全部数码管全部接收到相同字形码,但到底是那个数码管会显示出字形,取决于单片机对位元选通COM端电路控制,所以我们只要将需要显示数码管选通控制打开,该位元就显示出字形,没有选通数码管就不会亮。 透过分时轮番控制各个LED数码管COM端,就使各个数码管轮番受控显示,这就是动态驱动。在轮番显示过程中,每位
16、元数码管点亮时间为12ms,因为人视觉暂留现象及发光二极体余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描速度足够快,给人印象就是一组稳定显示资料,不会有闪烁感,动态显示效果和静态显示是一样,能够节省大量I/O端口,而且功耗更低。第五章 硬件设计温度采集系统硬件部分关键是由温度采集模块、MSC51处理模块、温度显示模块组成:图3系统硬件框图5.1温度采集模块:图4 温度采集模块电路原理图两个18B20输入/输出端口接在同一根总线上,GND接地,VCC端口接+5V电源,DQ端口接单片机P2.0口5.2温度显示模块:图5 温度显示模块电路原理图51单片机经过CH452驱动八共阴极数码管显示,
17、其中CH452SCL输入端口接单片机P2.2,SDA输入输出端口接P2.1口。第六章 软件设计程序编写关键分为 读18B20ROM系列号程序,温度转换和读取程序,温度在数码管显示程序。6.1 读18B20ROM系列号程序在编写读18B20ROM系列号程序过程中需要分为多个子程序如:初始化,写时序,读时序,读ROM系列号等过程 图6 读ROM序列号步骤图#include#include#define uchar unsigned char#define uint unsigned intuchar busf8;sbit DQ = P20;/* 22.11484MHz时微秒级延时*/void de
18、layus(uchar us)while(us-);/* 22.11484MHz时毫秒级延时*/void delayms(uint xms)uint x,y;for(x=xms; x0; x-)for(y=229; y0; y-);void DQ_Init(void)DQ=1;_nop_();_nop_();DQ=0;delayus(150);/492usDQ=1; delayus(30);/103uswhile(DQ=1); delayus(150);/492usuchar DQ_read(void)uchar i, rdata;for(i=0; i1; DQ = 1;_nop_();_no
19、p_();_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();DQ = 1;delayus(2);if(DQ=1)rdata = rdata|0x80;else rdata = rdata&0x7F;delayus(12); /45usDQ = 1; return rdata;void DQ_write(uchar sdata)uchar i;for(i=0; i1;DQ = 1;void get_num()uchar i;DQ_Init();DQ_write(0x33);for(i=0;i8;i+)busfi=DQ_read();vo
20、id main()delayms(1000);while(1)get_num();delayms(1000);P0=busf0;6.2温度转换和读取程序二温度读取和对应转换程序中关键包含 初始化,跳过ROM,温度转换,匹配ROM,写入指令读暂存器温度,温度值转换成实际温度等过程。 图7 温度读取和转换步骤图#include #include C_Delay.h#include PIN.h#include DS18B20.huchar TH,TL;uint TEMP;/*18b20ROM地址:单个连接读取*/unsigned char rom18 =0x28,0xfe,0x97,0x4a,0x0
21、3,0x00,0x00,0x86;unsigned char rom28 =0x28,0xe6,0x7b,0x79,0x02,0x00,0x00,0xec;/* 1-wire通信初始化*/void DQ_Init(void)DQ=1;_nop_();_nop_();DQ=0;delayus(150);/492usDQ=1; /释放总线delayus(30);/103uswhile(DQ=1); /等到18B20delayus(150);/492us/* 1-wire通信读1字节*/uchar DQ_read(void)uchar i, rdata;for(i=0; i1; DQ = 1;_no
22、p_();_nop_();_nop_();_nop_();DQ = 0;_nop_();_nop_();_nop_();_nop_();DQ = 1;delayus(2);/12us,加上前面DQ以后时间,大约14-15usif(DQ=1)rdata = rdata|0x80;else rdata = rdata&0x7F;delayus(12); /45usDQ = 1; return rdata;/* 1-wire通信写1字节*/void DQ_write(uchar sdata)uchar i;for(i=0; i1;DQ = 1;/释放总线uint get_Temp(uchar on)
23、 uchar i;DQ_Init();DQ_write(0xcc);/跳过ROMDQ_write(0x44);/开始转换温度delayms(750);DQ_Init();DQ_write(0x55); /match ROMif(on=1)for(i=0;i8;i+)DQ_write(rom1i);if(on=2)for(i=0;i8;i+)DQ_write(rom2i);DQ_write(0xBE);TL = DQ_read();TH = DQ_read();TEMP = TH;TEMP = (TEMP8)|TL;TEMP = (unsigned int)(TEMP*0.0625*100+0.
24、5);return TEMP;,6.3 温度在数码管显示程序三温度显示部分程序关键包含初始化,经过CH452进行温度代码转换,经过按键逐一显示在LED数码管上等过程。 图8 温度显示步骤图#include#include#includeCH452CMD.h#includeC_Delay.h/#includeDS1302.h#includeDS18b20.h/#includeAD_TLC549.h#includePIN.h#define uint unsigned int#define uchar unsigned char/位定义/sbitLED = P00;/sbit LED1 = P01;
25、/sbitFMQ = P33;/全局变量定义uchar keyValue;/键值/bit isRTCSet = 0;/1302是否调时模式/uchar TimeOn;/显示缓冲区uchar DISBUF8 = 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10;/DS1302时间缓冲区uchar DATETIME7 = 0, 0x27, 0x21, 0x19, 0x08, 0x02, 0x11;/显示数据类型enum RTCModetime = 0,date = 1 RTC_Display = time;/* CH452显示程序 */void CH45
26、2_Fresh_Display(void)/配置CH452:采取BCD译码方法,8个数码管CH452_Write(CH452_SYSON2);CH452_Write(CH452_BCD); / BCD译码,8个数码管CH452_Write(CH452_DIG7 | DISBUF4);CH452_Write(CH452_DIG6 | DISBUF5);CH452_Write(CH452_DIG5 | DISBUF6);CH452_Write(CH452_DIG4 | DISBUF7);CH452_Write(CH452_DIG3 | DISBUF0);CH452_Write(CH452_DIG2
27、 | DISBUF1);CH452_Write(CH452_DIG1 | DISBUF2);CH452_Write(CH452_DIG0 | DISBUF3);显示温度*/void Dis_temp(uchar Dev_No)uint TEMP; TEMP=get_Temp(Dev_No);DISBUF0 = 0x17;DISBUF1 = 0x18+0x80;if(Dev_No=1)DISBUF2 = 1; if(Dev_No=2)DISBUF2 = 2; DISBUF3 = 0x12;DISBUF4 = TEMP % 10000 / 1000;/拆分温度信息DISBUF5 = TEMP %
28、1000 / 100+0x80;DISBUF6 = TEMP % 100 / 10;DISBUF7 = TEMP % 10;CH452_Fresh_Display();void init()/初始化函数/配置中止:使能外部中止0,使能串口中止,使能总中止IE0=0;EX0=1;ET0 = 1;EA=1; /只点亮LED1P0 = 0x01;/设备初试化测试CH452_Write(CH452_SYSON2);/DS1302_Test();/RTC_WRDateTime(DATETIME);void choice() interrupt 0 keyValue = CH452_Read();void
29、 main()P0=0;init();while(1) if(keyValue=0x40)CH452_Write(CH452_TWINKLE & 0xFF00);Dis_temp(1);if(keyValue=0x41)CH452_Write(CH452_TWINKLE & 0xFF00);Dis_temp(2);else CH452_Write(CH452_TWINKLE & 0xFF00);Dis_temp(1);/delayms(20);第七章 心得体会 经过此次综合训练,自己感觉学到了很多东西,即使只有短短一周时间,但确实使自己对知识认识和了解有了很大提升。首先要说是对数字信号处理认识
30、,经过查阅资料,自己在里仁图书馆借个几本相关书籍,经过这次基于DS18B20传感器测量温度和LED数码管设计,我学到了很多东西。,这次设计加强了我们独立思索能力。一个好设计需要经过我们不停思维,不停改善。经过设计以后,我们不像以前那样,碰到问题全部不愿意独立思索,只会一味向她人求援。现在,我们会经过自己思索,处理我们自己碰到问题和困难。一开始我们经过讨论,初步有了设计方案,认为还是比较简单。不过,具体到设计时,我们碰到了很多麻烦,比如怎样将传感器得到温度转换成为对应电信号,怎样将电信号输送到单片机进行控制,怎样把测得温度用数字显示出来等等。这就要求我们学习要一步一个脚印,掌握扎实理论基础了。最
31、关键一点是,我们在这次设计中培养了自己学习能力。因为好多知识超出了我们书本范围,这就要求我们自己经过查资料来增加我们知识,处理碰到部分问题。在短时间内从书本资料中帅选出我们所需要知识,对我们自主学习能力有很大帮助。就那DS18B20来说,因为我们书本上没有介绍到这种温度传感器,所以我们就经过学习DS18B20和数码管说明书,了解它工作原理和特征,并搞清楚在实际应用时要注意事项,对DS18B20进行初始化、编程要求和要求等。培养了自主学习能力,不管以后我们要做什么样设计,我们全部能够经过查阅资料来实现。最终,此次设计能够顺利完成,我要尤其感谢试验室老师给大力支持和热心帮助。经过四面综合训练,自己感到收获很大,同时也让自己感到了知识关键性。 参考文件高洪志 MCS-51单片机原理及应用技术教程 人民邮电出版社 谢宜仁 单片机实用技术问答 人民邮电出版社 龚光华 单片机认识和实践 北京航空航天大学出版社 唐继贤 51单片机工程应用实例 北京航空航天大学出版社