ds18b2详解及程序(活动za)
温度测量DS18b02

//DS18B20的读写程序,数据脚P2.7 ////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P0口为段码输入,P34~P37为位选///***************************************************/#include "reg51.h"#include "intrins.h" //_nop_();延时函数用#define dm P0 //段码输出口#define uchar unsigned char#define uint unsigned intsbit DQ=P2^7; //温度输入口sbit w0=P2^0; //数码管4sbit w1=P2^1; //数码管3sbit w2=P2^2; //数码管2sbit w3=P2^3; //数码管1sbit beep=P1^7; //蜂鸣器和指示灯sbit set=P2^6; //温度设置切换键sbit add=P2^4; //温度加sbit dec=P2^5; //温度减int temp1=0; //显示当前温度和设置温度的标志位为0时显示当前温度uint h;uint temp;uchar r;uchar high=35,low=20;uchar sign;uchar q=0;uchar tt=0;uchar scale;//**************温度小数部分用查表法***********//uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//小数断码表uchar code table_dm[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//共阴LED段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-"uchar table_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //个位带小数点的断码表uchar data temp_data[2]={0x00,0x00}; //读出温度暂放uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用/*****************11us延时函数*************************/void delay(uint t){}void scan(){int j;for(j=0;j<4;j++){switch (j){case 0: dm=table_dm[display[0]];w0=0;delay(50);w0=1;//xiaoshucase 1: dm=table_dm1[display[1]];w1=0;delay(50);w1=1;//geweicase 2: dm=table_dm[display[2]];w2=0;delay(50);w2=1;//shiweicase 3: dm=table_dm[display[3]];w3=0;delay(50);w3=1;//baiwei// else{dm=table_dm[b3];w3=0;delay(50);w3=1;} }}}//***************DS18B20复位函数************************/ow_reset(void){char presence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;delay(50); //550 usDQ=1;delay(6); //66 uspresence=DQ; //presence=0 复位成功,继续下一步}delay(45); //延时500 uspresence=~DQ;}DQ=1; //拉高电平}/****************DS18B20写命令函数************************///向1-WIRE 总线上写1个字节void write_byte(uchar val){uchar i;{DQ=1;_nop_();_nop_(); //从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 usDQ=val&0x01; //最低位移出delay(6); //66 usval=val/2; //右移1位}DQ=1;delay(1);}/****************DS18B20读1字节函数************************/ //从总线上取1个字节uchar read_byte(void){uchar i;uchar value=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 usDQ=1;_nop_();_nop_();_nop_();_nop_(); //4 usif(DQ)value|=0x80;delay(6); //66 us}DQ=1;return(value);}/*****************读出温度函数************************/read_temp(){float t;ow_reset(); //总线复位delay(200);write_byte(0xcc); //发命令write_byte(0x44); //发转换命令ow_reset();delay(1);write_byte(0xcc); //发命令write_byte(0xbe);temp_data[0]=read_byte(); //读温度值的第字节temp_data[1]=read_byte(); //读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0]; // 两字节合成一个整型变量。
基于DS18B02的温度测量系统

基于DS18B02的温度测量系统温度传感器 2009 年 6 月 14 日摘要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术本文主要介绍了一个基于 89S51 单片机的测温系统,详细描述了利用数字温度传感器 DS18B20 开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,特别是数字温度传感器 DS18B20 的数据采集过程。
对各部分的电路也一一进行了介绍该系统可以方便的实现实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
DS18B20 与AT89C51 结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
关键词: 单片机 DS18B20 温度传感器数字温度计 AT89S52 目录1 概述....................................................... 3 1.1 课程设计的意义 (3)1.2 设计的任务和要求 ..................................... 32 系统总体方案及硬件设计 ..................................... 42.1 数字温度计设计方案论证................................ 4 2.1.1方案一 .......................................... 4 2.1.2 方案二.......................................... 4 2.2 系统总体设计.......................................... 5 2.3 系统模块.............................................. 6 2.3.1主控制器........................................ 6 2.3.2 显示电路........................................ 7 2.3.3 温................................ 83 度传感器 ...................................... 7 2.3.4 报警温度调整按键系统软件算法分析 ........................................... 9 3.1 主程序流程图.......................................... 9 3.2 读出温度子程序........................................ 9 3.3 温度转换命令子程序................................... 10 3.4 计算温度子程序 ......................................10 3.5 显示数据刷新子程序 .................................. 10 3.6 按键扫描处理子程序................................... 114 总结与体会................................................ 12查考文献.................................................... 13附 1 源程序代码 (14)1 概述1.1 课程设计的意义本次课程设计是在我们学过单片机后的一次实习,可增加我们的动手能力。
DS18B21

