基于单片机的温度数据采集系统设计毕业设计.doc

上传人:laozhun 文档编号:3940193 上传时间:2023-03-28 格式:DOC 页数:32 大小:509KB
返回 下载 相关 举报
基于单片机的温度数据采集系统设计毕业设计.doc_第1页
第1页 / 共32页
基于单片机的温度数据采集系统设计毕业设计.doc_第2页
第2页 / 共32页
基于单片机的温度数据采集系统设计毕业设计.doc_第3页
第3页 / 共32页
基于单片机的温度数据采集系统设计毕业设计.doc_第4页
第4页 / 共32页
基于单片机的温度数据采集系统设计毕业设计.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《基于单片机的温度数据采集系统设计毕业设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的温度数据采集系统设计毕业设计.doc(32页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)基于单片机的温度数据采集系统设计学生姓名 学院名称机电工程学院专业名称电气自动化指导教师 2011年1月8日 摘要单片机已在各行业得到广泛应用,为适应更多的应用领域,厂家采取了在一块单片机芯片上集成多种功能部件和大容量存储器的方法。因而,整个应用系统不需要扩展,而体积变小、可靠性增高,使单片机成为真正意义上的单片机系统。本设计是基于STC89C52单片机和DS185B20实现温度的测量系统,单片机在本系统中作为温度输入和显示控制器件,DS18B20被用作温度数据的采集和温度输出器件。本系统采用单总线操作,线路简单,测量值精确,可实现多点测量,并对温度超过限制值,产生报警和数据采

2、集。本系统被广泛应用于温度控制、温度检测、温度采、消防等系统中。关键词 单片机;数据转换;温度显示目 录第一章 绪论11.1 本系统功能11.1.1 温度测量功能11.1.2 温度采集功能11.1.3 系统工作流程11.2 本系统优点21.2.1 线路简单21.2.2温度精确2第二章 系统硬件介绍22.1本系统硬件和软件组成22.1.1 硬件组成22.1.2软件组成22.2 STC单片机介绍32.2.1 STC单片机功能介绍32.3 DS18B20数字温度传感器介绍62.3.1 功能介绍62.3.2 DS18B20内部逻辑图102.3.3 DS18B20温度传感器读写时序102.3.4 DS1

3、8B20存储器操作命令122.3.5 DS18B20温度传感器与单片机的接口电路132.4系统工作过程222.4.1 温度的测量222.4.2 温度的采集23第三章 程序框图及C语言程序243.1温度采集系统原理框图243.2温度显示模块243.3读温度子程序253.4温度转换子程序253.5计算温度子程序26结论35致谢36参考文献37附录38第一章 绪论1.1 系统功能1.1.1 温度测量功能利用DS18B20数字温度传感器实现对温度进行准确的测量,使温度值显示到数码管上。1.1.2 温度采集功能利用DS18B20数字温度传感器进行温度的采集,单片机作为控制器件,数据通过串口(RS232)

4、传至计算机,进行温度的采集。1.1.3系统工作流程,见图1-1系统上电初始化DS18B20进行数据的采集并将数据以二进制的形式传至单片机单片机对数据进行处理数码管进行温度显示通过串口将数据传至计算机图1-1系统工作流程1.2 本系统优点1.2.1 线路简单DS18B20与单片机之间一根导线进行数据传输,不需要对数据进行转换,接线简单。1.2.2 温度测量准确DS18B20的温度分辨率为0.0625,所以对温度值可以进行准确的温度转换。第二章 系统硬件介绍2.1系统硬件及软件组成2.11硬件组成本系统所用的硬件有:见表2-1。表2-1系统硬件清单器件名称数量STC89C52单片机1个74HC57

5、3锁存器2个LED发光二级管8个蜂鸣器1个独立键盘5个数码管(两个一组)2个三极管1个DS18B201个MAX233串口芯片1个电容若干电阻若干导线若干2.1.2软件组成软件有:keil软件、windows操作系统和串口调试助手等软件组成。2.2 STC单片机介绍单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快。1971年Intel公司首次宣布4004的4位微处理器,1974年12月Fairchild(仙童)公司即推出了8位单片机F8,开创了单片机的门户。单片机在我国的应用始于20世纪70年代末,那时我国的科研工作者开始对单片机的应用进行了初期探索,20世纪80年代,单片机在我国

