温控电风扇

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科生毕业论文(设计)系(院)物理与电子工程学院专业电子信息工程
论文题目温控电风扇
学生姓名
指导教师
班级
学号
完成日期:2013 年3 月
温控风扇
物理与电子工程学院电子信息工程
[摘要]温控风扇系统采用51系列单片机STC89C52作为主控器,利用DS18B20数字温度传感器采集实时温度,经单片机处理后通过达林顿管ULN2003来驱动直流风扇的电机。

根据采集的实时温度,实现了风扇的自起自停。

温控风扇系统拥有自动和手动两种模式来调节风速,同时系统还设有5个不同档位,以及通过ST188反射式红外光电传感器检测风扇转速,并在LCD1602液晶屏上显示温度及档位。

[关键词]DS18B20 自动调速自启自停
引言
随着社会经济的发展,科技也是日益进步,越来越多的产品趋向智能化、自动化,这不仅是未来发展的趋势,同时也是节约资源所必须的。

所以无论是什么产品,都尽量的提高能源利用率,响应可持续发展国策。

现代社会中,风扇被广泛的运用在各个领域,传统的风扇设计,仅需通电就可使用,不论是有没有人在场使用、环境温度是高是低的情况下都只会机械性地以一恒定转速转动,这种不合理的设计不仅浪费资源而且使用也不方便。

而现阶段智能风扇可以根据环境温度的高低自行改变转速,可以自起自停,同时也可以满足人们手动调节风扇转速,使人们使用起来更方便。

这样的温控风扇系统,不仅在公共场合、工厂等地适用,而且在家居生活中也适用,特别是它的人性化设计,不仅满足了人们对于风扇的需求,也便捷了人们手动换挡的繁琐,此系统设计成本也低,便于推广。

它的设计为现代社会人们的生活带来了诸多便利,在提高人们的生活质量、生产效率的同时并在一定程度上达到环保节能的功效。

1 整体方案设计
1.1 系统整体设计
设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机STC89C52进行处理,在LCD1602数码管上显示当前环境温度值以及档位,DS18B20检测到的当前环境温度可精确到小数点后一位,同时采用PWM
脉宽调制方式来改变直流风扇电机的转速,最后再通过ST188测试风扇转速。

系统中设有自动调速和手动调速两种模式。

系统结构框图如图1-1:
图1-1系统结构框图
1.2 方案论证
1.2.1 单片机选择
方案一:采用STC89C52作为系统的控制器。

STC89C52是一种高性能、低功耗CMOS8位微控制器,具有8K系统可编程Flash存储器。

该单片机算术运算功能强,软件编程灵活、自由度大,可通过软件编程实现各种算法和逻辑控制,并有体积小、功耗低、技术成熟和成本低等优点。

方案二:MC9S12XS128是”飞思卡尔”公司推出的S12系列微控制器中的一款增强型16位微控制器。

其集成度高,片内支援丰富,接口模块包括SPI、SCI、I2C、A/D、PWM等[2]。

它在汽车电子、工业控制、中高挡机电产品等应用领域具有广泛的用途,但由于成本价高,编程操作工序复杂,体积还较大。

基于以上分析拟订方案一,由STC89C52作为控制核心,对检测信号进行处理和显示、电机控制。

1.2.2 温度传感器选择
方案一:DS18B20数字温度传感器。

DS18B20是美国DALLAS半导体公司继DS1820之后新推出的一种改进型智能温度传感器。

该器件温度分辨力极高,而且在对温度进行实时采集后直接输出数字量,简化了系统程序设计。

又由于该温度传感器采用先进的单总线技术,与单片机的接口变得非常简洁,抗干扰能力强,误差较小。

方案二:热敏电阻。

通过热敏电阻感应外界温度,采集会数据后通过模数转换模块AD0809进行转换后送入单片机进行处理。

由于随着外界的温度升高,热敏电阻并不是呈线性变化,采集后会有误差,而且程序上处理麻烦。

再者,功耗较大、
占用空间大,不符合设计要求。

基于以上分析拟订方案一,用DS18B20作温度采集模块。

1.2.3 电机驱动模块选择
方案一:采用多个三极管驱动。

三极管的主要特性是放大,三极管组成的级数愈多,放大的倍数愈大。