适应电压范围更宽,电压范围:3.0~5.5,在寄生电源方式下可由数据线供电.2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯1.3、DS18B20支持多点组网功能,多个DS18B20可并联在唯一的三线上,实现组网多点测温1.4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路 1.5、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃1.6、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温1.7、在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快1.8、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力1.9、负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2、DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的外形及管脚排列如下图1实际应用时,应根据系统的要求和总线地址译码方式来选择接口电路。
对于多功能的复杂系统可以采取译码芯片的全译码或部分译码方式连接;而对于功能较少的小系统,为了简化电路,降低成本,可采用线码方式。
本文以简单的线译码方式为例。
连接如图2所示。
在图中只画出DS12C887与CPU的连接线,其它连线视系统的功能而选定。
此处选择CPU P口的P2.5作为线译码的片选输出端接CS。
于是芯片内的秒、分、小时、星期、日、月等计时单元的地址分别是DF00H,DF02HDF04H,DF06H,DF07H,DF08H,DF09H;定时报警的秒,分、时的计数单元的地址就分别是DF01H,DF03H,DF05H;世纪年的只读寄存器单元地址为DF0AH~DF0DH2005年24根据DS12C887的读写时序要求,INTER CPU的读控制线RD(17)和写控制线WR(16)分别接DS和R/W输入端:CPU的数据口P0.0--P0.7接时钟芯片的AD0-- AD。
DS18B20原理及程序编写

DS18B20原理及程序编写(一)概述DS18B20为单总线12位(二进制)温度读数。
内部有64位唯一的ID编码。
工作电压从3.0~5.5V。
测量温度范围从-55℃~125℃。
最高±0.0625℃分辩率。
其内部结构如下图所示。
DS18B20的核心功能是直接数字温度传感器。
温度传感器可以配置成9、10、11和12位方式。
相应的精度分别为:0.5℃、0.25℃、0.125℃和0.0625℃。
默认的分辨率为12位。
DS18B20在空闲低功耗状态下加电(寄生电源工作方式)。
主机必须发出Convert T [44h]命令使其对测量温度进行A-D转换。
接下来进行采集转换,结果存于两字节高速温度寄存器并返回到空闲低功耗状态。
如果DS18B20在外部VDD供电方式下,单片机可以在发出Convert T 命令并总线为1时(总线为0表示正在转换)发出“read time slots”命令。
DS18B20芯片内部共有8字节的寄存器,其中地址编号0,1为温度寄存器,里面存储着DS18B20温度转换后的AD值,其格式如表1所示。
地址编号2,3为温度报警寄存器,里面为报警设定值,地址编号4为配置寄存器(这三个寄存器在读取之前请使用“重新调入EEPROM”命令将存储在EEPROM里的内容调出,同样,在向温度报警寄存器里写入内容后,也要使用“复制到存储器”命令48H将温度报警寄存器内的内容存入EEPROM当中,以免掉电丢失数据)。
DS18B20内部寄存器映射如下图所示。
配置寄存器的格式如表2和表3所示。
DS18B20内部寄存器映射表1 温度寄存器的格式表2 配置寄存器的格式表3 温度分辨率配置DS18B20使用单总线工作方式,其通信协议以电平的高平时间作为依据,其基本时序有复位时序,写时序、读时序。
//********************************************************************** //** 文件名:DS18B20.c//** 说明:DS18B20驱动程序文件//----------------------------------------------------------------------//** 单位://** 创建人:张雅//** 创建时间:2010-01-20//** 联系方式:QQ:276564402//** 版本:V1.0//----------------------------------------------------------------------//**********************************************************************//----------------------------------------------------------------------//** 芯片:AT89S52//** 时钟:11.0592MHz//** 其它:这个文档为18B20的驱动程序,引用了数码管的驱动。
18b20程序详解