6、得以广泛的应用,各理工科院校陆续开设了有关应用课程。在教学及应用上,Zilog公司生产的Z80CPU成为我国工业控制的主流,以Z80为CPU组成的TP801单板机在教学上及应用领域发挥过巨大作用。20世纪80年代末至90年代初,我国在工业控制领域开始转向使用Intel公司生产的MCS-51。单片机从1976年公布8位机至今不到30年的时间,它没有像微处理器那样从8位、16位,一直发展到32位、64位,8位机目前依然是单片机的主流机型。但是,它突破了原有的集成结构,在内部继承了越来越多的外围电路和外设接口,从而发展成为控制器(MicroController)的体系结构,其发展历程大致分为以下几步

7、:第一阶段:单片机的控索阶段第二阶段:单片机的完善阶段第三阶段:8位单片机的巩固发展及16位单片机的推出阶段第四阶段:微控制器的全面发展阶段单片机已在各行业得到广泛应用,为适应更多的应用领域,厂家采取了在一块单片机芯片上集成多种功能部件和大容量存储器的方法。因而,整个应用系统不需要扩展,而体积变小、可靠性增高,使单片机成为真正意义上的单片机系统2.2.1 STC单片机功能介绍单片机是随着大规模集成电路的出现极其发展,将计算机的CPU,RAM,ROM,定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算机(single chipmicrocom

8、puter).它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果.单片机应用系统可以分为:(1)最小应用系统是指能维持单片机运行的最简单配置的系统。这种系统成本低廉,结构简单,常构成一些简单的控制系统,如开关状态的输入/输出控制等。片内有ROM/EPROM的单片机,其最小应用系统即为配有晶振,复位电路,电源的单个单片机.片内无ROM/EPROM的单片机,其最小应用系统除了外部配置晶振,复位电路,电源外,还应外接EPROM或EEPROM作为程序存储器用.(2)最小功耗应用系统是指为了保

9、证正常运行,系统的功耗最小.(3)典型应用系统是指单片机要完成工业测控功能所必须的硬件结构系统。STC89C52 是一种低功耗、高性能 CMOS8 位微控制器,具有8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 STC89C52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52 具有以下标准功能: 8k 字节 Flash,256 字节 RAM,32 位

10、I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。2211引脚结构,见图2-1图2-1单片机封装及引脚结构2212内部逻辑图,见图2-2图2-2内部逻辑图2213 引脚功能描述VCC :电源GND:地P0 口:P0 口是一个 8 位漏极开路的双向

11、I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具有内部上拉电阻。在 flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P

12、1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输入(P1.0/T2)和时器/计数器 2的触发输入(P1.1/T2EX),具体如下表所示。在 flash 编程和校验时,P1 口接收低 8 位地址字。P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能驱动 4 个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 MOVX DPTR)时, P2 口送出高八位地址。在这种应用中,P

13、2 口使用很强的内部上拉发送 1。在使用8 位地址(如 MOVX RI)访问外部数据存储器时,P2 口输出 P2 锁存器的内容。在 flash 编程和校验时,P2 口也接收高 8 位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能驱动 4 个TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3 口亦作为 STC89C52 特殊功能(第二功能)使用,如下表所示。在 flash 编程和校验时,P3 口也接收一些控制信号。

14、RST:复位输入。晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在 flash 编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为 8EH

15、的 SFR 的第 0 位置“1”,ALE 操作将无效。这一位置“1”,ALE 仅在执行 MOVX 或 MOVC 指令时有效。否则,ALE 将被微弱拉高。这个 ALE 使能标志位地址为 8EH 的 SFR 的第 0 位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号PSEN是外部程序存储器选通信号。当 STC89C52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活。 XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.3 DS18B20数字温度传感器介绍2

16、.3.1 功能介绍DALLAS最新单线数字温度传感器DS18B20的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 “一线总线”字化温度传感器 同DS1820一样,DS18B20也 支持“一线总线”接口,测量温度范围为 -55C+125C,-10+85C范围内,精度为0.5C。DS1822的精度较差为 2C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

17、适合于恶劣环境的现场温度测量,如:境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定912位的分辨率,精度为0.5C。可选更小的方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为2C,适用

18、于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下: DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM

19、的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位,见表2-1。表2-1DS18B20内部温度表示形式这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位

20、为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FF6FH,-55的数字输出为FC90H。见表2-2表2-2DS18B20转化温度形式实际温度值数字输出(二进制)数字输出(十六进制)+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 0

21、01000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6EH-551111 1100 1001 0000FC90H2.3.3 DS18B20的内部逻辑图,见图2-3。C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器Vdd图2-3DS18B20内部内部逻辑图2.3.4 DS18B20读写时序

