数字温度计报警系统(附加完整代码)._第1页
数字温度计报警系统(附加完整代码)._第2页
数字温度计报警系统(附加完整代码)._第3页
数字温度计报警系统(附加完整代码)._第4页
数字温度计报警系统(附加完整代码)._第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1.绪论目前,单片机已经在测控领域中获得了广泛的应用,它除了可以测量电信以外,还可以用于温度、湿度等非电信号的测量,能独立工作的单片机温度检测、温度控制系统已经广泛应用很多领域。单片机是一种特殊的计算机,它是在一块半导体的芯片上集成了CPU,存储器,RAM,ROM,及输入与输出接口电路,这种芯片称为:单片机。由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便的优点,使它迅速的得到了推广应用,目前已成为测量控制系统中的优选机种和新电子产品中的关键部件。单片机已不仅仅局限于小系统的概念,现已广泛应用于家用电器,机电产品,办公自动

2、化用品,机器人,儿童玩具,航天器等领域。本次课程设计,就是用单片机实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次采用DS18B20数字温度传感器来实现基于51单片机的数字温度计的设计。传统的温度计有反应速度慢、读数麻烦、测量精度不高、误差大等缺点而下面利用集成温度传感器AD590设计并制作了一款基于AT89C51的4位数码管显示的数字温度计,其电路简单,软硬件结构模块化,易于实现。该数字温度计利用AD590集成温度传感器及其接口电路完成温度的测量并转换成模拟电压信号,经由模数转换

3、器ADC0804转换成单片机能够处理的数字信号,然后送到单片机AT89C51中进行处理变换,最后将温度值显示在D4、D3、D2、D1共4位七段码LED显示器上。系统以AT89C51单片机为控制核心,加上AD590测温电路、ADC模数转换电路、4位温度数据显示电路以及外围电源、时钟电路等组成。2.设计任务及要求2.1设计任务现代社会生活中,多功能的数字温度计可以给我们的生活带来很大的方便;支持“一线总线”接口的温度传感器简化了数字温度计的设计,降低了成本;以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20为核心,以ATMEL公司的AT89S52为控制器设计的DS18B20温

4、度控制器结构简单、测温准确、具有一定控制功能的智能温度控制器。此次课程设计,就是用单片机1实现温度控制,传统的温度检测大多以热敏电阻为温度传感器,但热敏电阻的可靠性差,测量温度准确率低,而且必须经过专门的接口电路转换成数字信号才能由单片机进行处理。本次采用DS18B20数字温度传感器来实现基于51单片机的数字温度计的设计。该数字温度计将外界的模拟信号转换成单片机能够处理的数字信号,然后送到单片机AT89C51中进行处理变换,最后将温度值显示在D6,D5,D4、D3、D2、D1共8位七段码LED显示器上。系统以AT89C51单片机为控制核心,加上6位温度数据显示电路以及外围电源、时钟电路等组成。

5、2.2设计要求设计一个基于单片机的DS18B20数字温度计。课程设计要求:5V供电;温度采集采用DS18B20;6位LED显示;4个按键,分别是显示当前温度,显示报警温度,报警温度加一,报警温度减一;当温度达到报警温度值时,蜂鸣器进行报警;设计温度控制器原理图;学习用PROTEL画出该原理图;设计和绘制软件流程图,用C语言进行程序编写;焊接硬件电路,进行调试。3.总体设计方案及器件分析设计总体方案提及到温度的检测,我们首先会考虑传统的测温元件有热电偶和热电阻,而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试也复杂,制作成本高。因此,本数字

6、温度计设计采用智能温度传感器DS18B20作为检测元件,测温范围为-55C至+125C,最大分辨率可达0.0625C。DS18B20可以直接读出被测量的温度值,而采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。按照系统设计功能的要求,确定系统由三个模块组成:主控制器STC89C51,温度传感器DS18B20,驱动显示电路,报警电路,复位电路以及按键输入电路。总体电路框如下图3.1所示:图3.1总体电路框图单片机AT89S52由于已经学过单片机课程,这里对该单片机只作简单介绍。AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使

7、用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计

8、数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程FlashAT89S523.3温度传感器DS18B20DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55+125摄氏度,可编程为9位12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电

9、后依然保存。被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。DS18B20的性能特点如下:独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温DS18B20在使

