




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
引言近年来,随着无线通信和计算机通信在全球的迅猛发展,采用无线手段提供数据传输的业务越来越多,无线通信还可以用于一些人类无法到达的地方,还有恶劣的环境进行环境探测,也可以用于无线控制,给人们生活带来了很大的帮助.由于AT89S52单片机可以直接应用在对温度测量的各种测温器件。而且运用超再生无线技术可以把采集到的温度进行无线发送接收。本文就介绍了一种基于单片机的温度测量的方法和超再生无线传输原理。而且完成了该系统的软硬件设计,可以完成最基本的数据传输。超再生无线通信技术在特殊的工作环境中有许多优点:操作起来简单,灵敏度高,而且很稳定,价格便宜,比较适合于恶劣环境探测具,发展前景良好。1.方案论证1.1系统功能定义根据设计要求,可以先大致勾勒出要完成设计,需要几个模块具有如下图所示的的功能。图1-1功能模块框图1.2总体方案通过对系统功能的定义,可以将基于单片机的数字温度计采用温度传感DS18B20作为测温元件用来满足温度测量,并将温度信号经由其本身所具有的A/D转换功能,转换成数字信号经单片机处理,用超再生无线发送模块发送,接收模块接收到的数据再经单片机处理,再用数码管显示,从而完成温度的测量无线传输。整个系统控制将由AT89S52单片机芯片为核心构成。选用DS18B20作为测温元件,用超再生无线发射器和接收器作为无线传输元件,各个检测信号、显示信号可由单片机的I/O口进行。2.系统硬件电路设计2.1系统硬件框图根据系统功能要求,可以先大致勾勒出完成任务所需的系统硬件框图如下:图2-1数据采集模块硬件框图图2-2数据接收模块硬件框图主控模块采用性价比较高的单片机芯片,在其内部将预设好的程序储存,可通过程序的运行控制测温模块进行测温,测温模块主要是由DS18B20构成,将其与所测对象进行接触即可获取被测对象的温度数据,无线发送模块它是由一个能产生等幅振荡的高频载频振荡器,和一个产生低频调制信号的低频振荡器组成,无线接收模块超再生检波接收器:超再生检波电路实际上是一个受间歇振荡控制的高频振荡器,这个高频振荡器采用电容三点式振荡器,振荡频率和发射器的发射频率相一致,报警模块只有当温度超出预定值时才会工作,而所测得的温度将通过显示模块的数码管以数字形式显示。2.2测温模块本设计的测温元件采用的是DS18B20测温元件,DS18B20是由DALLAS(达拉斯)公司生产的一种温度传感器。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20很受欢迎。这是世界上第一片支持“一线总线”接口的温度传感器。DS18B20数字温度计提供9位(二进制)温度读数,指示器件的温度。信息经过单线接口送入DS18B20或从DS18B20送出,因此从单片机到DS18B20仅需一条线连接即可。它可在1秒钟(典型值)内把温度变换成数字。DS18B20的主要特征其主要特征如下:全数字温度转换及输出;先进的单总线数据通信;最高12位分辨率,精度可达土0.5℃;12位分辨率时的最大工作周期为750毫秒;可选择寄生工作方式;检测温度范围为–55℃——+125℃;内置EEPROM,限温报警功能;64位光刻ROM,内置产品序列号,方便多机挂接;多样封装形式,适应不同硬件系统。DS18B20芯片其封装结构如下:图2-3DS18B20芯片封装结构图由其引脚可看出,其3个引脚:GND为电压地直接接地;DQ为单数据总线用来与单片机相连接;本系统中DQ与单片机P1.1接口连接;仅此一个连接就能保证DS18B20与单片机之间的数据交换;VDD引脚接电源电压。DS18B20的工作原理DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。一个工作周期可分为两个部分,即温度检测和数据处理。18B20共有三种形态的存储器资源,分别是:ROM只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM,RAM数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。我们在每一次读温度之前都必须进行复杂的且精准时序的处理,因为DS18B20的硬件简单结果就会导致软件的巨大开销。2.3主控模块主控模块功能分析在本系统中,主控模块居于非常重要的地位。它是整个系统的中枢,系统运行所需的每个操作指令都要由其发出。它一方面控制着测温模块进行温度信息的采集,另一方面也控制着显示模块的工作。最重要的是,由测温模块所采集到的温度信息必须经由主控模块的处理才能在显示模块上显示,从而使整个系统进行正常的运转和工作。针对以上分析本系统主控模块中的单片机芯片采用了AT89S52芯片,此芯片功能强大,能够完全满足系统运行的需求。AT89S52芯片的功能特性AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。其主要性能如下:与MCS-51单片机产品兼容8K字节在系统可编程Flash存储器1000次擦写周期全静态操作:0Hz~33Hz三级加密程序存储器32个可编程I/O口线三个16位定时器/计数器八个中断源全双工UART串行通道低功耗空闲和掉电模式掉电后中断可唤醒看门狗定时器双数据指针掉电标识符图2-4AT89S52引脚结构图在本系统中,将DS18B20的单数据总线与单片机的P2.2端口相连,用一根数据线就完成了测温模块与单片机芯片的连接。超再生无线通信模块2.4.1无线发送模块超再生无线电遥控电路由无线电发射器和超再生检波式接收器两部分组成。无线电发射器:它是由一个能产生等幅振荡的高频载频振荡器(一般用30~450MHz)和一个产生低频调制信号的低频振荡器组成的。用来产生载频振东和调制振荡的电路一般有:多揩苦荡器、互补振荡器和石英晶体振荡器等。由低频振荡器产生的低频调制波,一般为宽度一定的方波。如果是多路控制,则可以采用每一路宽度不同的方波,或是频率不同的方波去调制高频载波,组成一组组的己调制波,作为控制信号向空中发射,组成一组组的己调制波,作为控制信号向空中发射。图2-5无线电发射器原理图2.4.2无线接收模块超再生检波接收器:超再生检波电路实际上是一个受间歇振荡控制的高频振荡器,这个高频振荡器采用电容三点式振荡器,振荡频率和发射器的发射频率相一致。而间歇振荡(又称淬装饰振荡)双是在高频振荡的振荡过程中产生的,反过来又控制着高频振荡器的振荡和间歇。而间歇(淬熄)振荡的频率是由电路的参数决定的(一般为1百~几百千赫)。这个频率选低了,电路的抗干扰性能较好,但接收灵敏度较低:反之,频率选高了,接收灵敏度较好,但抗干扰性能变差。应根据实际情况二者兼顾。超再生检波电路有很高的增益,在未收到控制信号时,由于受外界杂散信号的干扰和电路自身的热搔动,产生一种特有的噪声,叫超噪声,这个噪声的频率范围为0.3~5kHz之间,听起来像流水似的“沙沙”声。在无信号时,超噪声电平很高,经滤波放大后输出噪声电压,该电压作为电路一种状态的控制信号,使继电器吸合或断开(由设计的状态而定)。当有控制信号到来时,电路揩振,超噪声被抑制,高频振荡器开始产生振荡。而振荡过程建立的快慢和间歇时间的长短,受接收信号的振幅控制。接收信号振幅大时,起始电平高,振荡过程建立快,每次振荡间歇时间也短,得到的控制电压也高;反之,当接收到的信号的振幅小时,得到的控制电压也低。这样,在电路的负载上便得到了与控制信号一致的低频电压,这个电压便是电路状态的另一种控制电压。如果是多通道遥控电路,经超再生检波和低频放大后的信号,还需经选频回路选频,然后分别去控制相应的控制回路。图2-6超再生检波接收器电路原理图2.6报警模块本系统中报警模块采用的是蜂鸣器报警,蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。蜂鸣器的结构原理1.压电式蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。2.电磁式蜂鸣器电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。2.7电路原理图的绘制和电路的焊接在硬件的设计前期,根据框图对电路中可能出现的电路,进行了模拟实验,并根据实验结果对后期的硬件设计进行了合理化的修改完善。在第一章中已分析了系统并绘制了框图,并根据框图分别设计了各部分电路。由于温度传感器DS18B20集成度较高,所以在硬件电路设计时不需要太多其他元件即可实现预期功能。因此在PROTEL上对原理图进行了绘制,从而得出了最终的完整电路原理图[附录一]。2.7.1PROTEL简介PROTEL是PORTEL公司在80年代末推出的EDA软件,在电子行业的CAD软件中,它当之无愧地排在众多EDA软件的前面,是电子设计者的首选软件,它包含了电原理图绘制、模拟电路与数字电路混合信号仿真、多层印制电路板设计(包含印制电路板自动布线)、可编程逻辑器件设计、图表生成、电子表格生成、支持宏操作等功能,并具有Client/Server(客户/服务器)体系结构,同时还兼容一些其它设计软件的文件格式,如ORCAD,PSPICE,EXCEL等,其多层印制线路板的自动布线可实现高密度PCB的100%布通率。Protel99SE采用数据库的管理方式。该软件沿袭了Protel以前版本方便易学的特点,内部界面与Protel99大体相同,新增加了一些功能模块,功能更加强大。新增的层堆栈管理功能,可以设计32个信号层,16个地电层,16个机械层。新增的3D功能在加工印制版之前可以看到板的三维效果。其具有的打印功能,可以轻松修改打印设置控制打印结果。Protel99SE容易使用的特性还体现在其帮助功能,按下右上角的小问号,然后输入你所要的信息,可以很快地看到特性的功能,然后用到设计中,按下状态栏末端的按钮,使用帮助顾问。2.7.2电路的焊接当通过PROTEL绘制出完整的电路原理图后,就可以按照绘制好的原理图进行电路的焊接,焊接时要注意虚焊和短路情况出现。焊接是要先焊单片机的主电路,以便于对各部分电路的测试。当焊完一部分子电路后,要先输入子程序进行检测,看是否有输入或输出。焊完后,就可以进行电路总体性能测试了。在测试之前,一定要先对电路检测,看是否有短路情况出现,以免芯片损坏。3系统软件设计3.1主控程序设计通过对系统工作原理的了解,我们可以大致知道系统软件运行工作的流程图如下:图3-1数据采集模块程序流程图当接通电源开始工作后,单片机中的程序开始运行,将对DS18B20进行初始化,以便单片机芯片和DS18B20达成通信协议。完成初始化后,由于本系统只有一个测温元件,单片机会向其发出跳过ROM指令,接下来便可向其发送操作指令,设定温度上下限,启动测温程序。测温过程完成后,发出温度转换指令,从而便可将温度转化成数字模式进行显示读取。温度读取结束,经过单片机处理转换通过P3.1口进行串口发送。数据由低位到高位发送,由72us高电平和124us低电平表示数据高电平,由72us高电平和72us低电平表示数据低电平。图3-2数据接收模块程序流程图接收模块接收通过接收器接收温度数据,若接收到72us高电平和124us低电平表示接收到数据位为高电平,若接收到72us高电平和72us低电平表示接收到数据位为低电平,再经单片机处理,用数码管显示。当温度超过限定值时,蜂鸣器报警。3.2温度信息的采集通过DS18B20单线总线的所有执行处理都从一个初始化序列开始。初始化序列包括一个由总线控制器发出的复位脉冲和随后由从机发出的存在脉冲:1、复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。2、存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。3、控制器发送ROM指令:双方打完了招呼之后最要将进行交流了,ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯片搜索。各自功能如下:ReadROM(读ROM)[33H](方括号中的为16进制的命令字)这个命令允许总线控制器读到DS18B20的64位ROM。只有当总线上只存在一个DS18B20的时候才可以使用此指令。MatchROM(指定匹配芯片)[55H]这个指令后面紧跟着由控制器发出了64位序列号,当总线上有多只DS18B20时,只有与控制发出的序列号相同的芯片才能做出反应,其它芯片将等待下一次复位。这条指令适合单芯片和多芯片挂接。SkipROM(跳跃ROM指令)[CCH]这条指令使芯片不对ROM编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。如果在多芯片挂接时使用此指令将会出现数据冲突,导致错误出现。SearchROM(搜索芯片)[F0H]在芯片初始化后,搜索指令允许总线上挂接多芯片时用排除法识别所有器件的64位ROM。AlarmSearch(报警芯片搜索)[ECH]在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于TH或小于TL报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,直到再一次测得温度值达不到报警条件为止。ROM指令为8位长度,功能是对片内的64位光刻ROM进行操作。其主要目的是为了分辨一条总线上挂接的多个器件并作处理。诚然,单总线上可以同时挂接多个器件,并通过每个器件上所独有的ID号来区别,一般只挂接单个18B20芯片时可以跳过ROM指令(注意:此处指的跳过ROM指令并非不发送ROM指令,而是用特有的一条“跳过指令”)。4、控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧接着(不间断)就是发送存储器操作指令了。操作指令同样为8位,共6条,存储器操作指令分别是写RAM数据、读RAM数据、将RAM数据复制到EEPROM、温度转换、将EEPROM中的报警值复制到RAM、工作方式切换。WriteScratchpad(向RAM中写数据)[4EH]:这是向RAM中写入数据的指令,随后写入的两个字节的数据将会被存到地址2(报警RAM之TH)和地址3(报警RAM之TL)。写入过程中可以用复位信号中止写入。ReadScratchpad(从RAM中读数据)[BEH]:此指令将从RAM中读数据,读地址从地址0开始,一直可以读到地址9,完成整个RAM数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。CopyScratchpad(将RAM数据复制到EEPROM中)[48H]:此指令将RAM中的数据存入EEPROM中,以使数据掉电不丢失。此后由于芯片忙于EEPROM储存处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持10MS,来维持芯片工作。ConvertT(温度转换)[44H]:收到此指令后芯片将进行一次温度转换,将转换的温度值放入RAM的第1、2地址。此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持500MS,来维持芯片工作。RecallEEPROM(将EEPROM中的报警值复制到RAM)[B8H]:此指令将EEPROM中的报警值复制到RAM中的第3、4个字节里。由于芯片忙于复制处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。另外,此指令将在芯片上电复位时将被自动执行。这样RAM中的两个报警字节位将始终为EEPROM中数据的镜像。ReadPowerSupply(工作方式切换)[B4H]:此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0”为寄生电源状态,“1”为外部电源状态。存储器操作指令的功能是命令18B20作什么样的工作,是芯片控制的关键。5、执行或数据读写:一个存储器操作指令结束后则将进行指令执行或数据的读写,这个操作要视存储器操作指令而定。DS18B20需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和DS18B20间的任何通讯都需要以初始化序列开始。一个复位脉冲跟着一个存在脉冲表明DS18B20已经准备好发送和接收数据(适当的ROM命令和存储器操作命令)。DS18B20的复位时序图3-3DS18B20的复位时序图DS18B20的读时序对于DS18B20的读时序分为读0时序和读1时序两个过程。对于DS18B20的读时隙是从主机把单总线拉低之后,在15us之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。图3-4DS18B20的读时序图DS18B20的写时序:对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。图3-5DS18B20的写时序图4调试与总结在硬件电路焊接和软件程序设计分别完成的基础之上,进行软硬件的结合与调试。通过下载将在电脑上已完成的程序下载到单片机芯片中。在调试中发现软件中存在的问题,及时解决问题,确保系统能正常工作并达到设计要求。通过反复的调试与实验,可以证明该系统能够较好地完成设计所需的基本要求。即能够方便准确的对被测对象进行温度测量。同时在完成设计要求的前提下,充分考虑到了外观,成本等问题,在性能和价格之间作了比较好的平衡。虽然整体性能良好,但尚存在些许不足,系统稳定性不够,需要增强自己的焊接水平以便以后避免出现类似问题。本无线探测系统实用性强,结构较为简单,成本低,外接元件少。在实际应用中工作性能稳定,测量温度准确,精度较高。系统在硬件设计上充分考虑到了可扩展性,经过一定的添加或改造,很容易增加功能。也可与无线装置进行连接,实现远距离异地测温。本系统适用范围广泛,可以单独使用作为监控仪,应用于农业温室大棚监测植物生长的环境变化,工业厂房测量各部分的工作温度等等。也可以作为智能控制系统的一部分,与其它设备协同工作。系统移植性强,只需改变前端测量用的传感器类型,可在此基础上修改为其他非电量参数的测量系统。感言通过此次毕业设计,我学到了很多知识。在实物的设计和论文的写作过程中,通过查资料和搜集有关的文献,培养了自学能力。通过对硬件电路的设计和焊接,增强了自己的动手能力。并且由原来的被动接受知识转换为主动的寻求知识,学会了更好地让所学知识与实践相结合,让书本上的知识与实际生活中的具体应用相结合。让自己切实感觉到了学有所用。并在此期间巩固复习了在大学4年内学过的知识,尤其是单片机和模电,数电方面的知识。同时通过这次毕业设计提高了自己的单片机编程的能力,尤其是获得的软件调试经验,同时也让自己知道了自己不足和缺陷,从而为自己能更好的改进提供了帮助。致谢经过四年的学习,现在终于要毕业了。在学习期间经历了风风雨雨,在各位老师和同学的帮助和支持下最终得以顺利完成。在此,首先感谢我的老师,感谢各位老师这四年中在学习中、生活上的关心和照顾;其次感谢各位同学,同学们在生活中给予很大的帮助,在学习上也给极大的鼓舞。 指导老师XXX治学严谨,学识渊博,平易近人,在我做设计和论文期间对我的教诲和指导将使我终生受益。无论是在平时的阶段,还是在论文的选题、资料查询、开题、研究、设计和撰写的每一个环节,都得到导师的悉心指导和帮助。借此机会向XXX老师表示衷心的感谢!在毕业设计的这段时间里,其他老师们也都言传身教,以他们广博的知识,敏锐的洞察力,多年的教学和实际工作经验,在毕业设计上给予我很大的帮助。在本次设计中我学到的不仅是科学知识和工作方法,更学到了作为一个研究人员应有的治学态度以及为人处世的道理,这一切都将使我终身受益。感谢几年来传授我知识的老师们,更要感谢我的家人对我学业上的支持和鼓励,感谢所有关心帮助过我的人。参考文献[1]谭浩强《C程序设计》清华大学出版社1999.12[2]李群芳肖看《单片机原理,接口及应用》清华大学出版社2005.3[3]张义和王敏男《例说51单片机》人民邮电出版社2008.4[4]蔡美琴张为民《MCS-51系列单片机系统及其应用》高等教育出版社1992[5]高峰《单片微机应用系统设计及实用技术》机械工程出版社2004[6]杨全胜《现代微机原理与接口技术》电子工业出版社2004[7]全国大学生电子设计竞赛组委会《全国大学生电子设计竞赛获奖作品精选(1994——1999)》北京理工大学出版社2003.[8]谢淑如郑光钦杨渝生《ProtelPCB99SE电路版设计》清华大学出版社[9]何立民《单片机应用技术选编》北京航空航天大学出版社,1993.2[10]段九洲《放大电路实用设计手册》辽宁科学技术出版社,2002.5[11]李炎清《毕业论文写作与范例》厦门大学出版社2006.10[12]《Basedon89c51+DS18B20warmcontrollingdevelopment》[13]《Theprincipleandapplicationof1-wiredigitaltemperaturesensorDS18B20》[14]《TemperatureMeasureSystemBaseon51SingleChip》附录一电路原理图数据采集模块2.数据接收模块附录二系统主程序1.数据采集模块源程序/********************************************************************************************************//程序功能:DS18B20读取温度********************************************************************************************************/#include<reg52.h>#include<intrins.h> #defineucharunsignedchar#defineuintunsignedintucharcodelab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80};ucharflag,flag1,val1,val2;uchardisp_buffer[4];sbitdq=P1^1;sbittxd2=P3^1;/********************************************************************************************************延迟函数,x=1大约延迟1ms********************************************************************************************************/voiddelay(uintx){ uinti,j; for(i=0;i<x;i++) for(j=0;j<120;j++);}/****************************************/voiddelay8us(ucharx){while(x--);}/*****************************************//********************************************************************************************************延迟函数,x=1大约延迟8us********************************************************************************************************/voiddelay_us(uintx){ while(x--);}/********************************************************************************************************初始化函数********************************************************************************************************/voidinit(){ dq=1; delay_us(1); //拉高一段时间 dq=0; delay_us(60); //延时480us以上 dq=1; while(dq); //等待存在脉冲 delay_us(10); //存在脉冲存活时间 dq=1; //拉高总线}/********************************************************************************************************写指令函数,每次写入一个字节dat********************************************************************************************************/voidwrite(uchardat){ uchari; for(i=0;i<8;i++) { dq=0; dq=dat&0x01; delay_us(2); dq=1; dat>>=1; }}/********************************************************************************************************读函数,每次返回16位的温度值********************************************************************************************************/uintread(){ uchari; uintdat; for(i=0;i<16;i++) { dq=0; dq=1; if(dq) { dat=(dat>>1)|0x8000; } else dat>>=1; dq=1; delay_us(1); } return(dat);}/********************************************************************************************************读取温度函数,返回温度的绝对值,并标注flag,flag=1表示负,flag=0表示正********************************************************************************************************/uintreadtemperature(){ uinttemp; floatm; init(); write(0xcc); //跳过读ROM write(0x44); //启动温度转换 init(); write(0xcc); write(0xbe); //读取温度寄存器 temp=read(); if(temp>0xfff) { flag=1; temp=(~temp)+1; } else { flag=0; } m=temp*0.0625; temp=m*10+0.5; //放大10倍四舍五入输出 return(temp);}/***********************************************************************///显示函数/***********************************************************************/voiddisplay(){ uchari,temp; temp=0xfe; for(i=0;i<4;i++) { if(i==1) { P2=lab[disp_buffer[i]]+0x80; } else P2=lab[disp_buffer[i]]; P0=temp; delay(2); P0=0xff; temp=(temp<<1)|0x01; }/**************************************************发送数据函数***************************************************/ }voidtxd1(uinttemp){uchari,wei;for(i=0;i<8;i++){wei=temp&0x80; if(wei) {txd2=1; delay8us(9); txd2=0; delay8us(18); } else {txd2=1; delay8us(9); txd2=0; delay8us(9); } temp=temp<<1; //delay8us(15); }}/****************************************************************温度值传输处理*****************************************************************/voidtemperature_deal(uinttemp){uchari; val1=temp&0x00ff;//for(i=0;i<8;i++) temp=temp>>8;val2=temp&0x00ff;}/*******************************************************************************主函数********************************************************************************/voidmain(){ uinttemp,i; while(1) { temp=readtemperature(); //温度显示 temperature_deal(temp); txd2=1; delay8us(24); txd1(val2); txd1(val1); }}2.数据接收模块源程序 #include<reg51.h>#include<intrins.h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借用协议合同范例
- 乡村农家乐合同范例
- 商品销售与管理实习总结模版
- 2024年扫路车项目资金需求报告代可行性研究报告
- 集合及函数概念知识点总结模版
- 医疗器械市场趋势报告技术创新的核心驱动力分析
- 小儿脱水护理课件
- 医院管理与IP责任减少医疗差错的策略
- 人工智能在药物研发中的伦理考量
- 个人林地流转合同范例
- 2025年北京市西城区高三二模物理试卷(含答案)
- 2025-2030中国印度醋栗提取行业市场发展趋势与前景展望战略研究报告
- 《智能制造技术》课件全套 第1-7章 智能制造概述-智能制造生态
- 2025届福建省多地市联考高三下学期二模物理试题(原卷版+解析版)
- 2025北京各区高三一模数学分类汇编解析 答案
- 制冷机组维保合同标准文本
- 胃肠炎护理教学查房
- 护士站管理制度
- 奶茶饮品采购合同协议
- 2025初中教师资格证《教育知识与能力》考前必练题库500题(含真题、重点题)
- 肾切除手术的护理查房
评论
0/150
提交评论