22、主机使用时间隙(time slots)来读写 DSl820 的数据位和写命令字的位2.3.4.1初始化时序见图 2-4主机总线 to 时刻发送一复位脉冲(最短为 480us 的低电平信号)接着在 tl 时刻释放总线并进入接收状态DSl820 在检测到总线的上升沿之后 等待 15-60接着 DS1820 在 t2 时刻发出存在脉冲(低电平持续 60-240 us)如图中虚线所示图2-4DS18B20初始化时序图程序:Init_DS18B20(void)/初始化ds1820 DQ = 1; /DQ复位 _nop_(); _nop_(); /稍做延时2ms DQ = 0; /单片机将DQ拉低,发出复

23、位脉冲(要求480us960us) Delay(70); /精确延时566us DQ = 1; /拉高总线(要求1660us) Delay(5); /延时46us presence = DQ; /如果=0则初始化成功 =1则初始化失败 Delay(25); DQ = 1; return(presence); /返回信号,0=presence,1= no presence2.3.4.2写时间隙当主机总线 t o 时刻从高拉至低电平时 就产生写时间隙从 to 时刻开始 15us 之内应将所需写的位送到总线DSl820 在 t1为15-60us 间对总线采样 若低电平 写入的位是 0见若高电平 写入

24、的位是连续写 2 位间的间隙应大于 1us ,见图2-5。 图2-5写时间隙程序:WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1;2.3.4.3读时间隙见图 2-6 主机总线 to 时刻从高拉至低电平时总线只须保持低电平 l 7ts之后15捍 s也就是说t z 时刻前主机必须完成读位 并在 t o 后的 60 尸 s 一 120 fzs 内释放总线读位子程序(读得的位到 C 中) 图2-6读时序程序:ReadOneC

