综合实验- 单片机控制电机_第1页
综合实验- 单片机控制电机_第2页
综合实验- 单片机控制电机_第3页
综合实验- 单片机控制电机_第4页
综合实验- 单片机控制电机_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

攀枝花学院课程设计论文基于单片机的风扇控制器设计摘要基于单片机的温控风扇系统,采用单片机作为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度的比较实现风扇电机的自动启动和停止,并能根温度的变化自动改变风扇电机的转速,同时用LED八段数码管显示检测到的温度与设定的温度。关键词:单片机AT98C52DS18B20ULN2803LED六位数码管风扇控制abstractBasedonsingle-chiptemperaturecontrolfansystem,usingsingle-chipmicrocomputerascontroller,usestemperaturesensorDS18B20asthetemperatureacquisitioncomponent,andaccordingtothecollectedtemperature,throughaDarlingtonreversedriveULN2803drivingfanmotor.Accordingtothedetectedtemperatureandasettemperaturecomparisonofimplementationsystemoffanmotorofautomaticstartandstop,androottemperaturechangesautomaticallychangethefanmotorspeed,atthesametimewiththeLEDeightdigitaltubedisplaythedetectedtemperatureandasettemperature.keywords:SinglechipAT98C52,DS18B20,ULN2803,motorcontrolLEDTOC\o"1-5"\h\u182951.绪论 564101.1前言 5263971.2设计的意义 563222设计功能要求及原理 6174002.1功能要求 619882.1.1要求不同的温度差电机的转速不同 667732.1.2数据输出 6315772.1.3按键 6133672.2设计原理 6173243.整体方案设计 7166583.1硬件以及需要的原件 7306533.1.1硬件原理图 7288243.1.2原件清单 7294713.2单片机各引脚功能说明 864483.3振荡电路设计 9325703.4复位电路设计 10247913.5按键的设计 1027519图3.7 11156093.6数码管显示模块 11134143.6.1数码管的内部图接线 1125653.6.2数码管PCB封装 1259293.6.3数码管显示原理 12165503.6.4数码管显示方式 1383523.7DS18B20温度传感器参数 14158213.7.1DS18B20的特点 14306313.7.2DS18B20内部结构 15317203.7.3DS18B20的管脚排列 15266043.7.4DS18B20的工作方式 16202203.7.5DS18B20的工作时序 1761823.7.5.1初始化时序 176463.7.5.2对DS18B20的写和读操作 17284143.8ULN2803参数 19284814.软件仿真及程序 2110664.2PROTUESISIS仿真图 2241674.3单片机的控制程序(C语言) 24101324.4用KeiluVision4对程序进行编译 3067045.用ALtiumDesignersummer09设计PCB版 3357605.1用ALtiumDesignersummer09设计PCB版 33276665.1.1原理图(如图5.1) 33304735.1.2PCB版(图5.1) 34126855.1.3PCB成品 34134296心得体会 3616207参考文献 371.绪论1.1前言单片机在各行各业的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器、GPS导航系统、abs防抱死系统、制动系统、胎压检测等。此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分广泛的用途。本文主要做单片机控制电机的转速,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机,通过比较采集的温度与设定温度,控制电机的转速,达到对温度的控制。1.2设计的意义1.掌握PROTEUSISIS软件仿真单片机原理的方法2.温度传感器DS18B20、PWM实验方法等的综合运用,控制电机转速2设计功能要求及原理2.1功能要求通过18B20的采集温度与系统设定的温度是比较,来控制风扇电机的转速,从而达到控制系统温度的功能。具体要求如下:要求不同的温度差电机的转速不同分四个讨论:①温度(tmp)小于设定温度②温度(tmp)大于设定温度小于设定温度+5③温度(tmp)大于设定温度+5小于设定温度+10④温度(tmp)大于设定温度+10小于设定温度+15数据输出电机的不同转速和数码管显示设定温度鱼采集温度按键复位按键,温度设定按键:温度加减2.2设计原理采用单片机作为控制器,利用温度传感器DS18B20作为温度采集元件,并根据采集到的温度,通过一个达林顿反向驱动器ULN2803驱动风扇电机。根据检测到的温度与系统设定的温度的比较实现风扇电机的自动启动和停止,并能根温度的变化自动改变风扇电机的转速,同时用LED八段数码管显示检测到的温度与设定的温度。3.整体方案设计3.1硬件以及需要的原件硬件原理图图3.1原件清单表3.1元件清单所属类所属子类AT89C52×1MicroprocessorICs8051FamilyULN2803×1AnalogMiscellaneousDS18B20×1DataConvertersTemperatureSensorsMOTOR-DC×1Electromechanical7SEG-MPX6-CC×1Optoelectronics7-SegmentDisplaysCAP×2CapacitorsGenericCAP.ELEC×1CapacitorsGenericCRYSTAL×1MiscellaneousRES10K×21K×1ResistorsGenericBUTTON×3Switches&RelaysSwitchesRESPACK-8×1ResistorsResistorPacks3.2单片机各引脚功能说明AT89C52电路图如图3.4所示VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也作为AT89C52的一些特殊功能口,如表3.1所示。表3.2AT89C52的一些特殊功能口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。3.3振荡电路设计单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(电容和一般取33pF)。这样就构成一个稳定的自激振。振荡电路脉冲经过二分频后作为系统的时钟信号,再在二分频的基础上三分频产生ALE信号,此时得到的信号时机器周期信号。振荡电路如图3.5所示:图3.5振荡电路3.4复位电路设计复位操作有两种基本形式:一种是上电复位,另一种是按键复位。按键复位具有上电复位功能外,若要复位,只要按图中的RESET键,电源VCC经电阻R1、R2分压,在RESET端产生一个复位高电平。上电复位电路要求接通电源后,通过外部电容充电来实现单片机自动复位操作。上电瞬间RESET引脚获得高电平,随着电容的充电,RERST引脚的高电平将逐渐下降。RERST引脚的高电平只要能保持足够的时间(2个机器周期),单片机就可以进行复位操作。按键复位电路图如图3.6所示。图3.63.5按键的设计K1键作为启动的按键,当它按下时计费器开始工作;K2键作为清零键,当它按下时所有显示全部清零;K3键作为白天和晚上的切换键,按一下为白天,再按一下为晚上;K4键作为停车起始按键,当它按下时表明停车,此时处于等待状态,计费以时间计。电路图如图3.7所示。图3.73.6数码管显示模块在单片机应用系统中,为了控制系统的工作状态,以及向系统中输入数据和信息,系统应设有按键或键盘。为了观察和监视键盘输入的信息,为了了解系统的工作情况以及得到系统完成任务的结果,系统应设有显示装置。单片机最常用的显示装置是LED显示器。如图3.8六位数码管图3.8数码管的内部图接线如图3.9内部接线图3.9数码管PCB封装如图3.10数码管PCB封装图3.10数码管显示原理LED显示块是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED。这种显示块有共阴极和共阳极两种,如上图所示,共阴极LED显示块的发光二极管阴极共地,如图中所示,当某个发光二极管的阳极为高电平时,发光二极管点亮。共阳极LED显示块的发光二极管阳极并接,当某个二极管的阴极为低电平时,该二极管点亮。通常的七段LED显示块中有八个发光二极管,故也称为八段显示器。其中七个二极管构成七笔字型“8”,一个发光二极管构成小数点。控制不同组合的二极管导通,就能显示各种字符。设8位控制器按低到高的次序依次控制LED显示块的a~f和小数点dp,我们称控制器输出的控制LED显示块显示字符的8位字节数据为段选码。共阳极与共阴极的段选码互为反码。在单片机应用系统中使用LED还可构成任意位的LED显示器。如8位LED显示器有8根位选线和8χ8根段选线。每根位选线控制该位的LED的8根段选线控制该位LED显示什么字符。段选线控制显示字符的字型,而位选线控制显示位的亮、暗。显然,多位LED控制线占用太多。在多位LED显示时,为了简化电路,降低成本,将所有位LED的段选线并接在一起,在某一刻时,将要显示的字符段码同时送到每一个显示器的各段,但是只让这一位LED显示。下一时刻又送下一位LED要显示字符的段码,并只让下一位LED显示…….如此轮流,使每位显示该为的字符,这样不断的循环送出响应的段选码﹑位选码,就可以获得视觉稳定的显示状态。用单片机驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据送出后就不再管,直到下一次显示数据需要更新时再传送一次新数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多;动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节省线路板空间,更重要的是能节省成本。硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD码即可,硬件接线有一定标准。软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。数码管显示方式(1)静态方式:LED显示器工作在静态显示方式下,共阴极或共阳极点连接在一起接地或+5V;每位的段选线(a-dp)与一个8位并行口相连。如图所示,该图表示了一个四位静态LED显示器电路。该电路每一位可独立显示,只要在该位的段选线上保持段选码电平,该位就能保持相应的显示字符。由于每一位由一个8位输出口控制段选码,故在同一时间里每一位显示的字符可以各不相同。N位静态显示器要求有N*8根I/O口线,占用I/O口资源较多。故在位数较多时往往采用动态显示方法。(2)动态方式在多位LED显示时,为了简化电路,降低成本,将所有位的段选码并联在一起。由一个8位I/O口控制,而共阴点或共阳点分别由相应的I/O口线控制。显示时通过位控信号采用扫描的方法逐位的循环点亮各位数码管。动态显虽然在任一时刻只有一位数码管被点亮,但是由于人眼具有视觉暂留效应,看起来与全部数码管持续点亮的效果完全一样。本设计中主要用7段LED显示器,下面对其进行简要介绍。7段LED显示器由7条发光二极管组成显示字段,并按“日”字形排列,这7段发光管分别称为a,b,c,d,e,f,g,有的还带有一个小数点dp,7段LED由此得名,将7段发光管阴极都连在一起,称为共阴极接法,当某个字段的阳极为高电平时,对应的字段就点亮。共阳极接法是将LED显示器的所有阳极并接后连到+5V电源上,当某一字段的阴极为0时,对应的字段就点亮下面以共阴极接法说明显示字符和数字量与段编码关系。由于加在7段阳极上的电压可以用数字量表示,对于共阴极,如果某位为1,则对应段发光;如为0,则不发光。数字量与段的对应关系如表4-2所示:表4-2数码管数字量与段的对应关系表D7D6D5D4D3D2D1D0dpgfedcba例如:当加到阳极的数字量为00111111B=3FH时,除dp,g不发光外,其他6段均发光,因此显示一个0字符。对于共阳极接法,加到阴极的数字量为:11000000=C0H,则显示0字符。由此可见,共阳极接法的段选码与共阴极接法的段选码是逻辑“非”关系。3.7DS18B20温度传感器参数DS18B20的特点DS18B20单线数字温度传感器,即“一线器件”,其具有独特的优点:(1)采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。(2)测量温度范围宽,测量精度高DS18B20的测量范围为-55℃~+125℃;在-10~+85°C范围内,精度为±0.5°C。