而且三极管成本价又低,体积小,不需要任何程序处理。

但是,一个三极管放大的倍数不能达到驱动电机的理想效果,设计中至少要2个以上,而且三极管易温漂,这样一来电路参数比较繁琐,参数易变。

方案二:采用达林顿管ULN2003驱动。

ULN2003具有带负载能力强、温度范围宽、电流增益高、工作电压高的特点,常用于各种电磁阀、步进电机、伺服电机等功率较大的器件上。

且不用设计任何电路参数。

方案三:采用LM298驱动电机。

LM298内部含有2个H桥,可以实现电机四种不同的转动方式,并且驱动的效果较ULN2003效果好。

但是在程序的编写上要比后者复杂,电路组成也相对复杂些,加之成本又高于ULN2003,故舍去掉。

基于以上分析拟订方案二,采用达林顿管ULN2003作为信号处理模块。

1.2.4 显示模块选择
方案一:采用四位LED七段数码管。

数码管具有:低损耗、低能耗、低压、耐老化、寿命长,对外界的环境要求较低。

同时,数码管显示信息少,动态扫描占用太多CPU资源等。

方案二:采用液晶显示屏LCD1602。

液晶显示屏具有轻薄短小、功耗小、无辐射危险,平面直角显示以及影象稳定不闪烁,画面效果好,可视面积大,显示信息量大、抗干扰能力强等特点[10]。

基于以上分析拟订方案二,采用液晶显示屏LCD1602作显示器。

1.2.5 测速模块选择
方案一:采用红外对管ST188测速。

ST188是采用高发射功率红外光电二极管以及高灵敏度光电晶体管组成,检测距离可调整,范围大,4-13mm 即可用,采用的是非接触检测方式,连接电路简单。

同时结合LM393电压比较器,在因为手工制作的码盘影响测量精度的情况下有所改善。

方案二:采用光码盘测速。

测速原理和ST188一样,其测速的精度比ST188测速精度较高,但是其成本相对较高,安装也没有ST188方便。

在此系统中,也完全不用高精度测速。

基于以上分析拟定方案一,采用ST188作为测速模块。

1.3 系统各模块最终方案
根据以上分析,结合器件和设备等因素,确定如下方案:
(1)采用STC89C52单片机作为中央控制器,分别对DS18B20、LCD液晶显示、模式选择、ST188、PWM波产生进行控制。

(2)速度检测模块选择ST188进行速度测量。

(3)显示模块采用LCD1602,实时显示温度、档位、转速。

(4)采用ULN2003芯片驱动直流电机。

2 硬件的设计与实现
2.1 系统硬件模块介绍
温控风扇系统主要是通过DS18B20采集外界实时温度后经单片机处理风扇电机的转速,达到理想温控效果。

系统总体分为:单片机最小系统、电源电路、温度采集电路、显示电路、电机驱动电路等部分。

系统电路原理图和PCB图如图2-1和图2-2所示:
图2-1系统电路原理图
图2-2 PCB 图
2.2 单片机最小系统
温控风扇系统是以单片机STC89C52来作为最小系统的控制器。

STC89C52具有以下标准功能:2个数据指针,三个16位定时器/计数器,8K 字节Flash , 32位I/O 口线,256字节RAM ,一个6向量2级中断结构,片内晶振及时钟电路,看门狗定时器,全双工串行口。

电路原理如图2-3所示。

XTAL2
18
XTAL1
19
ALE 30EA
31
PSEN 29RST
9
P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78
P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD
17
P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1
AT89C52
C1
1nF
C2
1nF
C3
1nF
C4
1nF
R1
10k
STC89C52单片机的40个引脚中有2个专用于主电源引脚,2个外接晶振的引脚,4个控制或与其它电源复用的引脚,以及32条输入输出I/O 引脚。

2.3 电源电路
由于直流电机驱动模块中,需要用到12V的电压,所以其决定了系统中的供电需要12V及以上的电源供电。

单片机是系统的控制核心,需要单独的5V电源供电。

基于上诉情况,对于需要得到不同的电压值,采用三段集成稳压芯片LM7812和LM7805来实现。