#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit ds=P1^4; // 数据采集定义管脚code uchar table[]={ // 共阳数码管,段选0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};code uchar table2[]={ //位选0x01,0x02,0x04} ;uint temp;float f_temp;void delay(uint time) //小的延时{while(time--){_nop_();_nop_();};}void delayms(uchar time){uchar i,j;for(i=0;i<time;i++)for(j=0;j<110;j++);}void close(){P2=0xa0; //关闭蜂鸣器P0=0x80;P2=0;P2=0x80; //关闭LEDP0=0xff;P2=0;void reset() //复位函数{ds=1;delay(8); //特别注意时间,比较严格ds=0;delay(80); //特别注意时间,比较严格ds=1;delay(15); //特别注意时间,比较严格}void writebyte(uchar dat) //写函数,从低位向高位开始写{uchar i;for(i=0;i<8;i++){ds=0;ds=dat&0x01;delay(5);ds=1;dat>>=1;}}uchar readbyte() //读函数,从低位向高位开始读{uchar i,dat;for(i=0;i<8;i++){ds=0;dat>>=1;ds=1;if(ds){dat|=0x80;}delay(5); //时间延时太长时数字闪烁}return dat;}void display(uchar add,uchar dat) //显示函数P2=0xc0;P0=table2[add];P2=0;P2=0xe0;P0=table[dat];P2=0;delayms(10);}void tempchange(){reset();writebyte(0xcc); //控制指令,跳过ROM,直接向18B20发送转换命令,适用于总线上只接一个18B20writebyte(0x44); //控制指令,温度转换,结果存入内部9字节的RAM中}uint get_temp(){uchar a,b;reset();writebyte(0xcc); //控制指令,跳过ROM,直接向18B20发送转换命令,适用于总线上只接一个18B20writebyte(0xbe); //控制指令,读暂存器,读内部RAM中九字节的温度数据a=readbyte(); //先读地位b=readbyte();temp=b;temp<<=8;temp|=a; //将char类型变量为int型变量f_temp=temp*0.0625;temp=f_temp*10+0.5;f_temp+=0.05; //温度转换return temp;}void main(){reset(); //复位close(); //关闭蜂鸣器和继电器,这个可以不要while(1) //不用也可以显示,但是有时候数字闪烁{tempchange(); //开始读取温度,必须放在while中,否则变换缓慢,而且胡乱显示display(0,get_temp()/100); //在数码管上显示display(1,get_temp()%100/10+10);display(2,get_temp()%10);}}心得体会:要严格控制时间,否则读不出数据,尤其是复位时间。
多机温度检测 ds18b2

河南理工大学《单片机应用与仿真训练》设计报告多机温度检测系统设计姓名:学号:专业班级:指导老师:所在学院:2012年月日摘要本设计是以 AT89S52单片机为控制核心,利用新型一线制温度传感器DS18B20测量温度值,实现环境温度的检测和报警。
系统测温范围为0℃—100℃,测量精度为 0.25℃。
用户可以自定义报警上、下限,一旦温度超过极限值,单片机便启动声光报警。
该系统精度高、测温范围广、报警及时,可广泛应用于基于单片机的测温报警场合。
系统抗干扰性强、设计灵活方便,适合在恶劣的环境下进行温度测量。
系统硬件电路包括传感器数据采集、温度显示、模式选择、上、下限报警主电路等。
整个装置的控制核心是 AT89S52单片机。
温度传感器DS18B20采用外部电源供电,传感器输出引脚直接和单片机相连。
电路支持模式选择功能,可以选择设定报警极限值或显示当前温度值。
当被测温度越限时,报警主电路产生声光报警。
拨动开关可以对设定报警极限值进行写保护。
采用2片单片机,组成多机温度检测系统;下位单片机采集温度,通过串行通信传送至上位单片机;上位单片机用数码管显示温度大小;基本范围0℃~100℃;精度误差小于0.25℃;可以任意设定温度的上下限报警功能。
关键字:AT89S52单片机 DS18B20温度传感器数码管测温报警目录1 概述 (4)1.1 设计应用背景 (4)1.2 任务和要求 (4)1.3系统概述 (4)2 系统总体方案及硬件设计 (6)2.1 方案比较 (6)2.2总体方案 (6)2.3 AT89S52 (7)2.4时钟晶振电路 (7)2.5复位电路 (8)2.6数码管显示 (8)2.7设置温度上下限电路 (9)2.8报警电路 (10)2.9温度检测电路 (11)2.9.1数字温度传感器DS18B20 (11)2.9.2 DS18B20温度检测 (16)3 软件设计 (17)3.1 概述 (17)3.2 主程序方案 (17)3.3 DS18B20的相处理子程序 (18)3.3.1初始化子程序 (18)3.3.3读出温度子程序 (18)3.3.4温度转换子程序 (19)3.4工作流程图 (19)3.4.1 上位机工作过程 (19)3.4.2 DS18B20工作过程 (20)3.4.3 下位机接收过程 (21)3.5上位机与从机通信软件设计 (21)3.5.1 多机通信软件原理 (22)3.5.2 主机数据发送程序 (22)3.5.3 从机数据接收程序 (23)4 Proteus软件仿真 (24)4.1仿真初始 (24)4.2系统达到设定值报警 (24)5课程设计体会 (26)参考文献 (26)附录 (27)附1:源程序代码 (27)附2:系统原理图 (27)1 概述1.1 设计应用背景在现代社会,不管是在工、农业生产还是在人们的日常生活中,对温度的测量及控制都扮演着很重要的角色。
DS18B20温度传感器详细注解及驱动程序解析

