1、 目录摘要. 3一、 课程设计任务3二、 基于51系列单片机的温度控制系统设计32.1 方案设计32.1.1 方案选择3方案一:热电偶采集温度3方案二:数字温度传感器DS18B20采集温度32.1.2 方案论证32.2 基本芯片及PID算法简介42.2.1单片机STC89C5242.2.2 DS18B20基本工作原理42.2.3 PID算法5三、 系统硬件设计73.1 数码管显示模块73.2 键盘输入模块83.3 温度采集模块83.4 报警模块9四、 系统软件设计104.1 主程序流程图104.2 温度检测子程序104.3 PID计算子程序114.4 PWM子程序14五、 系统功能设计与实现1
2、45.1 测试系统特性及其传递函数145.2 实际温度显示功能的实现155.2.1 Proteus仿真图155.2.2 实物图165.3 控制温度的设定功能的实现175.3.1 Proteus仿真图175.3.2 实物图175.3.3 系统调试18六、 总结19基于51系列单片机的温度控制系统摘要:本系统是一个采用STC12C5410AD单片机编程实现两台直流电机能够同步旋转的双直流电机同步驱动控制系统。通过按键输入控制主直流电机调速、正反转,其中直流电机采用PWM脉宽调制方式调速,通过两个转速传感器的差值对系统进行反馈,实现从直流电机跟随主直流电机状态。该系统能够实时检测与显示两直流电机转速
3、,基本完成题目设计要求。关键词: STC12C5410AD单片机,直流电机,速度传感器,PWM,反馈控制。一、 课程设计任务1.1 直流电机直流电机功率不大于20W;直流电机额定电驱电压为DC12V;直流电机额定转速为300rpm。1.2 设计要求及实现功能1、 设计直流电动机控制电路;2、 设计直流电动机调速控制电路,要求采用PWM脉宽调制方式调速,PWM 脉冲宽度调制的频率为10-40KHZ,PWM脉冲宽度调制的占空比为5%-95%。3、 实现两台直流电动机同步旋转,且误差小于3%。4、 实现正反转。5、 速度检测与显示。二、 基于51系列单片机的温度控制系统设计2.1 方案设计2.1.1
4、 方案选择方案一:热电偶采集温度热电偶利用热电势原理进行温度测量的。其测量精度高、测量范围广。常用的热电偶从-50+1600均可正常测量,某些特殊热电偶最低可测到-269(如金铁镍铬),最高可达+2800(如钨-铼)。但热电偶测量需要温度补偿。而且输出量为电压,需要经过测量放大器、AD转换后才能送入微处理器处理。方案二:数字温度传感器DS18B20采集温度DS18B20采用独特的单线接口方式,与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。在使用中不需要任何外围元件,测温范围 55125,最小分辨率达0.0625。2.1.2 方案论证经过比较,因为采用DS18B20测
5、量温度,硬件电路简单,测量精度高,信号易处理,故采用方案二,即温度变送器选用DS18B20。基于51系列单片机的温度控制系统电路总体设计方框图如图2-1所示,STC89C52时钟电路按键输入数码管显示报警电路温度检测温度传感器温度控制温度控制仪图2-1 数字式温度控制仪总体设计框图2.2 基本芯片及PID算法简介2.2.1单片机STC89C52STC89C52的结构如图2.1所示。由于它的广泛使用使得市面价格较8155、8255、8279要低,所以说用它是很经济的。该芯片具有如下功能:有1个专用的键盘/显示接口;有1个全双工异步串行通信接口;有2个16位定时/计数器。这样,1个89C52,承担
6、了3个专用接口芯片的工作,不仅使成本大大下降,而且优化了硬件结构和软件设计,给用户带来许多方便。STC89C52有40个引脚,有32个输入端口(I/O),有2个读写口线,可以反复插除。所以可以降低成本。其主要功能特性有: 兼容MCS51指令系统 32个双向I/O口线 3个16位可编程定时/计数器中断 2个串行中断口 2个外部中断源 2个读写中断口线 低功耗空闲和掉电模式 8k可反复擦写(1000次)Flash ROM 256x8 bit内部RAM 时钟频率0-24MHz 可编程UART串行通道 共6个中断源 3级加密位图2-2 STC89C52引脚图 软件设置睡眠和唤醒功能。2.2.2 DS1
7、8B20基本工作原理 DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。DS18B20的测温原理:器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先
8、将55所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器和温度寄存器被预置在55所对应的一个基数值。表2-1 部分温度对应值表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00000191H+10.1250000 0000 1010 000100A2H+0.50000 0000 0000 00100008H00000 0000 0000 10000000H-0.51111 1111 1111 0000FFF8H-10.1251111 1111 010
9、1 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作
10、协议为:初使化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。2.2.3 PID算法2.2.3.1 PID调节器控制原理在控制系统中,控制器最常用的控制规律是PID控制。PID控制系统原理框图如图2-3所示。系统由PID控制器和被控对象组成。图2-3 PID控制系统原理框图PID控制器是一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制偏差:Error(t)=rin(t)-yout(t)PID控制就是对偏差信号进行比例、积分、微分运算后,形成一种控制规律。即,控制器的输出为: 或写成传递函数的形式: 其中, kp比例系数;Ti积分时间常数;T d微
11、分时间常数。简单说来,PID控制器各校正环节的作用如下:比例环节:成比例地反映控制系统的偏差信号error(t),偏差一旦产生,控制器立即产生控制作用,以减小偏差。积分环节:主要用于消除静差,提高系统的无差度。积分作用的强尽弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之则越强。微分环节:反偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。2.2.3.2 数字PID参数的整定 PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID
12、控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。本设计采用PID归一整定法把对控制台三个参数(Kc、Ti、Td,)转换为一个参数, 从而使问题明显简化。以达到控制器的特性与被控过程的特性相匹配,满足某种反映控制系统质量的性能指标。2.2.3.3采样周期选择的原则(1)根据香农采样定理,系统采样频率的下限为fs=2fmax,此时系统可真实地恢
13、复到原来的连续信号。 (2)从执行机构的特性要求来看,有时需要输出信号保持一定的宽度。采样周期必须大于这一时间。(3)从控制系统的随动和抗干扰的性能来看,要求采样周期短些。 (4)从微机的工作量和每个调节回路的计算来看,一般要求采样周期大些。 (5)从计算机的精度看,过短的采样周期是不合适的。 (6)当系统滞后占主导地位时,应使滞后时间为采样周期的整数倍下表2-2列出了几种常见的被测参数的采样周期T的经验选择数据。可供设计时参考。实际上生产过程千差万别,经验数据不一定就合适,可用试探法逐步调试确定。表2-2 采样周期的经验数据表被测参数采用周期T(s)备注流量15s优先选用1s压力310s优先
14、选用5s液位68s温度1520s或纯滞后时间成分1520s2.2.3.4 PID参数对系统性能的影响表2-3 PID参数对系统性能的影响参数图作用缺点P加快调节,减少稳态误差稳定性下降,甚至造成系统的不稳定I因为有误差,积分调节就进行,直至无差.消除稳态误差,提高无差度。加入积分调节可使系统稳定性下降,动态响应变慢。积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。D反映系统偏差信号变化率,具有预见性,能预见偏差变化的趋势,因此能产生超前的控制作用。可以减少超调,减少调节时间。微分作用对噪声干扰有放大作用,因此过强的加微分调节,对系统抗干扰不利。微分作用不能单独使用,需要与另外两种
15、调节规蓄料目结合,组成PD或PID控制. 三、 系统硬件设计3.1 数码管显示模块八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。共阳极就是将八个LED的阳极连在一起,让其接地,这样给任何一个LED的另一端低电平,它便能点亮,相应的段被显示出来。数码管的显示有静态显示和动态扫描显示两种方法。所谓静态显示,就是当数码管显示某一字符时,相应的发光二级管恒定的导通或截止。数码管的每一个段码都可以由一个单片机的I/O口进行驱动。静态显示的优点是编程简单,显示亮度高,但缺点是占用I/O口多,容易造成I/O接口的浪费,不易控制成本。所谓动态扫描显示就是通过分时轮流
16、控制各个LED数码管的DPY端,使各个数码管轮流受控显示。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O口,而且功耗更低。本系统采用6个共阳极8段数码管对采集到的温度值以及键盘输入的目标值进行显示,接口电路如图2-1所示。该系统采用动态扫描显示方法,虽然这种方法占用CPU资源较多,但是6个数码管共占用8个I/O接口,不存在I/O接口浪费的情况,可以有效的降低成本,故采用此种方法。图3-1
17、 数码管接线电路3.2 键盘输入模块此模块采用4个按键,以满足通过键盘输入目标温度设定值的任务要求,接口电路如图2-2所示。图3-2 键盘输入模块3.3 温度采集模块温度采集模块采用DS18B20这款温度传感器,其与单片机连接如图2-3所示。图3-3 温度传感器DS18B20接口电路根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发
18、出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。3.4 报警模块报警采用蜂鸣器元件,当实际温度高于目标温度时,报警功能实现,电路连接图如3-4.图3-4 蜂鸣器连接图四、 系统软件设计4.1 主程序流程图 是系统初始化设定目标温度显示实际温度开始不加热实际温度大于目标温度?PID控制输出PWM调节加热否图4-1 主程序流程图4.2 温度检测子程序DS18B20外接电路极为简单,电路连接没有太大问题;但软件编程就需要严格要求时序进行读写操作。(1) DS18B20的初始化: 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都
19、要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。(1) 先将数据线DQ置高电平“1”。 (2) 延时(该时间要求的不是很严格,但是尽可能的短一点) (3) 数据线拉到低电平“0”。 (4) 延时750微秒(该时间的时间范围可以从480到960微秒)。 (5) 数据线拉到高电平“1”。 (6) 延时等待(如果初始化成功则在15到60微妙时间之内产生一个由DS18
20、B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。 (7) 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。 (8) 将数据线再次拉高到高电平“1”后结束。(2) DS18B20的写操作:(1) 数据线先置低电平“0”。 (2) 延时确定的时间为15微秒。 (3) 按从低位到高位的顺序发送字节(一次只发送一位)。 (4) 延时时间为45微秒。 (5) 将数据线拉到高电平。 (6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止。
21、(7) 最后将数据线拉高。(3)DS18B20的读操作:(1)将数据线拉高“1”。 (2)延时2微秒。 (3)将数据线拉低“0”。 (4)延时3微秒。 (5)将数据线拉高“1”。 (6)延时5微秒。 (7)读数据线的状态得到1个状态位,并进行数据处理。 (8)延时60微秒。4.3 PID计算子程序 PID调节规律的基本输入输出关系可用微分方程表示为: 式中为调节器的输入误差信号,且 其中:为给定值,为被控变量; 为调节器的输出控制信号; 为比例系数; 为积分时间常数; 微分时间常数。计算机只能处理数字信号,若采样周期为T第n次采样的输入误差为,且,输出为,PID算法用的微分由差分代替,积分由代
22、替,于是得到 写成递推形式为 = = = = 其中: 显然,PID计算只需要保留现时刻以及以前的两个偏差量和。初始化程序初值通过采样并根据参数、以及、和计算。 根据输出控制增量,可求出本次控制输出为 += 由于温度控制仪一般是属于一阶对象和滞后的一阶对象,所以式中、的选择取决于温度测量控制仪的阶跃响应曲线和实际经验,工程上已经积累了不少行之的参数整定方法。本设计采用Ziegler-Nichols提出的 PID归一调整法,调整参数,主要是为了减少在线整定参数的数目,常常人为假定约束条件,以减少独立变量的个数,令: 式中称为临界周期。在单纯比例作用下(比例增益由小到大),是系统产生等幅振荡的比例增
23、益,这时的工作周期为临界周期,则可以得到 = = 式中=0.2,=1.25 从而可以调节的参数只有一个。可设计一个调整子程序,通过键盘输入改变值,改变运行参数,使系统满足要求。流程图如图4-2所示,图4-2 PID运算流程图4.4 PWM子程序 脉冲宽度调制()是一种模拟控制方式,其根据相应载荷的变化来调制晶体管栅极或基极的偏置,来实现开关稳压电源输出晶 体管或晶体管导通时间的改变,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可
24、将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。用PWM波输入固态继电器的输入端,从而改变电炉加热丝内的电流通断时间。本设计中,PWM由单片机定时器中断产生,与主程序和其他函数不影响。脉宽受PID控制器的输出量控制。五、 系统功能设计与实现5.1 测试系统特性及其传递函数要设计一个控制系统,首先要建立控制系统的数学模型,在建立控制系统数学模型的过程中,最主要是确定被控对象的数学模型。目前用来测定对象动态特性的实验方法主要有三种,即时域方法、频域方法和统计研究方法。在本设计中采用实验测定法中的时域测定法,即被测温度在输入端加阶跃输入信
25、号,而在输出端测绘其输出量随时间变化的响应曲线,再对响应曲线的结果进行分析,确定被研究对象的传递函数。温度测量控制仪是一个非线性和时变对象,且具有明显的阻尼特征,经查阅资料,对于被控对象SET-300型温度测量控制仪,可以得到它的传递函数可表示为其中,T表示对象惯性时间常数,K表示对象放大系数,为纯滞后时间。要求出其传递函数的参数K、T和,常用两种方法,切线法和两点法。1) 测量数据并描点每隔10s采集一次温度,测量部分数据如下(单位:):33.7 34.25 34.94 35.82 37.00 37.75 38.75 39.84 41.06 42.32 43.45 44.68 46.00 4
26、7.14 48.50 51.00 52.20 53.56 54.75 56.1357.26 58.25 59.00 59.66 60.06 60.38 2) 用MATLAB模拟曲线,绘制如下图5-1 控制仪温度曲线3) 根据曲线采用两点法得出传递函数在y(t)上选取两个坐标值和,只要0,三个数值之间有明显差异即可。利用公式 解得 所求传递函数为 5.2 实际温度显示功能的实现5.2.1 Proteus仿真图实际温度36度,高于目标温度25度,报警提示,自由降温处理。图 5-2 实际温度高于目标温度5.2.2 实物图实际温度24.5度,低于目标温度40度,加热指示灯亮,加热处理。图5-3 实际温
27、度低于目标温度5.3 控制温度的设定功能的实现5.3.1 Proteus仿真图设定目标温度为85度。图5-4 设定目标温度仿真图5.3.2 实物图设定目标温度为34度。图5-5 设定目标温度5.3.3 系统调试根据香农采样定律,系统调试时的PWM波周期定为100毫秒,采样周期定为500毫秒。当系统的期望设定温度为95时,取Kp=3,Ki=0.0001时,得到如图5-6中的第一次实验曲线,其中响应时间为18分钟,且稳态偏差较大;适当增大Kp,保持Ki不变,发现系统响应时间增快,稳态偏差仍较大。将Kp保持不变,增大Ki,当Ki=0.0015时,温度控制的超调量小于5%,调节时间小于30s,稳态偏差
28、达到系统设计的要求。取Kp=4,Ki=0.0015,设定温度为50时,得到如图5-7所示的曲线。温度/理想曲线时间第一次实验曲线最终曲线图5-6 目标温度为95的调试曲线温度/时间理想曲线实测曲线图5-7 目标温度为50的调试曲线 当第一次测试时,由于参数不准,所以出现了误差较大,达不到系统指标。而经过不断调整参数,系统达到了预期的控制效果。当参数调好后,重新设置输入温度。可以看出在t1以前系统全速加热,但由于自然散热,曲线并不是直线。而温度上升到48时上升斜率减小,到相差0.5时更小。综上所述,该系统在动态性能指标上完全达到了设计任务的要求。六、 总结本系统采用STC12C5410AD单片机
29、编程实现两台直流电机能够同步旋转的双直流电机同步驱动控制系统。通过按键输入控制主直流电机调速、正反转,其中直流电机采用PWM脉宽调制方式调速,通过两个转速传感器的差值对系统进行反馈,实现从直流电机跟随主直流电机状态。在整个课程设计的过程中,需要注意以下几个问题:(1)切实掌握和理解STC12C5410AD单片机的主要特点和性能参数,明确其工作原理;(2)采用独立键盘,简单且方便实际操作。(3)理解掌握PID算法是解决本问题的关键。这次计算机控制课程设计中,我和队友几乎每天都到实验室讨论关于温度控制系统的开展和实施工作。明确各自任务后,我们各自便进入了紧张的工作中。其中,我主要负责仿真图形的绘制
30、,软件编程和论文写作工作。由于基础知识不够扎实,我只能查阅大量资料,通过从图书馆借书,网上查阅等各种途径学习相关知识。在此课程设计期间,我锻炼了自己独立思考研究的能力,认识到了团队合作的重要性,同时强化了自己相关专业知识的理解和使用。在今后的学习中,我要加强自己专业知识的学习,多动手参加一些课外实践活动或比赛,锻炼自己的实际操作与动手能力,将自己所学的知识运用到实践当中,不能纸上谈兵。总之,这次课程设计让我了解到了自己的不足之处,在以后的学习过程中,我会扬长避短,再接再厉,认真学习专业知识,为后续学习打下坚实的基础。参考文献1 张毅刚, MCS-51单片机原理及应用M. 哈尔滨,哈尔滨工业大学
31、出版社,2004.6. 2 刘文涛, MCS-51单片机培训教程. 北京:电子工业出版社,1996.3 张洪润,易涛编著,单片机应用技术教程(第二版). 北京:清华大学出版社,2003.4 李华等, MCS-51系列单片机实用接口技术. 北京:北京航空航天大学出版社,1993.5 周润景,单片机电路设计、分析与制作. 北京:机械工业出版社,2010.6 谭浩强, C程序设计M.北京:清华大学出版社,1999,12.7 曹巧媛,单片机原理及应用. 北京:电子工业出版社,2002. 2.8 胡汉才,单片机原理及其接口技术. 北京:清华大学出版社,2010.9 蔡明生, 电子设计M. 北京:高等教育
32、出版社,2004.12.10 李群芳,单片微型计算机接口技术及应用.北京:电子工业出版社,2005.1.11 石宗义,电路原理图与电路板设计教程Protel 99SE.北京:北京希望电子出版社,2002.6.附件附件1 C程序/程序功能:通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值#include reg52.h#include#include /要用到取绝对值函数abs()#define uchar unsigned char #define uint unsigned intsbit we=P27;/数码管位选sbit du=P26; /数码管段选sbit dio=P2
33、5;sbit ds=P22;sbit pwm=P30; /PWM输出sbit beep=P23;sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;int tempValue1;uint uk,kp; /*比例系数*/;float ki,kd ; /*积分系数,微分系数*/unsigned int temp;bit startend;bit leftright;uchar code th0=(65535-3000)/256;uchar code tl0=(65535-3000)%256;uchar dispbuf6;uchar cod
34、e disptab=0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x0;uchar code disptabwithdot=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0xa7,0xff,0xef,0xf7,0xfc,0xb9,0xf9,0xf1;uchar code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;uchar ge,shi;/延时函数, 对于11.0592MHz时钟, 例i=10,则大概延时10ms. void
35、 delay(unsigned int i) unsigned int j; while(i-) for(j = 0; j 0) i-; ds = 1; /产生一个上升沿, 进入等待应答状态 i = 4; while(i0) i-; void dsWait() unsigned int i; while(ds); while(ds); /检测到应答脉冲 i = 4; while(i 0) i-;/向DS18B20读取一位数据/读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,/之后DS18B20则会输出持续一段时间的一位数据bit readBit() unsigned int i
36、; bit b; ds = 0; i+; /延时约8us, 符合协议要求至少保持1us ds = 1; i+; i+; /延时约16us, 符合协议要求的至少延时15us以上 b = ds; i = 8; while(i0) i-; /延时约64us, 符合读时隙不低于60us要求 return b;/读取一字节数据, 通过调用readBit()来实现unsigned char readByte() unsigned int i; unsigned char j, dat; dat = 0; for(i=0; i8; i+) j = readBit(); /最先读出的是最低位数据 dat =
37、(j 1); return dat;/向DS18B20写入一字节数据void writeByte(unsigned char dat) unsigned int i; unsigned char j; bit b; for(j = 0; j = 1; /写1, 将DQ拉低15us后, 在15us60us内将DQ拉高, 即完成写1 if(b) ds = 0; i+; i+; /拉低约16us, 符号要求1560us内 ds = 1; i = 8; while(i0) i-; /延时约64us, 符合写时隙不低于60us要求 else /写0, 将DQ拉低60us120us ds = 0; i =
38、 8; while(i0) i-; /拉低约64us, 符号要求 ds = 1; i+; i+; /整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了 /向DS18B20发送温度转换命令void sendChangeCmd() dsInit(); /初始化DS18B20, 无论什么命令, 首先都要发起初始化 dsWait(); /等待DS18B20应答 delay(1); /延时1ms, 因为DS18B20会拉低DQ 60240us作为应答信号 writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0x44); /写入温度转换
39、命令字 Convert T/向DS18B20发送读取数据命令void sendReadCmd()EA=0;/关闭中断是因为进入显示中断会影响到DS18B20的读写时序 dsInit(); dsWait(); delay(1); writeByte(0xcc); /写入跳过序列号命令字 Skip Rom writeByte(0xbe); /写入读取数据令字 Read ScratchpadEA=1;/获取当前温度值uchar panduan(float w) uchar l;float b;b=shi*10+ge;if(bw)l=1;else l=0;return l;int getTmpValu
40、e() unsigned int tmpvalue; int value; /存放温度数值 float t; unsigned char low, high;EA=0; sendReadCmd(); /连续读取两个字节数据 low = readByte(); high = readByte(); /将高低两个字节合成一个整形变量 /计算机中对于负数是利用补码来表示的 /若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value tmpvalue = high; tmpvalue = 8; tmpvalue |= low; value = tmpvalue; /使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度 t = value * 0.0625; /将它放大100倍, 使显示时可显示小数点后两位