10、用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内4适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电温范围一55C_125C,在-10+85C时精度为土0.5C零待机功耗7可编程的分辨率为912位,对应的可分辨温度分别为0.5C、0.25C、0.125C和0.0625C,可实现高精度测温以上特点使DS18B20非常适用与多点、远距离温度检测系统。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列、各种封装形式如图3.2所示,DQ为数据输入/输出引脚。开

11、漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;GND为地信号;VDD为可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。其电路图3.3所示.。DS18B20TO-92PACKAGEODALLASDS1820DS18B20Z8-PINSOIC(150-MIL)图3.2外部封装形式3.3.1DS18B20注意事项DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:1.DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。2在实际使用中发

12、现,应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。3效果。在使用PL/M、C等高级语言进行的硬件开销需要相对复杂的软件进行补偿.3.3.2DS18B20内部结图为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图3.4所示CROM温度传感器存储器与控制逻辑高速缓存高温触发器TH低温触发器TL图3.4DS18B20内

13、部结构框图配置寄存器8位CRC发生器64b闪速ROM的结构如下:8bit检验CRCMSB48bit序列号LSBMSB8bit工厂代码(10H)LSBMSBLSB开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以米用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。主机操作ROM的命令有五种,如表3.1所列表3.1指令说明读ROM(33H)读DS1820的序列号匹配ROM(55H)继读完64位序列号的一个命令,跳过ROM(CCH)此命令执行后的存储器操作将搜ROM(F0H)识别总线上各器件的编

14、码,为操报警搜索(ECH)仅温度越限的器件对此命令作DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3.5所示。便笺是存储器(上电状态)图3.5高速暂存RAM结构图e2Prom前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。温度低位温度咼位THTL配置保留保留保留8位CRCLSBMSB当DS18B20接收到温度转换命令后,开始启

15、动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625C/LSB形式表示。温度值格式如下:这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。图中,S表示位。对应的温度计算:当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,

16、表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。例如+125C的数字输出为07D0H,+25.0625C的数字输出为0191H,-25.0625C的数字输出为FF6FH,-55C的数字输出为FC90H。DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625C/LSB形式表示。表3.2是部分温度值对应的二进制温度表示数据。表3.2部分温度值温度/C二进制表示十八进制表示+125000001111101000007D0H+25.062500000001100100010191H+0.500000000000010000008H0

17、00000000000000000000H-0.51111111111111000FFF8H-25.06251111111001101111FE6FH-551111110010010000FC90HDS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若TTH或TTL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警搜索。在64位ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。

18、3.3.3DS18B20测温原理DS18B20的测温原理如图3.6所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55C所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器

19、1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)一发ROM

20、功能命令一发存储器操作命令一处理数据。停止0图3.6DS18B20测温原理图在正常测温情况下,DS1820的测温分辨力为0.5C,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5C为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25C、0.75C为进位界限的关系,实际温度Ts可用下式计算:Ts=(Tz-0.25C)+(CD-Cs)/CD数字温度计的硬件设计温度计电路设计原理图如附录一所示,控

21、制器使用单片机AT89S52,温度计传感器使用DS18B20,用液晶实现温度显示。本温度计大体分三个工作过程。首先,由DS18B20温度传感器芯片测量当前的温度,并将结果送入单片机。然后,通过AT89S52单片机芯片对送来的测量温度读数进行计算和转换,井将此结果送入液晶显示模块。最后,数码管显示温度数据。由图1可看到,本电路主要由DS18820温度传感器芯片、数码管显示模块和AT89S52单片机芯片组成。其中,DS18B20温度传感器芯片采用“一线制”与单片机相连,它独立地完成温度测量以及将温度测量结果送到单片机的工作。主控制器单片机AT89S52具有低电压供电和小体积等特点,两个端口刚好满足

22、电路系统的设计需要,很合适携手特式产品的使用。主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。显示电路显示电路采用6个数码管显示温度检测电路DS18B20最大的特点是单总线数据传输方式,DS18B20的数据I/O均由同一条线来完成。DS18B20的电源供电方式有2种:外部供电方式和寄生电源方式。工作于寄生电源方式时,VDD和GND均接地,他在需要远程温度探测和空间受限的场合特别有用,原理是当1Wire总线的信号线DQ为高电平时,窃取信号能量给DS18B20供电,同时一部分能量给内部电容充电,当DQ为