综上所述,电源模块电路图如图2-4所示:
图2-4电源电路
2.4 温度传感器电路
系统的设计中,采用了DS18B20来采集温度,它直接可以把所检测到的温度短时间内转化成数字。

2.4.1 DS18B20简介
具有负压特性,即当电源极性接反时,传感器不会因为发热而烧毁,但是不能正常工作;用户可以自设定非易失性报警的上下限值;有支持多点组网的功能,多个DS18B20可并联在惟一的三线上,实现多点的测温;通过编程可实现9~12位数字读数的方式,温控风扇系统采用了该器件系统默认的12位表示方式,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃、0.0625;可以用数据线来供电,电压范围为:+3.0~ +5.5 V;测温范围为:-55 ~+125 ℃,固有测温的分辨率为0.5 ℃,并且可在1S内把温度变换成数字;在使用中不需要任何的外围元件;DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ ,外供电源线VCC,共用地线GND;独特的单线接口方式当DS18B20和微处理器连接的时候仅需要一条线即可以实现微处理器与DS18B20的双向通讯。

其具体电路接线图如图2-5所示。

图2-5温度传感器电路
2.4.2 温度存储方式以及温度的计算
DS18B20用9位存储温度值,负温度S=0,正温度S=1,最高位为符号位,例如FF92H为-55℃,如图2-6所示:
图2-6 DS18B20温度存储方式
DS18B20用12位存储温度值,负温度S=0,正温度S=1,最高位为符号位,例如FC90H为-55℃,如图2-7所示:
图2-7DS18B20温度存储方式
2.5 显示模块电路
LCD1602是工业字符型液晶,能够同时显示16×2即32个字符。

LCD1602模块内部的字符发生存储器(CGROM)已存储包括:日文假名、常用的符号、英文字母的大小写和阿拉伯数字等160个不同的点阵字符和图形。

LCD1602与单片机连接电路如图2-8所示,其中15脚和16脚是液晶显示器的对比度调整端,接地电源的时候对比度最高,接正电源的时候对比度最弱,一般在
实际使用时可通过一个10K的电位器调整对比度,在此图中为Proteus中的仿真图未接电位器。

由于单片机内部P0口没有上拉电阻,输出的电平不能直接负载液晶,需要人为在电路中接入上拉电阻,将P0口电平拉高后,再驱动负载。

2.6
I/O口输出的单,
图2-9 电机驱动电路
2.7 速度检测电路
温控风扇的速度检测是由ST188来实现的,设计中采用ST188使系统形成反馈,和系统驱动电动机产生的转速进行调整,从而实现更好的控制。

ST188 采用的是非接触检测方式,其外形图和内部电路如图2-10所示:
图2-10 ST188外形图和内部电路
如图2-10,左边是光电二极管的外形图,由发射二极管和接收管组成,右图为内部的电路示意图。

A、K是红外发射二极管的正负极,C、E是接收管的正负极。

只要A极接高电平、K极接低电平,红外发射管就能发出红外线。

就可以在传感器加上外围电路来检测接收管的信号,进而确定是否接受到反射回来的红外线。

在此设计中,电机上安装一个图有黑、白两种颜色的码盘,当红外线照射的在黑线上的时候,由于黑色是吸收光线的,所以反射回去的光很少,而使得三极管收到的光较弱;而当红外线照射到白线的时候,由于白色能够反射大部分的光,所以三极管收受到的光就较强。

两种光的强弱就能够使得检测电路输出不同的电压,这个电压被送入LM393电压比较器,在LM393中与电位器调节出的电压进行比较形成脉冲,该脉冲作用于单片机的P3_5口,通过单片机的内部定时/计数器计数,最终计算出风扇的转速。

3 软件的设计与实现
系统的运行程序采用C语言编写,采用模块化设计,整体程序由主程序和、温度采集、PWM波、液晶显示以及电机控制等子程序模块组成。

3.1 主程序流程图
主程序对各模块进行初始化,而后调用温度采集、模式选择、产生PWM波、显示模块。

主程序流程图如图3-1所示:
图3-1系统主程序流程图
3.2 温度采集子程序
3.2.1 DS18B20的工作流程
单片机控制DS18B20温度传感器完成温度转换工作要经过三个步骤:初始化、ROM操作指令、存储器操作指令。

单片机所用的系统频率为12MHz。

