1、 目 录第一章 绪 论41.1 温度检测系统的介绍41.1.1 温度检测系统的组成41.1.2 温度检测的实际意义4第二章 温度检测系统方案的选取52.1 温度检测系统方案的选取52.1.1温度检测模块52.1.2温度显示模块62.2 温度检测系统结构的设计7第三章 硬件电路的设计83.1 STC89C52RC的介绍83.2 DS18B20的介绍93.2.1 DS18B20的主要特点93.2.2 DS18B20的结构93.2.3 DS18B20的测温原理103.3 LCD1602的介绍133.4 硬件设计143.4.1硬件设计目标143.4.2硬件功能模块划分143.4.3接口和连接方式143
2、.4.4硬件仿真电路15第四章 软件设计164.1 1602液晶显示处理部分164.2 18B20函数处理部分16第五章 心得体会19参考文献20附录21第一章 绪 论1.1 温度检测系统的介绍温度检测在各领域应用的非常广泛,可以说渗透到了社会的每一个领域。人们的生活与温度检测息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。 1.1.1 温度检测系统的组成 温度检测的首要问题是温度传感器的选取。温度传感器的发展经历了三个发展阶段:传统的分立式温度传感器、模拟式集成温度传感器、智能集成温度传感器。目前的智能温度传感器(也称数
3、字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。它的优点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。目前温度传感器正在朝着基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片机测温系统等高科技的方向迅速发展。我们采用 DS18B20数字温度传感器采集温度信号,使用 MCS-51单片机控制温度传感器,然后将采集到的温度信号在LCD1602液晶显示屏上显示。这种温度检测系统性能较好,并易于实现。 1.1.2 温度
4、检测的实际意义在工业生产和实践研究中,像电力、化工、石油、冶金、航空航天、机械制造、粮食存储、酒类生产等领域,温度常常是表征对象和过程状态的重要参数之一。比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行;炼油过程中,原油必须在不同的温度和压力条件下进行分馏才能得到汽油、柴油、煤油等产品。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。由此可见,温度的检测对日常生活很重要。 第二章 温度检测系统方案的选取2.1 温度检测系统方案的选取由于温度检测的方法多种多样,而不同的检测方法适合不同的场所。我们针
5、对温度检测提出了温度采集系统的多种设计方案。由于温度检测系统基本组成为温度检测模块和温度变送传输模块以及温度显示模块。下面对这些不同模块的选取分别进行具体地分析。2.1.1温度检测模块方案一:采用热敏电阻。因热敏电阻是温度敏感元件,使用它来感受温度变化,其电阻值的变化是可以衡量温度大小的。但热敏电阻测温具有精度低,可靠性差,不适用检测变化小的温度信号等特点,所以这种方法不适用于精度要求高的场合。 方案二:采用单总线数字温度传感器DS18B20测量温度。因为它直接输出数字信号,便于单片机进行处理及控制,同时也节省了硬件电路。该芯片的物理化学性质很稳定,元件线形性能好。当温度在0100摄氏度范围内
6、变化时,最大线形偏差小于1摄氏度。方案三:在温度测量系统中,也可采用单片机温度传感器,比如AD590,LM35等。但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使测温系统的硬件结构变的复杂。另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。 经过讨论分析,为符合课程设计要求,我们选用方案二。 温度检测模块示意图2.1.2温度显示模块 方案一:采用8位段数码管。将单片机得到的数据通过数码管显示出来。该方案简单易行,但所需的元件较多,可读性差,一旦设定后很难再加入其他的功能,而且温度显示格式受限制,耗电量大,不宜用电池给系统供电。
7、方案二:采用液晶显示器件。液晶显示具有平稳、省电、美观等优点,更容易满足题目要求。而且对后续的工艺兼容性高,只需将修改软件中程序设计即可,可操作性强,也易于读数。LCD1602液晶显示器具有两行十六个字符的显示,能同时显示其它的信息如日期、时间、星期、温度。 通过比较,我们选用方案二。 温度显示模块示意图2.2 温度检测系统结构的设计采用STC89C52RC单片机作为控制核心对温度传感器DS18B20进行控制,由它读取温度信号并进行计算处理后送到液晶显示器LCD1602显示。 按照系统设计功能的要求,确定系统由3个模块组成:主控制器、测温电路和显示电路。温度检测系统总体电路结构框图如下图所示。
8、 温度检测系统电路结构框图第三章 硬件电路的设计3.1 STC89C52的介绍 STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计
9、数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。(1).增强型6时钟/机器周期,12时钟/机器周期8051CPU(2).工作电压:5.5V-3.4V(5V单片机)/3.8V-2.0V(3V单片机)(3).工作频率范围:0-40MHz,相当于普通8051的0
10、80MHz.实际工作频率可达到48MHz.(4).用户应用程序空间 4K/8K/13K/16K/20K/32K/64K字节(5).片上集成1280字节/512字节RAM(6).通用I/O口(32/36个),复位后为:P1/P2/P3/P4是准双向口,P0口是开漏输出,作为总线扩展使用时,不用加上拉电阻,作为I/O口使用时,需加上拉电阻。(7).ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器,可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片(8).EEPROM功能(9).看门狗(10).内部集成MAX810专用复位电路(D版本才有),外部20M以
11、下时,可省外部复位电路3.2 DS18B20的介绍3.2.1 DS18B20的主要特点 温度传感器的种类众多,在高精度、高可靠性的应用场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器比较理想。它体积小,硬件开消低,抗干扰能力强,精度高,附加功能强。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。它具有独特的单线接口仅需要一个端口引脚进行通信,并可通过数据线供电,电压范围为3.05.5。3.2.2 DS18B20的结构 TO92封装的DS18B20的引脚排列见下图。 图3.2.1 DS18B20实物图及封装 其引脚
12、功能描述见下表。 表3.2.1DS18B20详细引脚功能描述序号名称引脚功能描述1GND接地信号2DQ数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。3VDD可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。 DS18B20的内部结构示意图如下图所示。C64 位ROM和单线接口高速缓存存储器与控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器VddI/O图3.2.2 DS18B20内部结构64位ROM的结构起始位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后位是前面56位的CRC检验码,这也是多个DS18B20可以
13、采用一线进行通信的原因。温度报警触发器和,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存和一个非易失性的可电擦除的EERAM。高速暂存器RAM由9个字节的存储器组成。第0-1个字节是温度的显示位;第2和第3个字节是TH和TL,同时第2和第3个字节的数字可以更新;第4个字节是配置寄存器,同时第4个字节的数字也可以更新;第5、6、7三个字节是保留的。第8字节读出前面所有字节的CRC码,可用来检验数据,从而保证通信数据的正确性。 表3.2.3列出了温度数据在高速暂存器RAM的第0和第1个字节中的存储格式。表3.2.3 温度数据存储格式位7位6位5位4位3位2位1位
14、0232221202-12-22-32-4位15位14位13位12位11位10位9位8SSSSS2625243.2.3 DS18B20的测温原理DS18B20的测温原理是这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将55所对应的一个基数分别置入减法计数器和温度寄存器中。DS18B20可以采用两
15、种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3.2.3 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。 图3.2.3 DS18B20的接口电路当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议
16、来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、写数据、读数据。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。(1)DS18B20的初始化时序1) 先将数据线置高电平12) 延时(该时间要求不是很严格,但尽可能短一点)3) 数据线拉到低电平04) 延时750us(该时间范围可以设定为480-960us范围内)5) 数据线拉到高电平16) 延时等待。如果初始化成功则在15-60ms内产生一个由DS18B20
17、返回的低电平0,据该状态可以确定它的存在。7) 若CPU读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起最少480us8) 将数据线再次拉到高电平1后结束(2)DS18B20的写数据 ) 数据线先置低电平0) 延时确定的时间为15us) 按从低位到高位的顺序发送数据(一次只发送一位) 延时时间为45us) 将数据线拉到高电平1) 重复1-5步骤,直到发送完整个字节) 最后将数据线拉到(3)DS18B20的读数据) 将数据线拉高到) 延时us) 将数据线拉低到0) 延时6us) 将数据线拉高到1) 延时4us) 读数据线的状态得到一个状态位,并进行数据处理) 重复1-7步骤,
18、直到读取完一个字节3.3 LCD1602的介绍LCD1602液晶显示器也叫1602字符型液晶显示器。它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成。每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用。 LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块。管脚功能 LCD1602引脚图LCD1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高
19、 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。 第6脚:E(或EN)端为使能(enable)端。 第714脚:D0D7为8位双向数据端。 第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 操作控制 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形。这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显
20、示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如A。指令集1602通过D0D7的8位数据端传输数据和指令。显示模式设置: (初始化)0011 1000 0x38 设置162显示,57点阵,8位数据接口;显示开关及光标设置: (初始化)0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)0000 01NS N=1(读或写一个字符后地址指针加1&光标加1),N=0(读或写一个字符后地址指针减1&光标减1),S=1且N=1(当写一个字符后,整屏显示左移)s=0当写一个字符后,整
21、屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)其他设置:01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。3.4 硬件设计3.4.1硬件设计目标系统通过温度传感器DS18B20的数据线DQ与主控芯片51单片机的P3.3相连接,DS18B20将采集到的数据送给单片机,经过单片机处理后,显示在8位数据线与单片机P0口的液晶显示器LCD上。串口经过MAX232的电平转换后R1 OUT和T1 IN接到单片机的RXD与TXD来实现与用C语言编辑的计算机软件的界面间的通信。液晶LCD的RS、RW、E分别接到单片机的P2
22、.0P2.2来实现单片机控制液晶的读写命令和数据的显示控制。3.4.2硬件功能模块划分(1)STC89C52RC单片机:实现对整个系统的控制。(2)DS18B20、LCD1602:温度传感器DS18B20的数据线DQ与主控芯片51单片机的P3.3相连接,DS18B20将采集到的数据送给单片机,经过单片机处理后,显示在8位数据线与单片机P0口的液晶LCD上。3.4.3接口和连接方式(1)液晶LCD1602的数据和指令选择控制端RS接到单片机的P2.0,读写控制接到单片节的P2.1,数据读写控制位E接到单片机的P2.2,8位数据线DB0DB7接到单片机的P0口。(2)4个按键K1K4分别接到单片机
23、的P1.0P1.3。(3)DS18B20的DQ接到单片机的P3.3.3.4.4硬件仿真电路 第四章 软件设计4.1 1602液晶显示处理部分 在本次设计系统中定义了P22口为1602液晶的使能端;P20为数据命令的选择端;P21为读,写选择端。定义了有关的函数;write_com()向1602写入命令码函数,write_date()向1602写入数据函数;display()1602显示函数;lcd_init()1602初始化;lcd_display()1602显示初始化。 具体程序如下所示; void lcd_init()/1602初始化 write_com(0x38);/两行显示,5*7点阵
24、 delayms(5);/延时5毫秒 write_com(0x01);/显示清屏 delayms(5); write_com(0x0c);/开显示,不显示光标,光标不闪烁 delayms(5); write_com(0x06);/当读或写一个字符后地址指针加一,且光标加一 delayms(5); void lcd_display()/1602显示初始化lcd_init();/1602初始化 write_com(0x80);/第一行第一个字符开始显示 display(str1);/第一行显示temperature write_com(0xc0);/第二行第一个字符开始显示 display(str
25、2);/显示空白 4.2 18B20函数处理部分在本次设计系统中P33口用来单片机与温度传感器通讯;它用到的相关函数如下;ds_init()18B20初始化 ; ds_write()向18B20中写入数据 ;ds_read()由18B20读取数据 ;ds_temp()从18B20中读取温度值 ;ds_dis()把温度值送入1602中显示。具体程序如下所示;void ds_init()/18B20初始化dq=1; delayus(4);/CPU将总线拉高 dq=0; delayus(480);/CPU将总线拉低延时480微妙 dq=1; delayus(60);/CPU将总线拉高延时60微妙 i
26、f(dq=0) delayus(240);/CPU判断是否为低电平,是的话说明温度传感器在线上void ds_write(uchar date1)/向18B20中写入数据注意写入是按从低位到高位的顺序发送数据一次只发送一位。uchar ds_read()/由18B20读取数据,读的时候也是从最低位读uint ds_temp()/从18B20中读取温度值 uchar a,b; ds_init();/初始化温度传感器 ds_write(0xcc);/忽略ROM指令 ds_write(0x44);/开始温度转换 ds_init();/初始化温度传感器 ds_write(0xcc);/忽略ROM指令
27、ds_write(0xbe);/读取温度值 a=ds_read();/读取低八位 b=ds_read();/读取高八位 tvalue=b;/ tvalue=8;/ tvalue=tvalue|a;/得到16位的温度值 if(tvalue0x0fff)/判断温度大于0 tflag=0; else tvalue=tvalue+1;/如果温度小于0,取反加一 tflag=1;/ tvalue=tvalue*(0.625);/乘以最小分辨率得到温度值 return(tvalue);/ void ds_dis()/把温度值送入1602中显示uchar flagdat; disdata0=tvalue/1
28、000+0x30;/温度百位 disdata1=tvalue%1000/100+0x30;/温度十位 disdata2=tvalue%100/10+0x30;/温度个位 disdata3=tvalue%10+0x30;/小数点后一位 if(tflag=0) flagdat=0x20;/如果温度大于0,不显示 if(tflag=1) flagdat=0x2d;/如果温度小于0显示负号 if(disdata0=0x30) disdata0=0x20;/百位为0不显示 if(disdata1=0x30) disdata1=0x20;/十位为0不显示 write_com(0xc0); write_da
29、te(flagdat);/第二行第一个显示温度正负 write_com(0xc1); write_date(disdata0);/第二行第二个显示温度百位 write_com(0xc2); write_date(disdata1);/第二行第三个显示温度十位 write_com(0xc3); write_date(disdata2);/第二行第四个显示温度个位 write_com(0xc4);/ write_date(0x2e);/第二行第五个显示小数点 write_com(0xc5);/ write_date(disdata3);/第二行第六个显示小数点后一位 void main()/主程序
30、lcd_display();/1602显示初始化 while(1)ds_temp();/从18B20中读取温度 ds_dis();/1602显示温度第五章 心得体会作为一名自动化专业的大三学生,我觉得做单片机课程设计是十分有意义而且是十分必要的。在已度过的大学时间里,我们接触的大多数是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业课理论知识运用到实践中去呢?我想此次做的课程设计就为我们提供了良好的实践平台。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要方法,是对学生实际工作能力的具体训练和考察过程随着科学
31、技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。这次单片机课程设计我们历时一个星期,从理论到实践,不仅学到了很多新的东西同时也巩固了以前所学过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,仅掌握理论知识是远远不够的,只有把所学的理论知识与实践相结合,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超
32、越自己。更重要的是,我们在这一次课程设计过程中,学会了坚持不懈,不轻言放弃。回顾起此次单片机课程设计,我们感慨颇多,最重要的是感触是:遇到一个问题时,最重要的一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。只有这样我们才能真正的学会单片机,自己的独立处理问题的能力才会得到提高。还有无论编程中遇到什么问题,都不要怨天尤人。无论自己的程序有多好,都不能骄傲。只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。所以非常感谢老师给我们这次学习的机会,使得我们小组每个人都在本次课程设计中都有了极大的提高。参考文献1 郭天祥.新概念51单片机C语音教程入门提高开发拓展攻略 M.北
33、 京 电子工业出版社 2009. 2 韩广兴.电子元器件与实用电路基础M.北京电子工业出版社2005. 3 方大千朱丽.电子控制系统装置制作入门M.北京国防出版社2006. 4 刘向举,刘丽娜. 基于单片机的智能温度测控系统的设计J. 齐齐哈尔大学学报(自然科学版). 2012(03) 5 黄文力,邓小磊. DS18B20数字温度传感器接口程序的时序J. 仪器仪表用户. 2011(06) 6 黄晓林. 一种实用型智能恒温控制系统设计J. 自动化技术与应用. 2011(11) 7 王文,王直. 基于ARM和DS18B20的温度监测系统J. 电子设计工程. 2011(20) 8 陈锡华,贾磊磊.
34、温度传感器DS18B20序列号批量搜索算法J. 单片机与嵌入式系统应用. 2011(09)附录#include#include#define uchar unsigned char#define uint unsigned intsbit lcden=P22;/1602使能sbit lcdrd=P20;/数据、命令选择端sbit lcdrw=P21;/读,写选择端sbit dq=P33;/18B20数据线uchar code str1=temperature:;uchar code str2= ;uchar data disdata5;uint tvalue;uchar tflag;void
35、delayms(uint ms)/延时毫秒 uint i,j; for(i=ms;i0;i-) for(j=100;j0;j-);void write_com(uchar com)/向1602中写入命令码 lcden=0; lcdrd=0; lcdrw=0; P0=com; delayms(1); lcden=1; delayms(1); lcden=0; void write_date(uchar date)/向1602中写入数据 lcden=0; lcdrd=1; lcdrw=0; P0=date; delayms(1); lcden=1; delayms(1); lcden=0; voi
36、d display(uchar *p)/1602显示 while(*p!=0) write_date(*p); p+; delayms(1); void lcd_init()/1602初始化 write_com(0x38); delayms(5); write_com(0x01); delayms(5); write_com(0x0c); delayms(5); write_com(0x06); delayms(5); void lcd_display()/1602显示初始化lcd_init(); write_com(0x80); display(str1); write_com(0xc0);
37、 display(str2);void delayus(uint i)/延时微妙while(i-);void ds_init()/18B20初始化dq=1; delayus(4); dq=0; delayus(480); dq=1; delayus(60); if(dq=0) delayus(240);void ds_write(uchar date1)/向18B20中写入数据 uchar i; for(i=0;i=1; uchar ds_read()/由18B20读取数据 uchar i,temp; for(i=0;i=1; if(dq=1) temp|=0x80; delayus(30);
38、 return(temp); dq=1;uint ds_temp()/从18B20中读取温度值 uchar a,b; ds_init(); ds_write(0xcc); ds_write(0x44); ds_init(); ds_write(0xcc); ds_write(0xbe); a=ds_read(); b=ds_read(); tvalue=b; tvalue=8; tvalue=tvalue|a; if(tvalue0x0fff) tflag=0; else tvalue=tvalue+1; tflag=1; tvalue=tvalue*(0.625); return(tvalu
39、e);void ds_dis()/把温度值送入1602中显示uchar flagdat; disdata0=tvalue/1000+0x30; disdata1=tvalue%1000/100+0x30; disdata2=tvalue%100/10+0x30; disdata3=tvalue%10+0x30; if(tflag=0) flagdat=0x20; if(tflag=1) flagdat=0x2d; if(disdata0=0x30) disdata0=0x20; if(disdata1=0x30) disdata1=0x20; write_com(0xc0); write_date(flagdat); write_com(0xc1); write_date(disdata0); write_com(0xc2); write_date(disdata1); write_com(0xc3); write_date(disdata2); write_com(0xc4); write_date(0x2e); write_com(0xc5); write_date(disdata3);void main()/主程序lcd_display();/1602显示初始化 while(1)ds_temp();/从18B20中读取温度 ds_dis();/1602显示温度23