23、低电平时释放能量为DS18B20供电。但寄生电源方式需要强上拉电路,软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM时),同时芯片的性能也有所降低。因此,在条件允许的场合,尽量采用外供电方式。无论是内部寄生电源还是外部供电,I/O口线要接5KQ左右的上拉电。在这里采用前者方式供电。DS18B20与芯片连接电路如图4.1所示:图4.1DS18B20与单片机的连接外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电

24、源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。由于DS18B20只有一根数据线,因此它和主机(单片机)通信是需要串行通信,而AT89S51有两个串行端口,所以可以不用软件来模拟实现。经过单线接口访问DC18B20必须遵循如下协议:初始化、ROM操作命令、存储器操作命令和控制操作。要使传感器工作,一切处理均严格按照时序。主机发送(Tx)复位脉冲(最短为480s的低电平信号)。接着主机便释放此线并进入接收方式(Rx)。总线经过4.7K的上拉电阻被拉至高电平状态。在检测到I/O引脚上的上升沿之后,DS18B20等待1560s,并且接着

25、发送脉冲(60240s的低电平信号)。然后以存在复位脉冲表示DS18B20已经准备好发送或接收,然后给出正确的ROM命令和存储操作命令的数据。DS18B20通过使用时间片来读出和写入数据,时间片用于处理数据位和进行何种指定操作的命令。它有写时间片和读时间片两种:A写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片。有两种类型的写时间片:写1时间片和写0时间片。所有时间片必须有60微秒的持续期,在各写周期之间必须有最短为1微秒的恢复时间.B读时间片:从DS18B20读数据时,使用读时间片。当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片。数据线在逻辑低电平必须保持至少1微秒

26、;来自DS18B20的输出数据在时间下降沿之后的15微秒内有效。为了读出从读时间片开始算起15微秒的状态,主机必须停止把引脚驱动拉至低电平。在时间片结束时,I/O引脚经过外部的上鱯_9L_%拉电阻拉回高电平,所有读时间片的最短持续期为60微秒,包括两个读周期间至少1“s的恢复时间。一旦主机检测到DS18B20的存在,它便可以发送一个器件ROM操作命令。所有ROM操作命令均为8位长。所有的串行通讯,读写每一个bit位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的DS18B20芯片来说,访问每个器件都要遵守下列命令序列:首先是初始化;其次执行ROM命令;最后就是执行

27、功能命令(ROM命令和功能命令后面以表格形式给出)。如果出现序列混乱,则单总线器件不会响应主机。当然,搜索ROM命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机,且准备就绪。在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64位ROM代码相关。在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20便笺式RAM、启动温度转换。软件实现D

28、S18B20的工作严格遵守单总线协议:主机首先发出一个复位脉冲,信号线上的DS18B20器件被复位。接着主机发送ROM命令,程序开始读取单个在线的芯片ROM编码并保存在单片机数据存储器中,把用到的DS18B20的ROM编码离线读出,最后用一个二维数组保存ROM编码,数据保存在X25043中。系统工作时,把读取了编码的DS18B20挂在总线上。发温度转换命令,再总线复位。然后就可以从刚才的二维数组匹配在线的温度传感器,随后发温度读取命令就可以获得对应的度值了。在主机初始化过程,主机通过拉低单总线至少480us,来产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉

29、高。在单总线器件检测到上升沿后,延时1560us,接着通过拉低总线60240us,以产生应答脉冲。写时序均起始于主机拉低总线,产生写1时序的方式:主机在拉低总线后,接着必须在15us之内释放总线。产生写0时序的方式:在主机拉低总线后,只需在整个时序期间保持低电平即可(至少60us)。在写字节程序中的写一个bit位的时候,没有按照通常的分别写0时序和写1时序,而是把两者结合起来,当主机拉低总线后在15us之内将要写的位c给DO:如果c是高电平满足15us内释放总线的要求,如果c是低电平,则DO=c这条语句仍然是把总线拉在低电平,最后都通过延时58us完成一个写时序(写时序0或写时序1)过程。写时

30、间时序:当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有两种写时间隙,写1时间隙和写0时间隙。所有写时间隙必须最少持续60s,包括两个写周期至少1ps的恢复时间。I/O线电平变低后,DS18B20在一个15s到60s的窗口内对I/O线采样。如果线上事高电平,就是写1,如果是低电平,就是写0。主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15s内允许数据线拉到高电平。主机要生成一个写0时间隙,必须把数据线拉到低电平并保存60s。每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0或1。所有读时序至少需要60us