根据DS18B20数字温度传感器进行初始化时序、读时序和写时序分别可编写成3个子程序:初始化子程序、写子程序、读子程序。

流程图如图3-2所示:
图3-2 DS18B20部分流程图
3.2.2 ROM与存储器操作命令
在DS18B20的使用中运用到了一些指令,具体指令如表3-1所示:
表3-1 ROM与存储器操作命令
3.3 PWM波子程序
由于需要电机产生不同的转速,所以则需要不同的PWM波来驱使电机以不同转速转动。

PWM波是一种不同频率的方波,所以在设计时采用定时器来产生不同频率的PWM波。

程序大致过程可以分为系统中断模块初始化和定时器产生所需要的PWM波,流程图如图3-3所示:
图3-3 生成PWM波流程图
PWM的周期设为40ms ,PWM的低电平时间为40ms,定时器T0选择工作方式1,设定PWM的单位时间为1s。

3.4 显示子程序
为了让系统有一个有好的界面,在系统设计时,采用了LCD1602作为显示器件。

在液晶屏上显示了系统设计的名称、实时的温度值、电机的转速和当前温度下
风扇所处的档位。

部分指令如表3-2所示:
表3-2 LCD1602部分指令
3.5 速度检测程序
3.5.1 ST188反射式红外光电传感器
速度检测使用的是ST188反射式红外光电传感器,检测不同档位时电机的转速。

流程图如图3-4所示:
图3-4速度检测流程图
上图为速度检测的流程图,ST188设为每200ms读一次数,即每200ms记录由于风扇ST188所检测到的脉冲数,然后再对于计时的变量清零,再显示出脉冲数,最后又返回主程序。

3.5.2 PID控制
PID是一个闭环的控制算法,温控风扇系统就是由ST188检测转速反馈给单片机形成反馈。

(1)PID是个由比例(P)、积分(I)、微分(D)构成的控制算法,但是并不
是必须同时都具备这三种算法,可以是:P控制、PI控制、PD控制、PID控制。

比例(P),可以反应系统的当前的误差,当系数大时可以加快调节来减小误差,但是如果系数过大就会使得系统的稳定性下降,使系统输出存在有稳态误差。

积分(I),反应出系统误差的累计,可以消除系统的稳态误差,积分作用的强弱取决于时间的积分,时间越长积分作用越弱。

它使控制器输出的稳态误差进一步的减小直至0为止,而与上面的比例控制结合后可以使得系统达到稳定后无稳态误差。

微分(D),可以反应系统误差的变化率,它能够预测出误差变化的趋势,能够超前的控制,可以改善系统的动态性能,它的缺点是对于噪声有放大作用,所以不能过多的进行微分调节,且微分控制不能够单独使用,需要和另外两种控制结合使用形成PD或是PID控制。

(2)PID有三种常用的算法,分别是:位置式算法、增量式算法、微分先行式算法。

温控风扇系统采用的是位置式PID算法:将测到的速度与理想中的速度进行比较得到一个偏差ek,且算出这次的偏差和上次偏差的差eek,给定一个值,当偏差大于这个值时,则给满的占空比进行加速;当偏差小于这个值并大于0时,则根据ek及eek来调整占空比进行加速;若这个偏差为负时,则电机停止转动。

具体流程如图3-5所示:
图3-5 PID控制算法流程图
3.6 系统开发软件
系统编程采用KEILC51软件。

Keil C51是美国Keil Software公司开发的51系列兼容单片机C语言的软件开发系统,与单片机汇编语言相比,C语言语句简单灵活,编写的函数模块可移植性强,因而易学易用,效率高。

随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言的发展,单片机的开发软件也在不断发展,Keil软件是目前使用较多的MCS-51系列单片机开发的软件。

系统使用界面如图3-6所示
图3-6 KEIL使用界面图
4 软件测试和硬件测试
4.1 软件测试
软件的测试中,结合于Proteus仿真软件完成,根据之前的各模块进行初始化设置,在编写程序前,要先对各个模块分别进行调试,并编写各部分的子程序。

