基于单片机的恒温控制系统_第1页
基于单片机的恒温控制系统_第2页
基于单片机的恒温控制系统_第3页
基于单片机的恒温控制系统_第4页
基于单片机的恒温控制系统_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

年4月19日基于单片机的恒温控制系统文档仅供参考摘要:随着微机测量和控制技术的迅速发展与广泛应用,以单片机为核心的温度采集与控制系统的研发与应用在很大程度上提高了生产生活中对温度的控制水平。温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械等工业中,具有举足重轻的作用,因此,温度控制系统是典型的控制系统。本文介绍了基于单片机AT89C51的温度控制系统的设计方案与软硬件实现,论述了一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器的温度自动控制系统。该控制系统能够根据设定的温度,经过PID算法调节和控制pwm波的输出,控制晶闸管导通时间从而控制水温的自动调节,系统设计了相关的硬件电路和相关应用程序。硬件电路主要包括STC89C52单片机最小系统,DS18b20测温电路、键盘电路.LCD液晶显示电路,加热功率电路等。系统程序主要包括主程序,温度处理子程序、按键处理程序、LCD显示程序等,pwm波输出程序。给出了系统总体框架、程序流程图和Proteus仿真结果,并在硬件平台上实现了所设计的功能。关[关键词]单片机;温度控制系统;温度传感器;PID控制算法。目录1.选题背景22.设计要求22.1设计任务22.2设计要求23.方案论证比33.1温度检测电路方案选择33.2显示电路方案选择33.3加热方案选择33.4控制方法方案选择34.总体方案及工作原理45.系统硬件设计45.1温度传感器电路单元55.2输入电压单元65.3液晶显示单元65.4温度上下限模块单元75.5主控制单元设计76.系统软件设计96.1PID控制程序算法96.2PWM脉宽调制技术126.3控制系统程序137.设计结论及总结19参考文献资料211.选题背景对于不同场所、不同工艺、所需温度高低范围不同、精度不同,则采用的测温元件、测温方法以及对温度的控制方法也将不同;产品工艺不同、控制温度的精度不同、时效不同,则对数据采集的精度和采用的控制算法也不同,因而,对温度的测控方法多种多样。技术和微型计算机的迅速发展,微机测量和控制技术也得到了迅速的发展和广泛的应用。利用微机对温度进行测控的技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。当前,单片微机已普遍地作用于生产过程的自动控制领域中。单片机以其体积小、价格低廉、可用其构成计算机控制系统中的智能控制单元和可靠性高等特点,受到广大工程技术人员的重视。温度是生产过程中最常见的物理量,许多生产过程是以温度作为其被控参数的。因此,温度控制系统是典型的控制系统2.课题设计要求:2.1设计任务设计并制作一个水温自动控制系统,控制对象为300W或400W电阻炉,容器为薄壁不锈钢能够加温的器皿。2.2设计要求2.2.1基本要求(1)调温功能,水温能够在0~100℃范围内由人工设定,人工设定温度后系统自动控制加热或降温,最小区分度为0.1℃,所测温度和实际温度偏差≤1℃。(2)恒温功能,在环境温度变化时(例如用电风扇降温,电压波动)实现自动控制,以保持容器内根据设定的温度保持基本不变。(3)用LCD或LED显示:水的设定温度、实际温度、工作时间等参数信息。2.2.2发挥部分(1)采用适当的控制方法,当设定温度突变(由70℃提高到90℃)时,减小系统的调节时间和超调量。(2)采用适当的控制方法,当突加凉水扰动时,减小系统的调节时间和超调量。(3)温度控制的静态误差≤0.5℃。3.方案论证比较3.1温度检测电路的方案选择:方案一:用普通半导体温度传感器作为敏感元件,再结合电压放大器和AD转换器将感应到的温度数值转换为数字量存储在某一单元内。但由于该方案所需元件较多,且电路较繁,调试起来较复杂,因此舍之不用。方案二:使用数字温度传感器DS18B20检测温度,内含AD转换器,因此线路连接十分简单,它无需其它外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单,它能够达到0.5℃的固有分辨率,使用读取温度暂存寄存器的方法还能达到0.2℃以上精度,应用方便,这样的电路主要工作量就集中到了单片机软件编程上,故我们选用该方案。3.2显示电路的方案选择:方案一:使用数码管显示,经过数码管显示被测温度和设定温度。该方案程序简单,但硬件占用单片机I/O口较多,对于尽量节约端口,让线路简单来说不是好方法,而且显示也不够直观灵活,只能显示数字,不能显示汉字显示功能提示,故不适合本次设计应用。方案二:使用液晶屏lcd12864,能够显示字母,数字及汉字,而且一次能够显示4行,显示很直观,经过字幕显示模式、温度、曲线。该方案程序较复杂,而且lcd12864的价格昂贵,对于节约成本的角度来说,我们选择放弃选择方案二。方案三:使用液晶屏1602显示,能够显示设定温度及测量温度,但显示时1602能显示两行能显示字符及数字,不能显示汉字及曲线,完全满足本次设计的要求,而且成本低廉,设计简单可靠,故选择方案三。3.3加热方案的选择: 方案一:使用电热炉进行加热,控制电炉的功率即可控制加热速度,当水温过高时,关掉电炉即可,但考虑到电炉成本较高,且精度不好控制,故不选用。方案二:固态继电器控制加热器工作,固态继电器使用非常简单,而且没有触点,无需外加光耦,自身就能够实现电气隔离,还能够频繁动作。能够使用类似pwm的方式,经过控制固态继电器的开,断时间比来达到控制加热器功率的目的,适合功率不大精度不高,简易水温控制系统。方式三:是使用可控硅控制加热器的工作。可控硅是一种半控器件,经过控制导通角的方式来控制,对每个周期的交流电进行控制,因为导通角连续可调,故控制精度较高,且元件便宜,易于制作,我们选择方案三。3.4控制方法选择方案:方案一:采用普通的控制方法,即随着水温的变化调节温度,但局限性太小,由于水温变化快,且惯性大,不易控制精度,故采用普通控制方法显得力不从心。方案二:采用PWM控制加PID算法,经过采用PWM能够产生一个PWM波形,而PWM波形的占空比是经过PID算法调节,这样就能够调节加热棒的功率进而控制温度的变化,从而使精度提高,我们选择方案二。4.总体方案及工作原理温度传感器DS18B20从设备环境的不同位置采集温度,单片机AT89S51获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,经过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,,当采集的温度经处理后低于设定温度的下时,单片机经过控制晶闸管开启升温设备(加热器)。系统总体的原理框图如下;PC机PC机MAX232电平转换芯片MAX232电平转换芯片键盘电路键盘电路AT89S518BITCPU数据显示AT89S518BITCPU数据显示DS18B20温度芯片数据传输DS18B20温度芯片数据传输输入电源输入电源加热器双向可控硅加热器双向可控硅系统工作原理框图5.系统硬件设计对题目进行深入的分析和思考,能够将整个系统硬件总体分为以下几个方面:5.1温度传感器电路单元测温电路是使用DS18b20数字式温度传感器,它无需其它的外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单。它能够达到0.5的固有分辨率,使用读取温度的暂存寄存器的方法还能达到0.2以上的精度。DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ,外供电源线VDD,共用地线GND。外部供电方式(VDD接+5V,且数据传输总线接4.7k的上拉电阻。综上,在本系统中我采用温度芯片DS18B20测量温度。该芯片的物理化学性很稳定,它能用做工业测温元件,且此元件线形较好。在0—100摄氏度时,最大线形偏差小于1摄氏度。该芯片直接向单片机传输数字信号,便于单片机处理及控制。DS18B20接口电路DS18B20实物图5.2输入电压单元控制系统主控制部分电源需要用5V直流电源供电,其电路所示,把频率为50Hz、有效值为220V的单相交流电压转换为幅值稳定的5V直流电压。其主要原理是把单相交流电经过电源变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,因此需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需经过低通滤波电路滤波,使输出电压平滑。稳压电路的功能是使输出直流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流电压。本电路使用集成稳压芯片7805解决了电源稳压问题。5.3液晶显示单元LCM1602是2行×16个字符的字符型LCD显示器,它由32个字符点阵块组成,每个字符点阵块由5×7或5×10个点阵组成,能够显示ASCII码表中的所有可视的字符。它内置了字符产生器ROM(CharacterGeneratorROM,CGROM)、字符产生器RAM(CharacterGeneratorRAM,CGRAM)和显示数据RAM(DataDisplayRAM,DDRAM)。CGROM中内置了192个常见字符的字模,CGRAM包含8个字节的RAM,可存放用户自定义的字符,DDRAM就是用来寄存待显示的字符代码。P3.0、P3.1、P3.2接LCD1602的三个控制引脚,P4口作为LCD1602的数据接口。经过对控制引脚的控制,从而实现温度显示的功能。5.4温度上下限键盘设置模块温度上下限设置模块包括四个按键:(1)模式切换键:进行模式之间的切换,模式包括设置温度上限模式、设置温度下限模式,每次按下该键就在这两种模式之间切换。(2)温度上下限增加键:增加温度上下限的值。(3)温度上下限减少键:减少温度上下限的值。(4)温控开关键:是温控与非温控之间的切换键。它用于设置是否进行温度控制即是否让越界的温度值触发加热器的启动5.5主控制单元设计:AT89S51是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可重复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51具有如下特点:40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。另外,AT89S51设计和配置了振荡频率可为0Hz并可经过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。由于系统控制方案简单,数据量也不大,考虑到电路的简单和成本等因素,因此在本设计中选用ATMEL公司的AT89S51单片机作为主控芯片。主控模块采用单片机最小系统是由于AT89S51芯片内含有4kB的E2PROM,无需外扩存储器,电路简单可靠,其时钟频率为0~24MHz,而且价格低廉,批量价在10元以内。其主要功能特性:兼容MCS-51指令系统4k可重复擦写(>1000次)ISPFlashROM32个双向I/O口4.5-5.5V工作电压2个16位可编程定时/计数器时钟频率0-33MHz全双工UART串行中断口线128x8bit内部RAM2个外部中断源低功耗空闲和省电模式中断唤醒省电模式3级加密位看门狗(WDT)电路软件设置空闲和省电功能灵活的ISP字节和分页编程双数据寄存器指针能够看出AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟。同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式何在RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直接到一个硬件复位。AT89S51单片机引脚图6.系统软件设计6.1PID控制程序算法6.1.1PID算法简介PID控制算法是控制理论中应用很广泛的一种算法,对于一般控制系统来说,PID算法从某种意义来说具有通用性,对各种系统具有广泛的适用性,经过现场的参数调试,能够达到很好的控制效果。对于我们这次水温控制系统的设计,我们同样也能够使用PID控制算法,具体算法如下:e(i)=t测-t设E=(2)算法中,u(i)为当时的功率输出。T为采样时间,E为误差积累,KP为比例常数,Ti为积分常数,Td为微分常数。根据实际系统,调节这三个常数,能够达到很好的效果。大多数的温度控制系统能够看作一阶纯滞后环节,由于本系统纯滞后时间较小,故可采用PID(比例、积分、微分)控制算法实施控制。6.1.2PID控制作用PID是比例(P)、积分(I)和微分(D)3个控制作用的组合。连续系统PID控制器的微分方程为:y(t)=KPP[e(t)+](4-1)式中y(t)为控制器的输出;e(t)为控制器的输入;KP比例放大系数;TI为控制器的积分时间常数;TD为控制器的微分时间常数。显然,KP越大,控制器的控制作用越强;只要e(t)不为0,积分项会因积分而使控制器的输出变化;只要e(t)有变化的趋势,控制器就会在微分作用下,在偏差出现且偏差不大时提前给输出一个较强的控制作用。6.1.3PID算法的微机实现由于微机控制系统是一种时间离散控制系统,故必须把微分方程离散化为差分方程,最终写出递推公式才能直接应用。显然:(4-2)(4-3)于是,KP{e(n)+EQ+[e(n)-e(n-1)]}(4-4)式中Δt=T,为采样周期;e(t)为第n次采样的偏差值;e(n-1)为第(n-1)次采样时的偏差值;n为采样序列,n=0,1,2,…。由式(4-4)能够看出:计算一次Y(n),不但需要的存储器空间大,而且计算量也很大,于是进一步写出递推公式:由Y(n-1)=KP{e(n-1)++[e(n-1)-e(n-2)]}(4-5)由式(4)减去式(5)得:ΔY(n)=Y(n)-Y(n-1)=KP{[e(n)-e(n-1)]+[e(n)-2e(n-1)+e(n-2)]}=KP[e(n)-e(n-1)]+KIe(n)+KD[e(n)-2e(n-1)+e(n-2)](4-6)或Y(n)=Y(n-1)+KP[e(n)-e(n-1)]+KIe(n)+KD[e(n)-2e(n-1)+e(n-2)](4-7)式中KI=KP,称为积分常数;KD=KP,称为微分常数。6.1.4数字PID控制的参数选择一、数字PID参数的原则要求和整定方法1、原则要求:被控过程是稳定的,能迅速和准确地跟踪给定值的变化,超调量小,在不同干下系统输出应能保持在给定值,操作变量不宜过大,在系统与环境参数发生变化控制应保持稳定。显然,要同时满足上述各项要求是困难的,必须根据具体过程的要求,满足主要方面,并兼顾其它方面。2、PID参数整定方法:理论计算法――依赖被控对象准确的数学模型(一般较难做到)工程整定法――不依赖被控对象准确的数学模型,直接在控制系统中进行现场整定(简单易行)二、常见的简易工程整定法1、扩充临界比例度法――适用于有自平衡特性的被控对象整定数字调节器参数的步骤是:(1)选择采样周期为被控对象纯滞后时间的十分之一以下。(2)去掉积分作用和微分作用,逐渐增大比例度系数直至系统对阶跃输入的响应达到临界振荡状态(稳定边缘),记下此时的临界比例系数及系统的临界振荡周期。(3)选择控制度。一般,当控制度为1.05时。就能够认为DDC与模拟控制效果相当。(4)根据选定的控制度,查表5-3-2求得T、KP、TI、TD的值。2、扩充响应曲线法――适用于多容量自平衡系统参数整定步骤如下:(1)让系统处于手动操作状态,将被调量调节到给定值附近,并使之稳定下来,然后突然改变给定值,给对象一个阶跃输入信号。(2)用记录仪表记录被调量在阶跃输入下的整个变化过程曲线,如图所示。(3)在曲线最大斜率处作切线,求得滞后时间τ,被控对象时间常数Tτ以及它们的比值Tτ/τ。(4)由求得的τ、Tτ及Tτ/τ查表5-3-3,即可求得数字调节器的有关参数KP、TI、TD及采样周期T。3、归一参数整定法令,,。则增量型PID控制的公式简化为改变KP,观察控制效果,直到满意为止。5.4数字PID控制的工程实现6.2PWM脉宽调制技术脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件的通断进行控制,使输出端得到一系列幅值相等的脉冲,用这些脉冲来代替正弦波或所需要的波形。也就是在输出波形的半个周期中产生多个脉冲,使各脉冲的等值电压为正弦波形,所获得的输出平滑且低次谐波少。按一定的规则对各脉冲的宽度进行调制,即可改变逆变电路输出电压的大小,也可改变输出频率。例如,把正弦半波波形分成N等份,就可把正弦半波看成由N个彼此相连的脉冲所组成的波形。这些脉冲宽度相等,都等于∏/n,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲的幅值按正弦规律变化。如果把上述脉冲序列用同样数量的等幅而不等宽的矩形脉冲序列代替,使矩形脉冲的中点和相应正弦等分的中点重合,且使矩形脉冲和相应正弦部分面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。能够看出,各脉冲宽度是按正弦规律变化的。根据冲量相等效果相同的原理,PWM波形和正弦半波是等效的。对于正弦的负半周,也能够用同样的方法得到PWM波形。在PWM波形中,各脉冲的幅值是相等的,要改变等效输出正弦波的幅值时,只要按同一比例系数改变各脉冲的宽度即可,因此在交-直-交变频器中,整流电路采用不可控的二极管电路即可,PWM逆变电路输出的脉冲电压就是直流侧电压的幅值。根据上述原理,在给出了正弦波频率,幅值和半个周期内的脉冲数后,PWM波形各脉冲的宽度和间隔就能够准确计算出来。按照计算结果控制电路中各开关器件的通断,就能够得到所需要的PWM波形。6.3控制系统程序6.3.1系统主函数:#include<reg52.h> //包含51单片机头文件#include<math.h> //包含数学计算头文件#include"Delay.h" //包含用户头文件delay.h,作用:延时#include"LCD1602.h" //包含用户头文件LCD_1602.h,作用:驱动1602液晶显示器显示#include"DS18B20.h" //包含用户头文件ds18b20.h,作用:驱动温度传感器测量当前温度#include"KeyScan.h" //包含用户头文件Keyscan.h,作用:键盘扫描,获取按键值#defineucharunsignedchar //用uchar代替unsignedchar#defineuintunsignedint //用uint代替unsignedintsbitkaitong=P2^0; //定义电热杯开通关断引脚intPrevError=0; //定义上上一次偏差值intLastError=0; //定义上一次偏差值intError=0; //定义当前偏差值intPError,IError,DError; //中间变量intLastValue; //上一次的输出值intNowValue; //本次的输出值intFull,Part; //加热占空比调节参数intSetValue=600; //初始化温度值60度floatProportion=0.5; //定义比例参数floatIntegral=0.1; //定义积分参数floatDerivative=1; //定义微分参数intPIDCalc(intNextValue) //增量式PID计算部分{ PrevError=LastError; //将上一次偏差LastError赋给上上一次偏差PrevError LastError=Error; //将当前偏差Error赋给上一次偏差LastError Error=keyscan()-NextValue;//将新的偏差赋给当前偏差Error偏差是绝对值,有错 LastValue=NowValue; //将本次输出值赋给上一次输出值 if(Error>=100) { return(20); } elseif((Error<100)&&(Error>=50)) { return(14); } elseif((Error<50)&&(Error>=0)) { PError=Proportion*(Error-LastError); IError=Integral*Error; DError=Derivative*(Error-2*LastError+PrevError); NowValue=PError+IError+DError+LastValue; returnNowValue;//计算PID控制值 } else return0;}voidmain(){// uintccc=100; LCD_init(); //初始化LCD setPosition(1,2); //从第1行第2个字符位开始显示“Welcomto” prints("Welcomto"); setPosition(2,5); //从第1行第2个字符位开始显示“SUST” prints("SUST"); delayl(1000); //延时,使欢迎界面在屏幕上停留片刻 LCD_init(); //初始化LCD while(1) { Part=PIDCalc(readtemp()); Full++; //加1, if(Full>20) //如果full大于20,则复位为1 { Full=1; } if(Full<=Part) //判断PID计算值,如果Full小于等于该值,则开通发热管;否则关断 kaitong=0; else kaitong=1; /*从第2行第2字符位开始显示设定温度值*/ setPosition(1,0); IntToStr(keyscan(),buffer,3);//处理温度值,以便显示// prints("SV:"); //显示"SET:" printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc('.'); //显示小数点 printc(buffer[2]); //显示十分位 printc(0xDF); //显示摄氏度符号右上角的小圆圈 printc('C'); //显示摄氏度符号“C” /*从第1行第2字符位开始显示当前温度值*/ setPosition(1,8); IntToStr(readtemp(),buffer,3); //处理温度值,以便显示// prints("PV:"); //显示"CUR:" printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc('.'); //显示小数点 printc(buffer[2]); //显示十分位 printc(0xDF); //显示摄氏度符号右上角的小圆圈 printc('C'); //显示摄氏度符号“C” setPosition(2,0); IntToStr(NowValue,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); setPosition(2,4); IntToStr(PError,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); setPosition(2,8); IntToStr(IError,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); setPosition(2,12); IntToStr(DError,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); }}6.3.2延时程序#ifndefDelay#defineDelay#defineuintunsignedint#defineucharunsignedcharvoiddelayl(uintn) //长延时n毫秒{ uinti,j; for(i=n;i>0;i--) for(j=114;j>0;j--);}voiddelays(uchari)//短延时{ while(i--);}#endif6.3.3LCD1602驱动程序#ifndefLCD1602#defineLCD1602#include"Delay.h"/*********端口定义*****************/sbitledrs=P2^3; //读写控制字,数据/命令,H/L sbitleden=P2^5; //使能端控制字,高有效sbitledrw=P2^4; //读/写,H/L,1=读,0=写,ucharbuffer[3];voidwrite_com(ucharcom){ ledrw=0; ledrs=0; P0=com; delays(200); leden=1; delays(200); leden=0;}voidwrite_data(uchardate){ ledrw=0; ledrs=1; P0=date; //准备数据 delays(200); leden=1; //激活LCD(Enabled) delays(200); leden=0;}voidLCD_init() //初始化LCD{ leden=0; write_com(0x38); //8位数据接口,两行显示 write_com(0x0c); //显示开关控制 write_com(0x06); //输入方式设置 write_com(0x01); //清屏}voidsetPosition(ucharx,uchary){ ucharpos; switch(x%2) { case1:pos=0x80+y;break;//第一行 case0:pos=0xc0+y;break;//第二行 } write_com(pos); //写入定位命令} voidprintc(uchara) //写入一个字符{ write_data(a); }voidprints(uchar*str) //写入字符串 { uchari=0;while(str[i]!='\0'){write_data(str[i++]); //写一个字符,指向下一个}}voidIntToStr(uintt,uchar*str,ucharn){ uchara[5];chari,j;//取得整数值到数组a[0]=t/100;//百位 a[1]=(t/10)%10;//十位 a[2]=t%10;//个位 for(i=0;i<3;i++)//转成ASCII码+32 { a[i]=a[i]+'0'; } for(i=0;a[i]=='0'&&i<=3;i++); for(j=3-n;j<i;j++)//填充空格 { *str='';str++; } for(;i<3;i++) { *str=a[i];str++; }//加入有效的数字 *str='\0';}#endif6.3.4DS18B20驱动程序#ifndefDS18B20#defineDS18B20#include"Delay.h"sbitDQ=P2^2;//定义通信端口ucharInit_DS18B20(void){ ucharx=0; DQ=1;//DQ复位 delays(2);//稍做延时 DQ=0;//将DQ拉低 delays(80);//精确延时大于480us DQ=1;//将DQ拉高 delays(3); x=DQ;//稍做延时后如果x=0则初始化成功,如果x=1则初始化失败 delays(50); return(x);}intReadOneChar(void){ uchari=0; uchardat=0; DQ=1; for(i=8;i>0;i--)//一个字节共8位,读8次 { DQ=0;//给脉冲信号,开始读 dat>>=1; //DAT右移一位 DQ=1;//给脉冲信号 if(DQ) dat|=0x80; //若DQ=1,DAT或立即数#80h,若D

温馨提示

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

评论

0/150

提交评论