31、。4.4温度报警电路本设计采软件处理报警,利用有源蜂鸣器进行报警输出,采用直流供电。当所测温度超过获低于所预设的温度时,数据口相应拉高电平,报警输出。(也可采用发光二级管报警电路,如过需要报警,则只需将相应位置1,当参数判断完毕后,再看报警模型单元ALARM的内容是否与预设一样,如不一样,则发光报警)报警电路硬件连接见图3.2。软件设计整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测

32、量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。5.1主程序模块主程序需要调用4个子程序,分别为数码管显示程序,温度测试及处理子程序,报警子程序,中断设定子程序。各模块程序功能如下:数码管显示程序:向数码的显示送数,控制系统的显示部分。温度测试及处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。报警子程序:进行温度上下限判断及报警输出。4.

33、中断设定程序:实现设定上下限报警功能。主程序流程见图5.2:*温度转换命令S51寄存器初始化辽b2CHj7lY读収温度温度数据处理温滾显可;在设定K间内在设定区问外5.2温度检测模块图5.2主程序流程图DS18B20在单片机控制下分三个阶段:1.18B20初始化:初始化流程图见图5.2.读18B20时序:读DS18B20流程见图5.3:3.写18B20时序:写18B20流程见图5.4图5.4写DS18B20流程图图5.3读DS18B20流程图报警模块流程见图5.5图5.5报警模块子程序流程图总结经过将近数日的单片机课程设计,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说

34、,还是高兴的,在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,

35、程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。参考文献1李朝青.单片机原理及接口技术.北京航空航天大学出版社,2005马忠梅等.单片机的C语言应用程序设计(第4版),2007江世明.基于Proteus的单片机应用技术.电子工业出版社,2009彭伟.单片机C语言程序设计实训100例.电子工业出版社,2009附录一总体电路图01i!12i“1n1aV?掘IfQCij剧ni1-1k(J11附录二源程序#include/包含单片机寄存器的头文件#includeintrins.h/包含_nop_()函数定义的头文件#defineucharunsignedchar#defin

36、euintunsignedintucharcodedis_729=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e,0 x0c,0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10,0 xff,0 xbf;/*共阳LED断码表0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,p.,0.,l.,2.,3.,4.,5.,6.,7.,8.,9.,灭,-*/ucharscan_con

37、8=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/*位选择控制字*/uchardis8=0 x10,0 x1b,0 x1b,0 x1b,0 x1b,0 x1b,0 x1b,0 x1b;uchartime;/设置全局变量,专门用于严格延时ucharbegin;ucharv;ucharnum,nummax=37;sbitDQ=P30;sbitP3_1=P31;/函数原型:display_delay()功能:提供延时。*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1

38、*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*/voiddisplay_delay(void)uinttime1=100;while(time1)time1-;/函数原型:disp();功能:给数码管动态扫描。*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*

39、1*1*1*/voiddisp()uchark;for(k=0;k8;k+)P0=dis_7disk;P2=scan_conk;display_delay();P2=0 xff;/jsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjsjs函数原型:Init_DS18B20()函数功能:将DS18B20传感器初始化,读取应答信号出口参数:flag*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1

40、*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*/bitInit_DS18B20(void)bitflag;/储存DS18B20是否存在的标志,flag=O,表示存在;flag=l,表示不存在DQ=1;/先将数据线拉高for(time=0;time2;time+)/略微延时约6微秒,DQ=0;/再将数据线从高拉低,要求保持480960usfor(time=0;time200;time+)/略微延时约600微秒;/以向DS18B20发出一持续480960us的低电平复位脉冲DQ=1;/释放数据线(将数据线拉高)for(time=0;tim

41、e16;time+);/延时约30us(释放总线后需等待1560us让DS18B20输出存在脉冲)flag二DQ;/让单片机检测是否输出了存在脉冲(DQ=0表示存在)for(time=0;time200;time+)/延时足够长时间,等待存在脉冲输出完毕,return(flag);/返回检测成功标志/函数原型:ReadOneChar()函数功能:从DS18B20读取一个字节数据出口参数:dat*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*1*/unsignedcharReadOneChar(void)uchari=0;uchardat;for(i=0;i=1;nop();/等待一个机器周期DQ=1;/将数据线人为拉高,为单片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论