(3)在使用中不需要任何外围元件。

(4)持多点组网功能多个DS18B20可以并联在惟一的单线上,实现多点测温。

(5)供电方式灵活DS18B20可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。(6)测量参数可配置DS18B20的测量分辨率可通过程序设定9~12位。(7)负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。(8)掉电保护功能DS18B20内部含有EEPROM,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。

DS18B20具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。DS18B20内部结构DS18B20内部结构如图3.11主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X^8+X^5+X^4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。图3.11DS18B20的管脚排列1.GND为电源地;2.DQ为数字信号输入/输出端;3.VDD为外接供电电源输入端(在寄生电源接线方式时接地,)如图3.12图3.12DS18B20的工作方式1.寄生电源工作方式(图3.13)图3.132.外接电源工作方式(图3.14)图3.14DS18B20的工作时序DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括: 1.初始化时序 2.写时序 3.读时序.1初始化时序主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。

做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有到就一直在检测等待。(如图3.15)如图3.15.2对DS18B20的写和读操作接下来就是主机发出各种操作命令,但各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。因此首先要搞清主机是如何进行写0、写1、读0和读1的。写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的DS18B20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。(如图3.16)

如图3.16对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成(如图3.17)

如图3.17现在我们要做的是让DS18B20进行一次温度的转换,那具体的操作就是:1、主机先作个复位操作,2、主机再写跳过ROM的操作(CCH)命令,3、然后主机接着写个转换温度的操作命令,后面释放总线至少一秒,让DS18B20完成转换的操作。在这里要注意的是每个命令字节在写的时候都是低字节先写,例如CCH的二进制为11001100,在写到总线上时要从低位开始写,写的顺序是“零、零、壹、壹、零、零、壹、壹”。整个操作的总线状态,如图3.18。如图3.18读取RAM内的温度数据。同样,这个操作也要接照三个步骤。1、主机发出复位操作并接收DS18B20的应答(存在)脉冲。2、主机发出跳过对ROM操作的命令(CCH)。3、主机发出读取RAM的命令(BEH),随后主机依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可。同样读取数据也是低位在前的。整个操作的总线状态如图3.19:如图3.193.8ULN2803参数八路NPN达林顿连接晶体管阵系列特别适用于低逻辑电平数字电路(诸如TTL,CMOS或PMOS/NMOS)和较高的电流/电压要求之间的接口,广泛应用于计算机,工业用和消费类产品中的灯、继电器、打印锤或其它类似负载中。所有器件具有集电极开路输出和续流箱位二极管,用于抑制跃变。ULN2803的设计与标准TTL系列兼容,而ULN2804最适于6至15伏高电平CMOS或PMOS。ULN2803引脚参数(如图3.20)图3.20ULN2803的PCB封装(如图3.21)图3.214.软件仿真及程序4.1硬件原理图(如图4.1)图4.14.2PROTUESISIS仿真图①温度(tmp)小于设定温度(图4.2)图4.2②温度(tmp)大于设定温度小于设定温度+5(图4.3)图4.3③温度(tmp)大于设定温度+5小于设定温度+10(图4.4)图4.4④温度(tmp)大于设定温度+10小于设定温度+15(图4.5)图4.54.3单片机的控制程序(C语言)#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1^7;sbitkey1=P1^3;sbitkey2=P1^4;sbitdianji=P3^1;floatff;uinty3;ucharshi,ge,xiaoshu,sheding=20,gaonum,dinum;ucharcodedispcode[]={//段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharcodetable[]={//带小数点的段码0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};uchardispbitcode[]={//位选0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uchardispbuf[8]={0,0,0,0,0,0,0,0};voidDelay(uintnum)//延时函数{while(--num);}voiddigitalshow(uchara4,uchara3,uchara2,uchara1,uchara0){dispbuf[0]=a0; dispbuf[1]=a1; dispbuf[2]=a2; dispbuf[3]=a3; dispbuf[4]=a4; P2=0xff; P0=dispcode[dispbuf[0]]; P2=dispbitcode[5]; Delay(1); P2=0xff; P0=dispcode[dispbuf[1]]; P2=dispbitcode[4]; Delay(1);P2=0xff; P0=dispcode[dispbuf[2]]; P2=dispbitcode[2]; Delay(1); P2=0xff; P0=table[dispbuf[3]]; P2=dispbitcode[1]; Delay(1); P2=0xff; P0=dispcode[dispbuf[4]]; P2=dispbitcode[0]; Delay(1);}voiddmsec(uintcount){uinti;//1ms延时 while(count--) { for(i=0;i<125;i++){} }}voidtmreset(void){DQ=0;Delay(90);//精确延时大于480usDQ=1;Delay(4);//90,4可以小范围变化}voidtmpre(void){while(DQ); while(~DQ); Delay(4);}bittmrbit(void){uinti; bitdat; DQ=0; i++;//i++;大概1us DQ=1; i++; i++; dat=DQ; Delay(8); return(dat);}uchartmrbyte(void)//读一个比特{uchari,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmrbit(); dat=(j<<7|dat>>1); } return(dat);}voidtmwbyte(uchardat)//写一个比特{uinti; ucharj; bittestb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1;//从低位开始 if(testb)//Write1 { DQ=0;//先拉低 i++; i++;//>1us DQ=1; Delay(4); } else//Write0 { DQ=0; Delay(4); DQ=1; i++; i++;//再拉高 } }}voidtmstart(void)//DS18B20开始转换{dmsec(1); tmreset(); tmpre(); dmsec(1); tmwbyte(0xcc);//skiprom tmwbyte(0x44);//转换}uchartmrtemp(void)//读取温度{uchara,b; tmreset(); tmpre(); dmsec(1); tmwbyte(0xcc);//skiprom tmwbyte(0xbe);//转换 a=tmrbyte();//MSB高8位 b=tmrbyte(); y3=b; y3=y3|a; ff=y3*0.0625; y3=ff*10+0.5; return(y3);}voidkeyscan(void){if(key1==0) { dmsec(5); if(key1==0) { sheding++; if(sheding==100) sheding=20; } while(!key1); } elseif(key2==0) { dmsec(5); if(key2==0) { sheding--; if(sheding==0) sheding=20; } while(!key2); }}voiddeal(uinttmp)//温度处理{if(tmp<=sheding) { gaonum=0; dinum=4; } elseif((tmp>sheding)&&(tmp<=(sheding+5))) { gaonum=1; dinum=3; } elseif((tmp>(sheding+5))&&(tmp<=(sheding+10))) { gaonum=2; dinum=2; } elseif((tmp>(sheding+10))&&(tmp<=(sheding+15))) { gaonum=3; dinum=1; } else {gaonum=4; dinum=0; }}voiddianjik()//电机控制{ucharq,i; for(q=0;q<dinum;q++) { dianji=0; digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10); for(i=255;i>0;i--) { digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10); }}for(q=0;q<gaonum;q++) { dianji=1; digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10); for(i=255;i>0;i--) { digitalshow(shi,ge,xiaoshu,sheding/10,sheding%10); } }}voidmain(void){uintlast; dianji=0; tmstart(); dmsec(450);//初始化DS18B20 while(1) { tmstart();//DS18B20开始转换 dmsec(2); last=tmrtemp()+160;//读取温度 shi=last/100; ge=(last%100)/10; xiaoshu=(last%100)%10; keyscan(); dmsec(2); deal(last/10); dianjik(); }}4.4用KeiluVision4对程序进行编译.新建工程(如图4.6)图4.6命名,选择CPU(AT89c52)如图4.7图4.7新建文本录入程序保存(如图4.8)如图4.8添加到工程如图(4.9)图4.9编译并生成HEX文件(如图4.10)如图4.10将生成的HEX文件烧录入单片机(如图4.11)5.用ALtiumDesignersummer09设计PCB版5.1用ALtiumDesignersummer09设计PCB版原理图(如图5.1)图5.15.1.2PCB版(图5.1)如图5.25.1.3PCB成品6心得体会本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,在一定范围能能实现转速的连续调节,LED数码管能连续稳定的显示环境温度和设置温度,并能通过

温馨提示

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

评论

0/150

提交评论