测试DS18B20时,首先要检测初始化时否完成,再检测转换的温度是否正确,因为DS18B20是读一个字节写一个字节;测试PWM时同过示波器观察产生的波形是否正常,也可通过示波器观测编码器产生的波形是否正常,有无丢失脉冲的现象也可由示波器观测到;还要测试LDC1602的显示,刚开始的时候设置的扫描太快导致最后显示是数字在不停的闪烁,后来把扫描时间改成较长时间后则可以清楚的显示,然后就是观察采到的数据是否正常,黑线是否稳定。

系统测试仿真图如图4-1所示:
图4-1 Proteus仿真图
4.2 硬件的测试
4.2.1 硬件实物图
首先是对硬件电路的电源部分,传感器部分以及驱动部分进行调试,电源部分的调试主要看其输出电压是否满足要求;稳压芯片是否正常工作,一个稳压芯片输出12V电压,一个输出5V电压;给一个恒定PWM占空比,观察电机是否会转;用万用表检测从单片机输出的电流通过ULN2003后是否有扩大;以及LCD1602的显示是否正常显示,如果显示不正常则需要更换对比度调节的电阻。

根据设计要求,最后制作的硬件实物如图4-2、图4-3所示:
图4-2硬件实物图
图4-3 硬件实物图
4.2.2 数据测试结果
经过数十次的调试,并仔细检查硬件电路的完整性,完成了系统设计要求,达到了温度检测范围的要求,并使检测结果精确到了0.1℃,风扇能够自启自停,并自带5个不同档位的风速。

同时系统还设置了手动模式,可以手动对于风速的调整,也可以根据现场实时温度自动调整风速得到理想中的风速。

实验实测图如图4-4和图4-5所示:
图4-4 实验实测图
图4-5 实验实测图
实测结果如表4-1所示:
表4-1测试结果
如上表所示,总共检测了11次,其中可以了解到:手动模式共有5个档位,调节档位就是调节PWM波的占空比,当占空比越大时风扇转动得越快,当占空比为0时,风扇停止转动;自动模式共有4个档位,自动模式是根据检测环境的温度来自动调节风扇的转速,当温度大于20℃时风扇开始转动,在20℃-26.5℃、27℃-32℃、33℃-39℃、大于40℃时分别为1到4档,而当温度小于20℃时风扇自动停止转动。

5 结论
设计从节能、经济、实用的角度出发,以STC89C52单片机来控制一个简易温控风扇系统。

上文详细的介绍了整个制作过程中的方案论证、硬件原理、软件控制流程。

在整个制作过程,在导师的细心指导以及同学的帮助下经过不懈的努力,终于完成了对温控风扇的设计,实现了温度精确检测,风扇的自起自停,手动、自动调节风扇转速,同时可以检测速度功能的设计。

查找了元器件的资料,设计出了具体电路,并确定了主要参数,再根据单片机课程知识,对软件部分的理解,画出了程序流程图,最后完成了原理图的绘制,完成了整个设计。

在设计的过程中,也遇到了很多的问题,如在风扇电机驱动方面,开始时没有找到一个合适的方案来实现目标,先是自己在网上找了一些三极管驱动
电机电路,但最终没有实现,后又改为达林顿管来驱动,并得到了较好的效果。

在电机驱动PWM脉冲产生的过程中,由于以前单片机定时中断学习不好,在此次设计中遇到了不少麻烦,最终在查阅了相关书籍后总算做出来了。

还有这次是第一次接触使用温度传感器,对DS18B20的工作模式和一些时序更是一无所知,连资料上的时序也读不懂,在经过咨询同学后现在终于做出来了。

这一次的课题具有很强的综合性,它不但涉及到模拟部分和数字部分的设计,还要将单片机,物理等若干课程相结合,并需要自己查找大量的资料才能完成此次设计。

其实这个设计在很多方面还有待提高,但由于时间以及资金的问题而有所局限。

通过这样一次毕业设计,有了一次电子电路设计的全新体验。

通过查找资料,设计,绘图等,在实践过程中,学到了不少知识,增强了自学能力,同样加深了对电子学科的认识。