DS18B20独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。
测温范围-55℃~+125℃,固有测温误差(注意,不是分辨率,这里之前是错误的)1℃。
支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
工作电源:3.0~5.5V/DC(可以数据线寄生电源)在使用中不需要任何外围元件。
测量结果以9~12位数字量方式串行传送。
如果使用51单片机的话,那么中间那个引脚必须接上4.7K~10K的上拉电阻,否则,由于高电平不能正常输入/输出,要么通电后立即显示85℃,要么用几个月后温度在85℃与正常值上乱跳。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相符合ROM 55H对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。
用于确定挂接在同一总线上DS1820 的个数和识别64 位ROM 地址。
为搜索ROM FOH操作各器件作好准备。
跳过ROM CCH 忽略64 位ROM 地址,直接向DS1820 发温度变换命令。
告警搜索ECH 执行后只有温度超过设定值上限或下限的片子才做出响应。
RAM命令启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75m温度变换44Hs)。
结果存入内部第0、1字节RAM中。
1、复位操作复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
ds8b2中英文数据手册【word版】26p

CRC的计算等式如下:
CRC = X8 + X5 + X4 + 1
单总线CRC可以由一个由移位寄存器和XOR门构成的多项式发生器来产生,见图9。这个回路包括一个移位寄存器和几个XOR门,移位寄存器的各位都被初始化为0。从ROM中的最低有效位或暂存器中的位0开始,一次一位移入寄存器。在传输了56位ROM中的数据或移入了暂存器的位7后,移位寄存器中就存储了CRC值。下一步,CRC的值必须被循环移入。此时,如果计算得到的CRC是正确的,移位寄存器将复0。
CRC发生器图9
单总线系统
单总线系统包括一个总线控制器和一个或多个从机。DS18B20总是充当从机。当只有一只从机挂在总线上时,系统被称为“单点”系统;如果由多只从机挂在总线上,系统被称为“多点”。
所有的数据和指令的传递都是从最低有效位开始通过单总线。
关于单总线系统分三个题目讨论:硬件结构、执行序列和单总线信号(信号类型
产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。当DS18B20由外部电源供电时,总线控制器在温度转换指令之后发起“读时序”(见单总线系统节),DS18B20正在温度转换中返回0,转换结束返回1。如果DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,否则将不会由返回值。寄生电源的总线要求在DS18B20供电节详细解释。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近都在学习和写单片机的程序, 今天有空又模仿温度测量显示实验写了一个与基于单总线通信的程序.数字温度传感器(参考:智能温度传感器的原理与应用)是公司生产的-,即单总线器件,具有线路简单,体积小的特点。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计。
产品的特点:()、只要求一个口即可实现通信。
()、在中的每个器件上都有独一无二的序列号。
()、实际应用中不需要外部任何元器件即可实现测温。
()、测量温度范围在-到+℃之间; 在℃范围内误差为±℃;()、数字温度计的分辨率用户可以从位到位选择。
将位的温度值转换为数字量所需进度不超过; ()、内部有温度上、下限告警设置。
引脚分布图详细引脚功能描述:、地信号。
、数据输入出引脚。
开漏单总线接口引脚。
当被用在寄生电源下,此引脚可以向器件提供电源。
漏极开路, 常太下高电平. 通常要求外接一个约Ω的上拉电阻.、可选择的引脚。
电压范围; 当工作于寄生电源时,此引脚必须接地。
存储器结构图暂存储器的头两个字节为测得温度信息的低位和高位字节;第, 字节是和的易失性拷贝, 在每次电复位时都会被刷新;第字节是配置寄存器的易失性拷贝, 同样在电复位时被刷新;第字节是前面个字节的检验值.配置寄存器的命令内容如下:和是温度值分辨率位, 按下表进行配置.默认出厂设置是, 即位.温度值分辨率配置表种分辨率对应的温度分辨率为℃, ℃, ℃, ℃(即最低一位代表的温度值)位分辨率时的两个温度字节的具体格式如下:低字节:高字节:, 如: 当分辨率为位时, 低字节为:, 高字节不变....一些温度与转换后输出的数字参照如下:由上表可看出, 当输出是负温度时, 使用补码表示, 方便计算机运算(若是用语言, 直接将结果赋值给一个变量即可).的使用方法:由于采用的是-总线协议方式,即在一根数据线实现数据的双向传输,而对单片机来说,我们必须采用软件的方法来模拟单总线的协议时序来完成对芯片的访问。
由于是在一根线上读写数据,因此,对读写的数据位有着严格的时序要求。
有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:初始化时序(()实现)、读时序(())、写时序(())。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
与单片机连接电路图:利用软件模拟的单线协议和命令:主机操作必须遵循下面的顺序. 初始化单线总线上的所有操作都是从初始化开始的. 过程如下:)请求: 主机通过拉低单线以上, 产生复位脉冲, 然后释放该线, 进入接收模式. 主机释放总线时, 会产生一个上升沿脉冲.: > () >)响应: 检测到该上升沿后, 延时, 通过拉低总线来产生应答脉冲.: () > ())接收响应: 主机接收到从机的应答脉冲后, 说明有单线器件在线. 至此, 初始化完成.:. 操作命令. 内存操作命令. 数据处理要求有严格的时序来保证数据的完整性. 在单线上, 有复位脉冲, 应答脉冲, 写, 写, 读, 读这种信号类型. 除了应答脉冲外, 其它都由主机产生. 数据位的读和写是通过读、写时隙实现的.) 写时隙: 当主机将数据线从高电平拉至低电平时, 产生写时隙.所有写时隙都必须在以上, 各写时隙间必须保证的恢复进度.写"" : 主机将数据线先拉低, 然后释放后, 将数据线拉高;写"" : 主机将拉低并至少保持以上.)读时隙: 当主机将数据线从高电平拉至低电平时, 产生读时隙. 所有读时隙最短必须持续, 各读时隙间必须保证的恢复进度.读: 主机将拉低至少,. 此时主机马上将拉高, 然后就可以延时后, 读取即可.源代码: (测量范围: 度)<>通过测试当前环境温度^;^;^;数码管的编码[]{,};数码管的编码[]{, , , , , , ,, , };延时函数( ){, ;( ; > ; ){( ; > ; );}}初始化让一段相对长进度低电平(){;;;(>) ;;;(>) ;}向读取一位数据读一位之后则会输出持续一段进度的一位数据(){;;;;;; ;;;(>) ;;}读取一字节数据(){;, ;;(; <; ){();( << ) ( >> ); };}向写入一字节数据( ){;;;( ; < ; ){;>> ;(){;; ;;; (>) ;}{;; (>) ;;; ;}}}向发送温度转换命令 (){();();();();}向发送读取数据命令 (){();();();();}获取当前温度值(){;;, ;();();();;<< ;;* ;* ;;}显示当前温度值( ){[] {, , };[] ;[] ;[] ;( ; < ; ){;(( << ) ( >> ( ))); ;;;( ){[[]];}{[[]];};;();;;;;}}(){;;(){();();( ; < ; ){();}}显示效果:进程安排图:改进代码: 扩大测量范围, 使可测量范围为: 度度, 严格按照上面的进程安排进行软件设计改进代码 <><><>通过测试当前环境温度^;^;^;;数码管的编码[]{,};数码管的编码[]{, , , , , , ,, , };延时函数( ){;(){( ; < ; );}}初始化让一段相对长进度低电平(){;;;(>) ;;;(>) ;}(){;();();;( > ) ;}向读取一位数据读一位之后则会输出持续一段进度的一位数据 (){;;;;;; ;;;(>) ;;}读取一字节数据(){;, ;;(; <; ){();( << ) ( >> );};}向写入一字节数据( ){;;;( ; < ; ){;>> ;(){;; ;;; (>) ;}{;; (>) ; ;; ;}}}向发送温度转换命令 (){();();();();();}向发送读取数据命令 (){();();();();();}获取当前温度值(){;;;, ;();();();;<< ;;;* ;* ( > ? : ); ;};显示当前温度值若先位选再段选( ){;[] {, , , , }; ();[] ;[] ;[] ;[] ;[] ;( < ){;;;;;;;;;();}( ; ; ){;;;( ){(( [] ) ( [ ] ))){;}* [[]];}{[[]];};;(, );;;();}}(){;(){();( ; < ; ){();}();}}改进后的效果图:只有一位小数两位小数, 并消除下一位对上一位的影响。