




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 题目: STC89C52电风扇智能调速器的设计 摘 要 本设计为一种温控风扇系统,具有灵敏的温度感测和显示功能,系统STC89C52单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。所设高低温值保存在温度传感器DS18B20内部E2ROM中,掉电后仍然能保存上次设定值,性能稳定,控制准确。关键词:单片机;温度传感器;智能控制。目 录绪 论41 系统概述51.1 STC89C52单片机简介51. 2 本设计任务和主要内容52 方案论
2、证621 温度传感器的选用622 控制核心的选择723显示电路724调速方式725控制执行部件83 系统原理83.1 系统总体设计83.2 控制装置原理933 温度检测和显示电路93.3.1 DS18B20的温度处理方法93.3.2 温度传感器和显示电路组成113.4 电机调速电路113.4.1 电机调速原理123.4.2 电机控制模块设计134 控制器软件设计144.1 主程序144.2 数字温度传感器模块和显示子模块154.3 电机调速与控制子模块17结 束 语19参考文献20附录一21 绪 论近些年来,随着空调行业的迅速发展,空调价格的大幅度“跳水”,电风扇行业曾被普遍认为是“夕阳产业”
3、。其实并非如此,市场人士称,家用电风扇并没有随着空调的普及而淡出市场,近两年反而出现了市场销售复苏的态势。其主要原因:一是风扇和空调的降温效果不同;(空调有强大的制冷功能,可以快速有效地降低环境温度,但电风扇的风更温和,更加适合老人儿童和体质较弱的人使用。)二是电风扇有价格优势,价格便宜而且相对省电,安装和使用都非常简单。传统电风扇多采用机械方式进行控制,功能少,噪音大,各档的风速变化大。随着科技的发展和人们生活水平的提高,家用电器产品趋向于自动化、智能化、环保化和人性化,使得由微机控制的智能电风扇得以出现。生活中,我们经常会使用一些与温度有关的设备。比如,现在虽然不少城市家庭用上了空调,但在
4、占中国大部分人口的农村地区依旧使用电风扇作为降温防暑设备,春夏(夏秋)交替时节,白天温度依旧很高,电风扇应高转速、大风量,使人感到清凉;到了晚上,气温降低,当人入睡后,应该逐步减小转速,以免使人感冒。虽然电风扇都有调节不同档位的功能,但必须要人手动换档,睡着了就无能为力了,而普遍采用的定时器关闭的做法,一方面是定时时间长短有限制,一般是一两个小时;另一方面可能在一两个小时后气温依旧没有降低很多,而风扇就关闭了,使人在睡梦中热醒而不得不起床重新打开风扇,增加定时器时间,非常麻烦,而且可能多次定时后最后一次定时时间太长,在温度降低以后风扇依旧继续吹风,使人感冒;第三方面是只有简单的到了定时时间就关
5、闭风扇电源的单一功能,不能满足气温变化对风扇风速大小的不同要求。又比如在较大功率的电子产品散热方面,现在绝大多数都采用了风冷系统,利用风扇引起空气流动,带走热量,使电子产品不至于发热烧坏。要使电子产品保持较低的温度,必须用大功率、高转速、大风量的风扇,而风扇的噪音与其功率成正比。如果要低噪音,则要减小风扇转速,又会引起电子设备温度上升,不能两全其美。为解决上述问题,我们设计了这套温控自动风扇系统。本系统采用高精度集成温度传感器,用单片机控制,能显示实时温度,并根据使用者设定的温度自动在相应温度时作出小风、大风、停机动作,精确度高,动作准确。1 系统概述1.1 STC89C52单片机简介STC8
6、9C52是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内4bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置用8位中央处理器(CPU)和Flash存储单元,功能强大。STC89C52单片机可灵活应用于各种控制领域。STC89C52单片机提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时、计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,STC89C52单
7、片机可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时、计数器,串行通行口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。1. 2 本设计任务和主要内容本文以STC89C52单片机为核心,通过数字温度传感器对外界环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动调节档位,实现“温度高、风力大、温度低、风力弱”的性能。另外,通过红外发射和接收装置及按键实现各种功能的启动与关闭,并且可对各种功能实现遥控,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置
8、温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。本设计主要内容如下:(1)风速设为从低到高共2个档位,可由用户通过键盘设定。(2)每当温度低于下限值时,则电风扇风速关闭。(3)每当温度在下限和上限之间时,则电风扇转速缓慢。(4)每当温度高于上限值时,则电风扇风速全速运转。2 方案论证本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换档停机控制部件。21 温度传感器的选用温度传感器可由以下几种方案可供选择:方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大由于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用AD转换芯片ADC0
9、809将模拟信号转化为数字信号输入单片机处理。方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和AD转换电路,将温度变化信号送入单片机处理。方案三:采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直接输出数字温度信号供单片机处理。对于方案一,采用热敏电阻有价格便宜、元件易购的优点,但热敏电阻对温度的细微变化不敏感,在信号采集、放大、转换过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其本身电阻对温度的变化存在较大误差,虽然可以通过一定电路予以纠正,但不仅将使电路复杂稳定性降低,而且在人体所处温度环境温度变化中难以检测到小的温度变化。故该方案不适
10、合本系统。对于方案二,采用热电偶和桥式测量电路相对于热敏电阻其对温度的敏感性和器件的非线性误差都有较大提高,其测温范围也非常宽,从-50摄氏度到1600摄氏度均可测量。但是依然存在电路复杂,对温度敏感性达不到本系统要求的标准,故不采用该方案。对于方案三,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转换等电路的误差因素,温度误差很小,并且由于其感测温度的原理与上述两种方案的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转换成数字量直接输出,简化了系统程序设计,又由于该传感器采用先进的单总线技术(1-WRIE),与单片机的接口变的非常简洁,抗干扰能力强。关于D
11、S18B20的详细参数参看下面“硬件设计”中的器件介绍。22 控制核心的选择方案一:采用电压比较电路作为控制部件。温度传感器采用热敏电阻或热电偶等,温度信号转为电信号并放大,由集成运放组成的比较电路判决控制风扇转速,当高于或低于某值时将风扇切换到相应档位。方案二:采用单片机作为控制核心。以软件编程的方法进行温度判断,并在端口输出控制信号。对于方案一,采用电压比较电路具有电路简单、易于实现,以及无需编写软件程序的特点,但控制方式过于单一,不能自由设置上下限动作温度,无法满足不同用户以及不同环境下的多种动作温度要求,故不在本系统中采用。对于方案二,以单片机作为控制器,通过编写程序不但能将传感器感测
12、到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置上下限动作温度值,满足全方位的需求。并且通过程序判断温度具有极高的精准度,能精确把握环境温度的微小变化。故本系统采用方案二。23显示电路方案一:采用五位共阳数码管显示温度,动态扫描显示方式。方案二:采用液晶显示屏LCD显示温度对于方案一,该方案成本低廉,显示温度明确醒目,在夜间也能看见,功耗极低,显示驱动程序的编写也相对简单,这种显示方式得到广泛应用。不足的地方是扫描显示方式是使五个LED逐个点亮,因此会有闪烁,但是人眼的视觉暂留时间为20MS,当数码管扫描周期小于这个时间时人眼将感觉不到闪烁,因此可以通过增大扫描频率来消除闪烁感。
13、对于方案二,液晶体显示屏具有显示字符优美,不但能显示数字还能显示字符甚至图形的优点,这是LED数码管无法比拟的。但是液晶显示模块价格昂贵,驱动程序复杂,从简单实用的原则考虑,本系统采用方案一。24调速方式方案一:采用变压器调节方式,运用电磁感应原理将220V电压通过线圈降压到不同的电压,控制风扇电机接到不同电压值的线圈上可控制电机的转速,从而控制风扇风力大小。方案二:采用晶闸管构成无级调速电路。对于方案一,由于采用变压器改变电压调节,有风速级别限制,不能适应人性化要求。且在变压过程中会有损耗发热,效率不高,发热有不安全因素。对于方案二,以电位器控制晶闸管的导通角大小,可实现由最大风速到关闭的无
14、级别调速,可将风力调节在关闭无风到最大风之间的任意风力,实现“自由风”。且在调速环节中基本无电力损耗。故本系统采用方案二。25控制执行部件方案一:采用数模转换芯片AD0832控制,由单片机根据当前温度值送出相应数字量到AD0832,由AD0832产生模拟信号控制晶闸管的导通角,从而配合无级调速电路实现温控时的自动无级风力调节。方案二:采用继电器,继电器的接有控制晶闸管导通角的电阻的接入电路与否由单片机控制,根据当前温度值在相应管脚送出高/低电平,决定某个继电器的导通角控制电阻是否接入电路。(详见4.2.4)对于方案一,该方案能够实现在风扇处于温控状态时也能无级调速,但是D/A转换芯片价格较高,
15、与其温控状态下无级调速功能相比性价比不高。对于方案二,虽然在温控状态下只能实现弱/大风两级调速,但采用继电器价格便宜,控制可靠,且出于在温控状态时无级调速并不是特别需要的功能,综合考虑采用方案二。3 系统原理3.1 系统总体设计红外遥控输入温度显示单片机系统电机控制模块数字温度传感模块图1 系统总体结构框图3.2 控制装置原理传统电风扇供电采用的是220V交流电,电机转速分为几个档位,通过人工手动调整电机转速达到改变风速的目的,亦即,每改变一次风力,必然有人参与操作,这样就会带来诸多不便。本文介绍了一种基于STC89C52单片机的智能电风扇调速器的设计,该设计巧妙利用红外线遥控技术、单片机控制
16、技术、无级调速技术和温度传感技术,把智能控制技术应用于家用电器的控制中,将电风扇的电机转速作为被控制量,由单片机分析采集到的数字温度信号,再通过可控硅对风扇电机进行调速。从而达到无须人为控制便可自动调整风速的效果。33 温度检测和显示电路可以选用LM324A运算放大器作为温度传感器,将其设计成比例控制调节器,输出电压与热敏电阻的阻值成正比,但这种方案需要多次检测后方可使采样精确,过于烦琐。所以我采用更为优秀的DS18B20数字温度传感器,它可以直接将模拟温度信号转化为数字信号,降低了电路的复杂程度,提高了电路的运行质量。3.3.1 DS18B20的温度处理方法DS18B20是美国DALLAS半
17、导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源,因而使用DS18B20可使系统结构更趋简单可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 DS18B2
18、0简介:(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0 +5.5 V。(4)测温范围:-55 +125 。固有测温分辨率为0.5 。(5)通过编程可实现912位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。单线(1wire)技术:该技术采用单根信号线,既可传输时钟,也能传输数据,而且是双向传输
19、。适用于单主机系统,主机能够控制一个或多个从机设备,通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能释放该线,而让其他设备使用。单线通常要求外接一个5K的上拉电阻,这样当该线空闲时,其状态为高电平。主机和从机之间的通讯分成三个步骤:初始化单线器件、识别单线器件和单线数据传输。单线1wire协议由复位脉冲、应答脉冲、写0、写1、读0、读1,这几种信号类型实现,这些信号中除了应答脉冲其他都由主机发起,并且所有指令和数据字节都是低位在前。DS18B20直接将测量温度值转化为数字量提交给单片机,工作时必须严格遵守单总线器件的工作时序。温度值/ 数字输出(二进制) 数字输出(十六进制)
20、 +125 0000 0111 1101 0000 07D0H+85 0000 0101 0101 0000 0550H+25.625 0000 0001 1001 0001 0191H+10.125 0000 0000 1010 0010 00A2H+0.5 0000 0000 0000 1000 0008H0 0000 0000 0000 0000 0000H-0.5 1111 1111 1111 1000 FFF8H-10.125 1111 1111 0110 1110 FF5EH-25.625 1111 1111 0110 1111 FF6FH-55 1111 1100 1001 00
21、00 FC90H表1 部分温度值与DS18B20输出的数字量对照表3.3.2 温度传感器和显示电路组成本模块用更为优秀的DS18B20作为温度传感器,STC89C52单片机作为处理器,配以温度显示作为温度控制输出单元。整个系统力求结构简单,功能完善。电路图如图2所示。系统工作原理如下:DS18B20数字温度传感器采集现场温度,将测量到的数据送入STC89C52单片机的P2.4口,经过单片机处理后显示当前温度值,并与设定温度值的上下限值作比较,若高于设定上限值或低于设定下限值则控制电机转速进行自动调整。图2 DS18B20温度计原理图3.4 电机调速电路电机调速是整个控制装置中的一个相当重要的方
22、面。通过控制改变三极翻出的导,使输出端电压发生改变,从而使施加在电风扇的输入电压发生改变,以调节风扇的转速,实现各档位风速的无级调速。3.4.1 电机调速原理双向可控硅的导通条件如下:(1)阳-阴极间加正向电压;(2)控制极-阴极间加正向触发电压;(3)阳极电流IA 大于可控硅的最小维持电流IH。电风扇的风速从高到低设为5、4、3、2、1档,每档风速都有一个限定值。在额定电压、额定功率下,以最高转速运转时,要求风叶最大圆周上的线速度不大于2150m/min。且线速度可由下列公式求得V=Dn×103 (1)式(1)中,V为扇叶最大圆周上的线速度(m/min),D为扇中的最大顶端扫出圆的
23、直径(mm),n为电风扇的最高转速(r/min)。代入数据求得n51555r/min,取n5=1250 r/min.又因为:取n1=875r/min。则可得出五个档位的转速值:n1=875r/min,n2=980r/min,n3=1063r/min,n4=1150 r/min,n5=1250r/min又由于负载上电压的有效值u0=u1 (2)式(2)中,u1为输入交流电压的有效值,为控制角。解得:(1) 当5=0°时,t=0ms;(2) 当4=23.5°时,t=1.70ms;(3) 当3=46.5°时,t=2.58ms;(4) 当2=61.5°时,t=3
24、.43ms;(5) 当1=76.5°时,t=4.30ms。上述计算出的是控制角和触发时间,当检测到过零点时,按照所求得的触发时间延时发脉冲,便可实现预期转速。3.4.2 电机控制模块设计本模块电路中采用了过零双向可控硅型光耦MOC3041M ,集光电隔离、过零检测、过零触发等功能于一身,避免了输入输出通道同时控制双向可控硅触发的缺陷, 简化了输出通道隔离2驱动电路的结构。所设计的可控硅触发电路原理图见图3。其中RL即为电机负载,其工作原理是:单片机响应用户的参数设置, 在I/ O 口输出一个高电平, 经反向器反向后, 送出一个低电平,使光电耦合器导通, 同时触发双向可控硅, 使工作电
25、路导通工作。给定时间内,负载得到的功率为: (3)式中: P 为负载得到的功率( kW); n 为给定时间内可控硅导通的正弦波个数; N 为给定时间内交流正弦波的总个数; U为可控硅在一个电源周期全导通时所对应的电压有效值(V); I 为可控硅在一个电源周期全导通时所对应的电流有效值(A)。由式(3) 可知,当U , I , N 为定值时, 只要改变n 值的大小即可控制功率的输出,从而达到调节电机转速的目的。图3 电机控制原理图4 控制器软件设计本系统的运行程序采用C语言编写,采用模块化设计,整体程序由主程序和显示、键盘扫描、红外线接收以及电机控制等子程序模块组成。4.1 主程序在主程序进行初
26、始化后,开始反复检测各模块相关部分的缓冲区的标志,如果缓冲区置位,说明相应的数据需要处理,然后主程序调用相应的处理子模块。如图7所示。系统初始化温度变化?温度控制子模块键盘输入?键盘处理子模块开始红外信号?红外接收处理模块YNYNYN显示子模块图7 主程序模块流程图 4.2 数字温度传感器模块和显示子模块开始DS18B20初始化启动DS18B20测温内部判断调用读子程序显示子程序结束调用相应的控制程序调用相应的键值处理程序调用写子程序异常正常如图8所示,主机控制DS18B20数字温度传感器完成温度转换工作必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。单片机所用的系统频率为12MHz
27、。根据DS18B20数字温度传感器进行初始化时序、读时序和写时序分别可编写3个子程序:初始化子程序、写子程序、读子程序。图8 数字温度传感器模块程序流程图DS18B20芯片功能命令表如下:命令 说明 协议READ ROM 读取激光ROM64位 33HMATCH ROM 匹配ROM 55H SKIP ROM 跳过ROM CCHSEARCH ROM 搜索ROM F0HALARM SEARCH 告警搜索 ECHWRITE SCRATCHPAD 把字节写入暂存器的地址2和3 4EHREAD SCRATCHPAD 读取暂存器和CRC字节 BEHCOPY SCRATCHPAD 把暂存器内容拷贝到非易失性存
28、储器中 48HCONVERT T 开始温度转换 44HRECALL E2 把非易失性存储器中的值召回暂存器 B8HREAD POWER SUPPLY 读电源供电方式:0为寄生电源,1为外电源 B4H表2 DS18B20功能命令表4.3 电机调速与控制子模块本模块采用双向可控硅过零触发方式,由单片机控制双向可控硅的通断,通过改变每个控制周期内可控硅导通和关断交流完整全波信号的个数来调节负载功率,进而达到调速的目的。因为INT0信号反映工频电压过零时刻,所以只要在外中断0的中断服务程序中完成控制门的开启与关闭,并利用中断服务次数对控制量n进行计数和判断,即每中断一次,对n进行减1计数,如果n不等于
29、0,保持控制电平为“1”,继续打开控制门;如n=0,则使控制电平复位为“0”,关闭控制门,使可控硅过零触发脉冲不再通过。这样就可以按照控制处理得到的控制量的要求,实现可控硅的过零控制,从而达到按控制量控制的效果,实现速度可调。(1)中断服务程序:执行中断服务程序时,首先保护现场,INT0中断标志置位,禁止主程序修改工作参数,然后开始减1计数,判断是否关断可控硅,最后INT0中断标志位清零,还原初始化数据,恢复现场,中断返回。(设1秒钟通过波形数N=100)(2)回路控制执行程序:主回路控制执行程序的任务是初始化数据存储单元,确定电机工作参数nmin/nmax,并将其换算成“有效过零脉冲”的个数
30、;确定中断优先级、开中断,为了保证正弦波的完整,工频过零同步中断INT0确定为高一级的中断源。EX0中断温度大于等于下限值并且小于上限值控制可控硅截止中断返回设置T0参数启动定时T0中断控制可控硅导通停止T0定时中断返回ba图9 电机控制模块中断响应流程图结 束 语本系统以STC89C52单片机为核心,单片机主要完成对外界环境温度信号的采集、处理、显示等功能;用Altium Designer 6软件绘制电路原理图和PCB电路印刷板图,由Protues软件进行访真测试,利用MCS-51 C语言编制。运行程序该系统的主要特点是:(1)适用性强,用户只需对界面参数进行设置并启动系统正常运行便可满足不
31、同用户对最适合温度的要求,实现对最适温度的实时监控。(2)随时可以根据软件编写新的功能加入产品。操作界面可扩展性强,只要稍加改变,即可增加其他按键的使用功能。本系统温度控制采用DS18B20数字温度传感器作为感温元件。可控硅串接在电源与负载电风扇,借改变定周期内可控硅的导通与截止时间之比来实现调速功能,其设计完使用方便就,适应人们睡办公等不同场合的使用。基于STC89C52单片机所设计与研制的电风扇智能调速系统,造价低且具有稳定性高、性能优越、节约电能等优点,在夜间无需定时,同样能给人们带来更多的方便。本设计在模拟检测中运行较好,但采样据不太稳定。功能上的缺憾是对于两个档之间的临界温度处理不好
32、,并且档位太少,还有待改进。参考文献1 曹巧媛.单片机原理及应用.北京:电子工业出版社,2002.22 王伦.电风扇原理与维修技术M.北京:新时代出版社,19993 张毅刚.新编MCS-51单片机应用设计.哈尔滨工业大学出版社,2006,104 梁廷贵、王裕琛.可控硅触发电路语音电路分册M.北京:科学技术文献出版社,2003附录一数字温度传感器模块和显示子模块程序:#include <reg52.h> /调用单片机头文件#define uchar unsigned char /无符号字符型 宏定义变量范围0255#define uint unsigned int /无符号整型 宏定
33、义变量范围065535#include "eeprom52.h"/数码管段选定义 0 1 2 3 4 56 7 8 9uchar code smg_du=0x28,0xee,0x42,0x52,0xe5,0xa8,0x41,0xe7,0x20,0xa0, 0x60,0x25,0x39,0x26,0x31,0x71,0xff; /断码/数码管位选定义uchar code smg_we=0xef,0xdf,0xbf,0x7f;uchar dis_smg8 = 0x28,0xee,0x32,0xa2,0xe4,0x92,0x82,0xf8;uchar smg_i = 3; /显示
34、数码管的个位数sbit dq = P24;/18b20 IO口的定义bit flag_lj_en; /按键连加使能bit flag_lj_3_en; /按键连3次连加后使能 加的数就越大了 uchar key_time,key_value; /用做连加的中间变量bit key_500ms ;sbit pwm = P23; uchar f_pwm_l ; /越小越暗uint temperature ; /bit flag_300ms ;uchar menu_1; /菜单设计的变量uint t_high = 300,t_low = 100; /温度上下限报警值 /*1ms延时函数*/void de
35、lay_1ms(uint q)uint i,j;for(i=0;i<q;i+)for(j=0;j<120;j+);/*小延时函数*/void delay_uint(uint q)while(q-);/*数码显示函数*/void display()static uchar i; i+;if(i >= smg_i)i = 0;P1 = 0xff; /消隐 P3 = smg_wei; /位选P1 = dis_smgi; /段选 /*把数据保存到单片机内部eepom中*/void write_eeprom()SectorErase(0x2000);byte_write(0x2000,
36、 t_high % 256);byte_write(0x2001, t_high / 256);byte_write(0x2002, t_low % 256);byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);/*把数据从单片机内部eepom中读出来*/void read_eeprom()t_high = byte_read(0x2001);t_high <<= 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low <<= 8;t_low
37、|= byte_read(0x2002);a_a = byte_read(0x2055);/*开机初始化保存的数据*/void init_eeprom()read_eeprom();/先读if(a_a != 22)/新的单片机初始单片机内问eepromt_high = 320;t_low = 280;a_a = 22;write_eeprom(); /保存数据/*18b20初始化函数*/void init_18b20()bit q;dq = 1;/把总线拿高delay_uint(1); /15usdq = 0;/给复位脉冲delay_uint(80);/750usdq = 1;/把总线拿高 等
38、待delay_uint(10);/110usq = dq;/读取18b20初始化信号delay_uint(20);/200usdq = 1;/把总线拿高 释放总线/*写18b20内的数据*/void write_18b20(uchar dat)uchar i;for(i=0;i<8;i+) /写数据是低位开始dq = 0; /把总线拿低写时间隙开始 dq = dat & 0x01; /向18b20总线写数据了delay_uint(5); / 60usdq = 1; /释放总线dat >>= 1;/*读取18b20内的数据*/uchar read_18b20()ucha
39、r i,value;for(i=0;i<8;i+)dq = 0; /把总线拿低读时间隙开始 value >>= 1; /读数据是低位开始dq = 1; /释放总线if(dq = 1) /开始读写数据 value |= 0x80;delay_uint(5); /60us读一个时间隙最少要保持60us的时间return value; /返回数据/*读取温度的值 读出来的是小数*/uint read_temp()uint value;uchar low; /在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); /初始化18b
40、20EA = 0;write_18b20(0xcc); /跳过64位ROMwrite_18b20(0x44); /启动一次温度转换命令EA = 1;delay_uint(50); /500usinit_18b20(); /初始化18b20EA = 0;write_18b20(0xcc); /跳过64位ROMwrite_18b20(0xbe); /发出读取暂存器命令low = read_18b20(); /读温度低字节value = read_18b20(); /读温度高字节EA = 1;value <<= 8; /把温度的高位左移8位value |= low; /把读出的温度低位放
41、到value的低八位中value *= 0.625; /转换到温度值 小数return value; /返回读出的温度 带小数/*定时器0初始化程序*/void time_init() EA = 1; /开总中断TMOD = 0X11; /定时器0、定时器1工作方式1ET0 = 1; /开定时器0中断 TR0 = 1; /允许定时器0定时ET1 = 1; /开定时器0中断 TR1 = 0; /允许定时器0定时/*独立按键程序*/uchar key_can; /按键值void key() /独立按键程序static uchar key_new;key_can = 20; /按键值还原P2 |=
42、0x07;if(P2 & 0x07) != 0x07)/按键按下if(key_500ms = 1)/连加key_500ms = 0;key_new = 1;delay_1ms(1); /按键消抖动if(P2 & 0x07) != 0x07) && (key_new = 1)/确认是按键按下key_new = 0;switch(P2 & 0x07)case 0x06: key_can = 3; break; /得到k2键值case 0x05: key_can = 2; break; /得到k3键值case 0x03: key_can = 1; break;
43、 /得到k4键值flag_lj_en = 1; /连加使能else if(key_new = 0)key_new = 1;write_eeprom();/保存数据flag_lj_en = 0;/关闭连加使能flag_lj_3_en = 0;/关闭3秒后使能key_value = 0;/清零key_time = 0;key_500ms = 0;/*按键处理数码管显示函数*/void key_with()if(key_can = 1) /设置键f_pwm_l = 30; menu_1 +;if(menu_1 >= 3)menu_1 = 0;smg_i = 3; /数码管显示3位if(menu
44、_1 = 1)/设置高温报警smg_i = 4; /数码管显示4位if(key_can = 2)if(flag_lj_3_en = 0)t_high + ;/按键按下未松开自动加三次else t_high += 10;/按键按下未松开自动加三次之后每次自动加10if(t_high > 990)t_high = 990;if(key_can = 3)if(flag_lj_3_en = 0)t_high - ;/按键按下未松开自动减三次else t_high -= 10;/按键按下未松开自动减三次之后每次自动减10if(t_high <= t_low)t_high = t_low +
45、1;dis_smg0 = smg_dut_high % 10; /取小数显示dis_smg1 = smg_dut_high / 10 % 10 & 0xdf; /取个位显示dis_smg2 = smg_dut_high / 100 % 10 ; /取十位显示dis_smg3 = 0x64; /Hif(menu_1 = 2)/设置低温报警smg_i = 4; /数码管显示4位if(key_can = 2)if(flag_lj_3_en = 0)t_low + ;/按键按下未松开自动加三次else t_low += 10;/按键按下未松开自动加三次之后每次自动加10if(t_low >= t_high)t_low = t_high - 1;if(key_can = 3)if(flag_lj_3_en = 0)t_low - ;/按键按下未松开自动减三次else t_low -= 10;/按键按下未松开自动加三次之后每次自动加10if(t_low <= 10)t_low = 10;dis_smg0 = smg_dut_low % 10; /取小数显示dis_smg1 = smg_dut_low / 10 % 10 & 0xdf; /取个位显示dis_smg2 = smg_dut_low / 100 % 10 ; /取十位显示dis_sm
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建漳州台商投资区资产运营集团有限公司招聘劳务派遣人员10人笔试参考题库附带答案详解
- 2025年陕西牛背梁景区招聘(22人)笔试参考题库附带答案详解
- 第七单元++两次世界大战、十月革命与国际秩序的演变+高一统编版2019必修中外历史纲要下册
- 2025年中国铁路投资集团有限公司招聘(28人)笔试参考题库附带答案详解
- 2025年中储粮吉林分公司招聘(74人)笔试参考题库附带答案详解
- 2025年上半年兰州铁路局招考16应届毕业生(720人)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年信阳市浉河区事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年佛山市禅城区国资产监督管理局下属企业招聘工作人员4人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年人民日报社招聘应届高校毕业生信息(100人)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年上半年云南省大理白族自治州青年志愿者协会招聘74人易考易错模拟试题(共500题)试卷后附参考答案
- 2025网格员考试题库及参考答案
- 2025年湖南有色金属职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 基于RFID技术的智能仓储管理系统方案
- 2025年江苏商贸职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 人教版八年级下册英语单词表
- 丽声北极星分级绘本第三级上-Zob-Is-Bored
- 2025年春季1530安全教育记录主题
- 2025年国家电投集团海南分公司招聘笔试参考题库含答案解析
- 2025年春新冀教版英语三年级下册课件 U1L1
- 2025年春新人教版物理八年级下册课件 第九章 压强 第1节 压强
- 2024年国家公务员考试行测真题附解析答案
评论
0/150
提交评论