[参考文献]:
[1] 李全利.迟荣强.单片机原理及接口技术[M].北京:高等教育出版社,2004.1
[2] 卓晴.黄开胜,邵贝贝.学做智能车----挑战“飞思卡尔”杯[M].北京:北京航空航天大学出
版社,2006
[3] 张伟等.Protel DXP 高级应用.北京.人民邮电出版社,2002
[4] 华成英.童诗白.模拟电子技术基础[M].北京:高等教育出版社,2007.4
[5] 龚尚福.朱宇.微机原理与接口技术[M].西安:西安电子科技大学出版社,2007.1
[6] 孙传友.孙晓斌.感测技术基础[M].北京:电子工业出版社,2008.5
[7] 王柏盛.李万庆,贺洪江.C程序设计[M].北京:高等教育出版社,2005.12
[8] 阎石.数字电子技术基础[M].北京:高等教育出版社,2006.5
[9] 夏路易.石宗义.电路原理图与电路板设计教程[M].北京:北京希望电子出版社,2002.6
[10]邓兴成.单片机原理与实践指导.北京:机械工业出版社,2009.9
Based on the single chip microcomputer temperature control fan design
BaiXi
Electronic Information Engineering 1130S005
[Abstract]The temperature control fan system adopts 51 series Micro controller STC89C52 as master controller, using DS18B20 digital temperature sensors to collect real-time temperature, the single-chip microcomputer treatment through the Darlington tube UL2003 to drive fan motors. Use the real-time temperature collection, we realize the fan since the stop, automatic and manual regulating fan speed function, at the same time also has five different gear wind and in the LCD1602 display on the LCD panel temperature, gear.
[Key words]DS18B20 Automatic speed Control since the stop
附录:源程序
******************主程序************************ #define word unsigned int
#define byte unsigned char
#include "at89x51.h"
#include "lcd1602.c"
#include "ds18b20.c"
#include "pwm.c"
unsigned int yy=0;
byte c[4];
word s=0;
char Num=0;
void key();
void main()
{
P1=0;
LCD_Initial();
system_Ini();
GotoXY(0,0);
Print("PWM_ON:");
while(1)
{
GotoXY(7,0);
LCD_Write(1,(40-PWM_DOWN)/10+'0');
LCD_Write(1,(40-PWM_DOWN)%10+'0');
if(P2_0==0)
{
GotoXY(13,1);
Print("M:0");
}
else
{
GotoXY(13,1);
Print("M:1");
}
GotoXY(0,1);
Print("T");
LCD_Write(1,(s/100)%10+'0');
LCD_Write(1,(s%100/10)%10+'0');
LCD_Write(1,'.');
LCD_Write(1,s%10+'0');
Print("C");
GotoXY(9,1);
Print("N:");
LCD_Write(1,Num+'0');
GotoXY(10,0);
LCD_Write(1,yy/100+'0');
LCD_Write(1,yy%100/10+'0');
LCD_Write(1,yy%10+'0');
key();
}
}
void key()
{
if(P2_0==1)
{
if(P2_1==0)
{
while(P2_1==0);
Num++;
if(Num>=6) Num=0;
switch(Num)
{
case 0: PWM_DOWN=40;break;
case 1: PWM_DOWN-=8;break;
case 2: PWM_DOWN-=4;break;
case 3: PWM_DOWN-=4;break;
case 4: PWM_DOWN-=2;break;
case 5: PWM_DOWN-=2;break;
default:break;
}
}
}
if(P2_0==0)
{ if(s>200&&s<800)
{
PWM_DOWN=40-(s/10)+10;
}
else
{
PWM_DOWN=40;
}
if(s<200&&s>=0) { Num=0;}
if(s>=200&&s<250) { Num=1;}
if(s>=250&&s<300) { Num=2;}
if(s>=300&&s<350) { Num=3;}
if(s>=340&&s<400) { Num=4;}
if(s>=400) { PWM_DOWN=10;Num=5;}
}
}
//////////////////////////////////////////////////////////////DS18B20 /////////////////////////////////////////////////// sbit DQ=P2^3;
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1;
delay(8);
DQ = 0;
delay(80);
DQ = 1;
delay(14);
x = DQ;
delay(50);
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay(10);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay(5);
DQ = 1;
dat>>=1;
}
}
unsigned int ReadTemperature(void) {
unsigned char a=0;
unsigned char b=0;
unsigned int t=0;
float tt=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;
t=tt*10+0.5;
return(t);
}。

相关文档
最新文档