25、har(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(4);return(dat);2.3.5存储器操作命令,见表2-5表2-5存储器操作命令指令约定代码功能读ROM33H读取DS18B20ROM中的编码(64位地址)符合ROM55H发出命令后,接着发出64位ROM编码,访问单总线上与该编码相同的DS18B20,使之做出反应,为下一步读写作准备。搜索ROM0F0H用于确定挂在同一总线上DS18B

26、20的个数,和识别64位ROM地址,微操作各器件做准备。跳过ROM0CCH忽略64位ROM地址,直接向DS18B20发送温度转换命令,适用于单片工作。告警搜索命令0ECH执行后只有温度值超过限度值才做出反应,温度变换命令44H启动DS18B20进行温度转换,转换时间最长为500毫秒,结果存入内部就九字节RAM中。读暂存器0BEH读内部RA九字节内容写暂存器4EH发出向内部RAM的第3、4字节写上下限温度命令,紧随该命令之后是传送两个字节数据。复制暂存器48H将RAM中的第3、4字节内容写到EEPRAM中。重调EEPRAM0B8H将EEPRAM中的第3、4字节内容写到RAM中。2.4 DS18B

27、20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严

28、格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的复位时序 DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成

29、。DS18B20的写时序对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。 图5-2覆铜PCB2.5系统工作过程2.51温度的测量 DS18B20数字温度传感器温度数据以数字的形式传至单片机,单片机将数据转换成十进制,送到数码管进行显示,这也就完成了,温度的测量,6-1。图6-1温度测量2.5.2温度数据的采集 DS18B20数字温度传感器温度数

30、据以数字的形式传至单片机,单片机通过RS232将数据传至计算机,由串口调试助手进行数据的记录和显示,见图6-2。图6-2温度数据的采集7程序框图及C语言程序2.5.3温度采集系统原理框图,见图7-1初始化调用显示子程序1S到?初次上电?读出温度值温度计算处理显示数据刷新发温度转换开始命令NY主流程图Y主流程图N图7-1温度采集系统原理框图2.5.4温度显示模块显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程,见图7-2。温度数据移入显示寄存器十位数0?N Y百位数0? NY百位数显示数据 (不显示符号)十位数显示符号百位数不显示

31、Y 结束图7-2温度显示模块流程图2.5.5读温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,其程序流程,见图7-2。发DS18B20复位命令发跳过ROM命令读取温度命令读取操作,CRC校验9字节完?CRC校验正确?移入温度暂存器结束 N Y N Y图7-3读温度子程序7.1.3温度转换子程序温度转换命令子程序主要是发温度转换开始命令,其子程序流程见图7-4。DS18B20复位命令跳过ROM命令温度转换开始命令结束图7-4温度转换子程序流程7.1.4计算温度子程序此程序将RAM中读取值进行BCD码的转换运算并进行正负判定流程,见图7-5。开始温度零下? N

32、温度值取补码置“”标志 Y置“+”标志计算小数位温度BCD值计算整数位温度BCD值结束图7-5计算温度子程序流程 结论本次用单片机设计的温度数据采集系统终于完成了,在本次设计中,从采集元件,软件设计,硬件焊结,外观到论文的编写都是先查阅了大量资料,后确定,再经老师指导,最后经过多天的不断努力才完成的。在这次培训中,我切身感受到了动手实践的重要性,这对我以后的学习工作将产生深远影响。在本次设计研究和撰写论文的过程中,我查阅了许多文献资料,从中学到了很多有关系统开发和程序调试方面等的知识。在软件开发过程中掌握了一些技术难题的解决方法和技巧,巩固和加深了所学知识的理解,能够把所学的知识与实践相结合,

33、培养了认真严谨的学习态度,为以后开发软件积累了大量的经验,提高了分析问题和解决问题的能力。但是由于认识上的片面和不足,各方面的条件影响也很多,本设计还有待进一步的完善和优化,这些在以后的学习中要注重积累。致谢感谢于蕾老师对我的指导,他的严谨细致、一丝不苟的作风一直是我工作、学习中的榜样。她循循善诱的教导和不拘一格的思路给予我无尽的启迪。无论是在课题的选题还是定稿、研究的方法、技术路线以及本文的撰写都得到了于老师的严格要求和精心指导,于老师花费了大量的精力,在各个环节中给了我许多宝贵的意见。在这次培训中于老师严谨的学术作风、治学态度、求实的工作作风和孜孜不倦的探索创新精神,以及平易近人的师长风范

34、给我创造了良好的学习设计环境,及给了我这个学习提高的机会和在生活上给我的无微不至的关怀。这些都是我不断前进的动力,必将对我今后的学习和生活受益匪浅,我将终生学习和铭记。在此,谨向于老师的培育之恩表示最深的谢意!感谢其他多位老师对我学习和设计所给予的支持和帮助。感谢在我论文完成过程中同学们给我提供的支持、帮助和建议。在这里也衷心地感谢他们!在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意 !参考文献1 何立民电子设计自动化J 电子技术, 2008, (56) :5-92 李鸿嵌入式系统设计M 深圳:科技电

35、子出版社,2008:98-11303 严天峰单片机开发M 成都:科学出版社,2007:77-984 谢维成单片机原理与应用D 北京:清华大学,20035 钱显毅电子电路设计N 科技时报,2009-3-12(C1)附录温度采集系统C语言程序#include #define uchar unsigned char#define uint unsigned intsbit DS=P22;sbit fm=P23; /define interface 定义 DS18B20 接口int temp; / 温度变量uchar flag1,count; / sign of the result positive

36、 or negativesbit dula=P26;sbit wela=P27;unsigned char code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/不带小数点编码。unsigned char code table1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10; /带小数点编码。void delay(uint x) /delayuchar i,j; for(i=0;ix;i+)for(j=0;j0)i-; DS=1; i=4; while(i0)i-;bit

37、 tmpreadbit(void) /read a bit读一位 int i; bit dat; DS=0;i+; /i+小延时一下 DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat);uchar tmpread(void) /读一个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好 /一个字节在 DAT 里 return(dat); /将一个字节数据返回void tmpwritebyte(uchar dat) /写一个字节到

38、DS18B20 里 int i; char j; bit testb; for(j=1;j1; if(testb) / 写 1 部分 DS=0; i+;i+; DS=1; i=8; while(i0) i-; else DS=0; /写 0 部分 i=8;while(i0)i-; DS=1; i+;i+; void tmpchange(void) /发送温度转换命令 dsreset(); /初始化 DS18B20 delay(1); /延时 tmpwritebyte(0xcc); /跳过序列号命令 tmpwritebyte(0x44); /发送温度转换命令int tmp() /获得温度 flo

39、at tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); /跳过读取ROM命令 tmpwritebyte(0xbe); /发送读取数据命令 a=tmpread(); /连续读两个字节数据 b=tmpread(); temp=b; temp=8; temp=temp|a; /两字节合成一个整型变量。 tt=temp*0.0625; /得到真实十进制温度值,因为 DS18B20 /可以精确到 0.0625 度,所以读回数据的最低位代表的是 /0.0625 度。 temp=tt*10+0.5; /放大十倍,这样做的目的将小数点后第一位 /也转换为可显示数字,同时进行一个四舍五入操作。 return temp; /返回温度值/*void readrom() /读取温度传感器的序列号 /本程序中没有用到此函数 uc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号