职场文秘网

首页 > 条据书信 > 感谢信 / 正文

AT89C51单片机智能风扇

2020-09-02 20:12:03

AT89C51单片机智能风扇 摘要 随着人们生活水平及科技水平的不断提高,现在家用电器在款式、功能等方面日益求精,并朝着自动化、智能化、环保化、和人性化等方向发展。过去的电器不断的显露出其不足之处。电风扇作为家用电器的一种,同样存在类似的问题。

现在电风扇的现状:大部分只有手动调速和手动开启、关闭风扇,再加上一个定时器,功能单一。

存在的隐患或不足:比如说人们常常离开后忘记关闭电风扇,浪费电且不说还容易引发火灾,长时间工作还容易损坏电器。再比如说前半夜温度高电风扇调的风速较高,但到了后半夜气温下降,风速不会随着气温变化,容易着凉。

之所以会产生这些隐患的根本原因是:缺乏对环境的检测。

如果能使电风扇具有对环境进行检测的功能,当我们拍一下手就能开启和关闭风扇;
当房间里面没有人时能自动的关闭电风扇;
当温度下降时能自动的减小风速甚至关闭风扇,这样一来就避免了上述的不足。本次设计就是围绕这三点对现有电风扇进行改进。

1.总体方案设计及功能描述 本设计是以AT89C51单片机控制中心,主要通过提取热释电红外传感器感应到的人体红外线信息和温度传感器DS18B20得到的温度以及周围发出的声音和内部定时器设定时间长短来控制电风扇的开关及转速的变化。

功能描述:电风扇工作在四种状态:红外扫描和声控状态、温控转速状态、自动停止状态、普通风扇状态。

(1)红外扫描和声控状态,当红外扫描到有人到来时,输出高电平使继电器吸合;
此时拍一下手就能启动风扇,接着再次拍一下手就能关闭风扇;
从而实现了人们无需通过接触实物开关就能实施对风扇控制的功能。语音控制的电风扇技术,是目前比较前沿的语音识别控制技术在家电方面的应用。电风扇是一种比较普及的家电,它与语音识别技术相结合,实现了语音控制,这种功能对于残疾人特别有意义,方便了残疾人的使用。语音识别技术还可以应用于其他家电方面,例如:语音控制遥控器,语音控制电冰箱,语音控制小车等等。从目前应用来看,以后语音控制将有更大的发展前景。

(2)温控转速状态,根据室内温度来自动调节风扇的转速,当温度降低转速也降低甚至关闭风扇,这样可以防止昼夜温差大让人感冒! (3)自动停止状态,。当我们离开房间而忘记关闭风扇时,风扇延时一段时间能够自动关闭,进而实现人走风扇关和节约电能的功能! (4)普通风扇状态,当我们不想开启声控和红外扫描时,也可以关掉它们,从而实现普通风扇的功能,并具有定时和倒计时的功能,还可以显示当前的温度和湿度。

2.方案比较与论证 2.1 温度传感器的选择 在本设计中,温度传感器的选择有以下两种方案:
方案一:采用热敏电阻作为检测温度的核心元件,并通过运算放大器放大,由于热敏电阻会随温度变化而变化,进而产生输出电压变化的微弱电压变化信号,再经模数转换芯片ADC0809将微弱电压变化信号转化为数字信号输入单片机处理。

方案二:采用数字式的集成温度传感器DS18B20作为温度检测的核心元件,由其检测并直接输出数字温度信号给单片机进行处理。

对于方案一,采用热敏电阻作为温度检测元件,有价格便宜,元件易购的优点,但热敏电阻对温度的细微变化不太敏感,在信号采集、放大以及转换的过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其自身电阻对温度的变化存在较大误差,虽然可以通过一定电路来修正,但这不仅将使电路变得更加复杂,而且在人体所处环境温度变化过程中难以检测到小的温度变化。故该方案不适合本系统。

对于方案二,由于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转化等电路的误差因数,温度误差变得很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转化成数字量直接输出,简化了系统程序设计,又由于该温度传感器采用先进的单总线技术,与单片机的接口变得非常简洁,抗干扰能力强,因此该方案适用于本系统。

2.2 控制核心的选择 在本设计中采用STC89C52单片机作为控制核心,通过软件编程的方法进行温度检测和判断,并在其I/O口输出控制信号。STC89C52单片机工作电压低,性能高,片内含8k字节的只读程序存储器ROM和256字节的随机数据存储器RAM,它兼容标准的MCS-51指令系统,单片价格也不贵,适合本设计系统。

1.3.3 温度显示器件的选择 方案一:应用动态扫描的方式,采用LED共阴极数码管显示温度。

方案二:采用LCD液晶显示屏显示温度。

对于方案一,该方案成本很低,显示温度明确醒目,即使在黑暗空间也能清楚看见,功耗极低,但不足的地方是它采用动态扫描的显示方式,各个LED数码管是逐个点亮的,因此会产生闪烁,但由于人眼的视觉暂留时间为20MS,故当数码管扫描周期小于这个时间时人眼不会感觉到闪烁,因此描频率设置得当才可采用该方案。

对于方案二,液晶显示屏具有显示字符优美,其不仅能显示数字还能显示字符甚至图形,这是LED数码管无法比拟的。从美观实用的原则考虑,本系统采用方案一。

3.功能模块硬件简介与实现 3.1热释电红外传感器模块 3.1.1热释电红外线传感器原理简介 人体辐射的红外线中心波长为 9~10um,而探测元件的波长灵敏度在 0.2~20um 范围内几乎稳定不变。在传感器顶端开设了一个装有滤光镜片的窗口,这个滤光片可通过光的波长范围为 7~10um,正好适合于人体红外辐射的探测,而对其它波长的红外线由滤光片予以吸收,这样便形成了一种专门用作探测人体辐射的红外线传感器。

实质上热释电传感器是对温度敏感的传感器。它由陶瓷氧化物或压电晶体元件组成,在元件两个表面做成电极,如图2所示。在环境温度有ΔT的变化时,由于有热释电效应,在两个电极上会产生电荷ΔQ,即在两电极之间产生一微弱的电压ΔV。

3.1.2热释电红外线传感器应用 热释电红外线传感器有三个端口,如图2-2所示:一个接电源、一个接地、一个信号端口,当有人进入其检测区域时,信号端口便产生一个电平跳变,并维持数秒钟,我们就是利用这个跳变来判断是否有人在这个检测区域。

S 图2-2 3.2温度传感器 3.2.1温度传感器DS18B20简介 新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线,在实际应用中取得了良好的测温效果。

DS18B20的主要特性:
(1)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

(2)测温温范围-55℃~+125℃ (3)最高分辨率为0.0625℃。

3.2.2 DS18B20的一般操作过程 (1)、初始化;

(2)、跳过ROM(命令:CCH);

(3)、温度变换(命令:44H);

(4)、读暂存存储器(命令:BEH);

注:每次读取温度都要经过上面四个过程。

3.2.3 DS18B20的温度存储方式即温度计算 DS18B20是用12位存储温度,最高位为符号位,下图为它的温度存储方式:
2^3 2^2 2^1 2^0 2^-1 2^-2 2^-3 2^-4 LSBYTE Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 S S S S S 2^6 2^5 2^4 MSBYTE Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 表2-1 DS18B20温度存储地址分配 这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;
如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

3.3.数码管 3.3.1共阴极八段数码管简介 共阴极八段数码管是将八段发光二极管封装在一起且二极管的阴极连在一起,原理图如下图所示,公共端接低电平,其它八个端口高电平点亮相应的二极管,低电平相反。

3.4继电器控制电路 3.4.1继电器简介 继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。

它有几个重要指标:
1、额定工作电压:正常工作时线圈所需要的电压。

2、直流电阻:继电器中线圈的直流电阻。

3、吸合电流:继电器能够产生吸合动作的最小电流。

4、释放电流:继电器产生释放动作的最大电流。

5、触点切换电压和电流:继电器允许加载的电压和电流。

3.4.2继电器驱动电路设计及工作原理简介 采用晶闸管也可以用于小电流控制大电流电路,但是其控制电路比较复杂,而采用继电器其控制电路就比较简单,且具有电气隔离作用。虽然其响应速度没有晶闸管快但在低频情况下采用继电器控制电路较为方便。其电路图如下所示:
图2-8 电路工作原理简介:当控制端口为低电平时,三极管导通继电器吸合,常闭触电断开,常开触点闭合。当控制端口为高电平时三极管关断,继电器线圈通过二极管放电并断开,常闭、常开触电复位。

4.软件设计与实现 4.1整体设计思路介绍 软件设计整体思路:主程序部分进行一些初始化以及温度的读取;
外部中断0进行红外线感应延时时间的重新加载;
定时器0进行键盘的扫描及相关操作;
定时器1进行显示、温控速度、以及相关需要延时(如倒计时等等)的操作。在显示方面,进行了一些改善----要显示的值有变化才进行重新刷新,否则不刷新。这样就大大提高了效率及最终的显示效果(不会出现不该亮的部分还有亮的现象)。

4.2主要部分流程图如下:
4.2.1主程序流程图 主程序开始 初始化内部资源 读取一个正确温度 并选择速度 启动时间和温度显示 拉高五个按键 启动定时器 读取温度 图 3-1 4.2.2外部中断流程图 外部中断开始 退出外部中断 红外线感应延 时重新初始化 图 3-2 4.2.3定时器0中断流程图 定时器0开始 退出定时器 定时器重新 初始化 键盘消抖 定时状态 N 定时状态 键盘操作 手动状态 键盘操作 自动状态 键盘操作 停止状态 键盘操作 Y Y Y Y 手动状态 N 自动状态 N 停止状态 图 3-3 4.2.4定时器1中断流程图 定时器1开始 退出定时器 定时器1重新初始化 键盘消抖 定时状态 手动状态 自动状态 停止状态 N N N 显示时间 如果有定时则时间和温度交替显示,没有则只显示温度 Y Y Y Y 如果有定时则定时倒计时,计时结束关闭电风扇 进入定时状态不动超过一定时间自动退回手动状态 如果有定时则时间和温度交替显示,没有则只显示温度 显示时间 图 3-4 结束语 该智能风扇能够实现红外扫描和声控相结合来控制风扇的开启和关闭的功能。当红外扫描到有人到来时,输出高电平使继电器吸合;
此时拍一下手就能启动风扇,接着再次拍一下手就能关闭风扇;
从而实现了人们无需通过接触实物开关就能实施对风扇控制的功能。当我们离开房间而忘记关闭风扇时,风扇延时一段时间能够自动关闭,进而实现人走风扇关和节约电能的功能!当我们不想开启声控和红外扫描时,也可以关掉它们,从而实现普通风扇的功能,并具有定时和倒计时的功能,还可以显示当前的温度和湿度 本设计为现代社会的生活和生产带来来了诸多便利,在提高人们生活质量和生产效率的同时也节约了电能。如今人们生活的很忙碌,在夏天,结束了一天的工作后,回到家便可以感受夏日家里的凉爽, 而且又物美价廉!重要的是:一是电风扇的风更温和,更加适合老人儿童和体质较弱的人使用。二是电风扇有价格优势,价格便宜而且相对省电,安装和使用都非常简单。据市场人士称,家用电风扇并没有随着空调的普及而淡出市场,近两年反而出现了市场销售复苏的态势,可以说智能风扇有着很好的应用前景! 附录:程序清单 /*********************************************************************** touwenjian.h ***********************************************************************/ typedef unsigned char byte; typedef unsigned int word; //以下管脚配置 //ds18b20部分 sbit DQ =P3^4; //显示部分 sbit DB=P2^0; sbit CP=P2^1; //发光显示部分 sbit LED_dingshi=P0^0; sbit LED_shoudong =P0^1; sbit LED_zidong=P0^2; sbit LED_kuai =P0^3; sbit LED_zhong =P0^4; sbit LED_man =P0^5; //键盘定义部分 #define wujian 0x3f sbit KEY1=P1^0 ; //状态转换 /启动 sbit KEY2=P1^1 ; //+10 / 1 sbit KEY3=P1^2 ; //-10 / 2 sbit KEY4=P1^3 ; // 3 sbit KEY5=P1^4 ; // 0 确定 //继电器控制部分 sbit JDQ1=P2^4; //0表示开通,1表示关断 sbit JDQ2=P2^5; sbit JDQ3=P2^6; //蜂鸣器部分 sbit call=P2^7; //低电平鸣叫 /*********************************************************************** ds18b20.c ***********************************************************************/ #include <REGX51.H> #include“touwenjian.h“ /***************************************************** 延时子程序 *****************************************************/ extern void delay(word useconds) { for(;useconds>0;useconds--); } /***************************************************** 复位子程序 ******************************************************/ static byte ow_reset(void) { byte presence; EA=0; DQ = 0; // pull DQ line low delay(45); // leave it low for 480us //551us DQ = 1; // allow line to return high delay(4);// wait for presence //61us presence = DQ; // get presence signal delay(40); // wait for end of timeslot //491us EA=1; return(presence); // presence signal returned } // 0=presence, 1 = no part /******************************************************* 从 1-wire 总线上读取一个字节子程序 ********************************************************/ static byte read_byte(void) { byte i; byte value = 0; EA=0; for (i=8;i>0;i--) { value>>=1; DQ = 0; // pull DQ low to start timeslot DQ = 1; // then return high {unsigned char i; for(i=0;i<2;i++);}//11us if(DQ)value|=0x80; delay(6);// wait for rest of timeslot } EA=1; return(value); } /******************************************************** 向 1-WIRE 总线上写一个字节 *********************************************************/ static void write_byte(char val) { byte i; EA=0; for (i=8; i>0; i--) // writes byte, one bit at a time { DQ = 0; // pull DQ low to start timeslot DQ=0; DQ = val&0x01; //6US delay(5);// hold value for remainder of timeslot //74us DQ = 1; val=val>>1; } EA=1; delay(5); } /******************************************************* 读取温度 *******************************************************/ word Read_Temperature(void) { union{ byte c[2]; word x; }temp; ow_reset(); write_byte(0xCC); // Skip ROM write_byte(0xBE); // Read Scratch Pad temp.c[1]=read_byte(); temp.c[0]=read_byte(); ow_reset(); write_byte(0xCC); //Skip ROM write_byte(0x44); // Start Conversion return temp.x; } /*************************************************************** 求解温度 ***************************************************************/ extern byte Real_Tem(void) { word wen; wen=Read_Temperature(); return((wen>>4)&0x00ff); } /*********************************************************************** Main.c ***********************************************************************/ #include <REGX51.H> #include“touwenjian.h“ //数据区 #define time_default 41 byte dingshi_time=time_default;//存放定时时间'''''' bit flag_dingshi=0; //0表示没有定时 word dingshi_jishu3=1000;//1000*60=1分钟 // bit flag_dingshi_delay=0;//1表示有 byte dingshi_delay=100; // #define hwx_delay_const 3 //人体感应延时时间 byte hwx_delay=hwx_delay_const;//用于保存红外线触发延长时间 word hwx_jishu1=0; // byte wendu=0;//用于存放温度值'''''' // #define low_wen 18 #define mid_wen 20 #define hig_wen 24 #define vhi_wen 28 // byte time_stor=100; //存储主观时间//触发显示 byte wendu_stor=low_wen;//存储主观温度//触发显示 // enum station0{zidong,dingshi,shoudong,weak}state; //函数说明区 extern byte Real_Tem(void ); extern void delay(word useconds); void mingjiao(void); void display(byte input,bit kkl); void auto_speed(void); void weak_default(void); /******************************************************************* 主程序 *******************************************************************/ void main() { //定时器0用于键盘扫描 TMOD=0x01|TMOD;//定时器0的1方式 TH0=0xd8;TL0=0xf0; //定时器0初始化10ms扫描一次 //定时器1用于显示 TMOD=0x10|TMOD;//定时器1的1方式 TH1=0x15;TL1=0xA0; //定时器1初始化60ms中断一次 //外部中断 TCON=TCON|0x01;//外部中断0都下降沿触发 //以下为开启部分 IP=0X01; //两个定时器同等优先级 IE=0x8b; //开启定时器0,1,外部中断0中断 // while(Real_Tem()==85); auto_speed(); LED_zidong=0; //刚开始为自动方式 P1=P1|0X7C; //拉高五个键盘 wendu_stor=100; //两个不可能值//用于启动显示 time_stor=100; //两个不可能值//用于启动显示 // TR0=1; //开启定时器0 TR1=1; while(1) { wendu=Real_Tem(); } } /*********************************************************************************** 定时器0中断服务子程序 功能:进行键盘处理 说明:键盘输入为P1.0到P1.4 ***********************************************************************************/ void time0(void) interrupt 1 { byte jianpan; TH0=0xd8;TL0=0xf0; jianpan = P1 & wujian; if(jianpan != wujian) //如果还有键盘值提取键盘值 { delay(500);//延时消抖 jianpan = P1 & wujian; if(jianpan==wujian)goto time_out; switch(state) { case dingshi: if(KEY1==0)//状态转换时做些相应的处理 { state=shoudong; LED_shoudong=0; flag_dingshi_delay=0;dingshi_delay=100; time_stor=100;wendu_stor=100;//触发 mingjiao(); while(KEY1==0); } else if(KEY2==0)//加分 { if(dingshi_time<90) {dingshi_time+=10;} dingshi_delay=100;// mingjiao(); while(KEY2==0); } else if(KEY3==0)//减分 { if(dingshi_time>10) {dingshi_time-=10;} dingshi_delay=100;// mingjiao(); while(KEY3==0); } else if(KEY4==0)//定时与否 { flag_dingshi=~flag_dingshi; if(flag_dingshi==1){LED_dingshi=0;} else {LED_dingshi=1;dingshi_jishu3=1000;} dingshi_delay=100;// // mingjiao(); while(KEY4==0); } else if(KEY5==0) { weak_default(); mingjiao(); while(KEY5==0); } break; case shoudong:if(KEY1==0) //状态转换时做些相应的处理 { state=zidong; auto_speed(); LED_shoudong=1;LED_zidong=0; mingjiao(); while(KEY1==0); } else if(KEY2==0)//快1 { JDQ2=1;JDQ3=1;JDQ1=0;//关断其它 LED_zhong=LED_man=1;LED_kuai=0; mingjiao(); while(KEY2==0); } else if(KEY3==0)//中2 { JDQ1=1;JDQ3=1;JDQ2=0;//关断其它 LED_kuai=LED_man=1;LED_zhong=0; mingjiao(); while(KEY3==0); } else if(KEY4==0)//慢3 { JDQ1=1;JDQ2=1;JDQ3=0;//关断其它 LED_zhong=LED_kuai=1;LED_man=0; mingjiao(); while(KEY4==0); } else if(KEY5==0)//停4 { weak_default(); mingjiao(); while(KEY5==0); } break; case zidong: if(KEY1==0) //状态转换时做些相应的处理 { state=dingshi; LED_zidong=1; flag_dingshi_delay=1;dingshi_delay=100;//开始延时 time_stor=100;// mingjiao(); while(KEY1==0); } else if(KEY2==0)//快1 { JDQ2=1;JDQ3=1;JDQ1=0;//关断其它 LED_zhong=LED_man=1;LED_kuai=0; state=shoudong; LED_zidong=1;LED_shoudong=0; mingjiao(); while(KEY2==0); } else if(KEY3==0)//中2 { JDQ1=1;JDQ3=1;JDQ2=0;//关断其它 LED_kuai=LED_man=1;LED_zhong=0; state=shoudong; LED_zidong=1;LED_shoudong=0; mingjiao(); while(KEY3==0); } else if(KEY4==0)//慢3 { JDQ1=1;JDQ2=1;JDQ3=0;//关断其它 LED_zhong=LED_kuai=1;LED_man=0; state=shoudong; LED_zidong=1;LED_shoudong=0; mingjiao(); while(KEY4==0); } else if(KEY5==0)//停4 { weak_default(); mingjiao(); while(KEY5==0); } break; case weak: if(KEY1==0) { state=zidong;LED_zidong=0; wendu_stor=100;//两个不可能值 time_stor=100;//两个不可能值 auto_speed(); mingjiao(); while(KEY1==0); } break; } } time_out: ; } /************************************************************************************* 定时器1中断服务子程序 功能: 用于定时 0.060s *************************************************************************************/ void timer1(void) interrupt 3 { TH1=0x15;TL1=0xa0; // //红外线到记时 EX0=0; if(hwx_jishu1<999){ hwx_jishu1++; } else { hwx_jishu1=0; hwx_delay--; if(hwx_delay==0){ weak_default();} } EX0=1; //1分钟定时 if(flag_dingshi==1) { if(dingshi_jishu3>0){dingshi_jishu3--;} else { dingshi_jishu3=1000; if(dingshi_time>1){dingshi_time--;} else{weak_default();} } } //5秒延时 if(flag_dingshi_delay==1) { if(dingshi_delay>1)dingshi_delay--; else { state=shoudong;flag_dingshi_delay=0;dingshi_delay=100; LED_shoudong=0; time_stor=100;wendu_stor=100; // mingjiao(); } } //显示和温控 switch(state) { case dingshi://在定时的时候只显示时间 if(time_stor!=dingshi_time){display(dingshi_time,1);time_stor=dingshi_time;} // break; case shoudong: case zidong: //是否有定时,有则交替显示温度和时间,没有则只显示温度 if(flag_dingshi!=0)// { static byte jiaoti_jishu2=0; static bit flag_jiaoti=0; if(jiaoti_jishu2<49){jiaoti_jishu2++;} else {flag_jiaoti=~flag_jiaoti;jiaoti_jishu2=0;} if(flag_jiaoti!=0) { if(time_stor!=dingshi_time) {display(dingshi_time,1);time_stor=dingshi_time;wendu_stor=100;}//显示时间 } else { if(wendu_stor!=wendu) {display(wendu,0);wendu_stor=wendu;time_stor=100;}//显示温度 } } else { if(wendu_stor!=wendu){display(wendu,0);wendu_stor=wendu;}// 显示温度 } //温度控制速度 if(state==zidong) { switch(wendu) { case low_wen: JDQ1=1;JDQ2=1;JDQ3=1; LED_zhong=LED_man=LED_kuai=1;//ting zhi break; case mid_wen: JDQ1=1;JDQ2=1;JDQ3=0; LED_zhong=LED_kuai=1;LED_man=0;//man break; case hig_wen: JDQ1=1;JDQ3=1;JDQ2=0; LED_kuai=LED_man=1;LED_zhong=0;//zhong break; case vhi_wen: JDQ2=1;JDQ3=1;JDQ1=0; LED_zhong=LED_man=1;LED_kuai=0;//kuai } } break; case weak: //关闭状态只显示温度 if(wendu_stor!=wendu){display(wendu,0);wendu_stor=wendu;} break; } } /************************************************************************************* 外部中断0服务子程序 功能:用于人体红外线感应中断 *************************************************************************************/ void int0(void) interrupt 0 { hwx_delay=hwx_delay_const;hwx_jishu1=0; } /************************************************************************************** 数码管显示子程序 功能:数据送到数码管显示 **************************************************************************************/ byte code shumaguan[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x00,0x02,0X00}; void display(byte input,bit kkl) { byte i,j; byte k; byte shuzhu[4]; shuzhu[1]=input/10; shuzhu[0]=input%10; for(i=0;i<4;i++) { if(i<2) { k=shumaguan[ shuzhu[i]]; if(kkl==0&&i==0){k++;} } else k=0; for(j=0;j<8;j++) { CP=0; P1=(P1&0XFE)|(k&0X01); k>>=1; CP=1; } } } /************************************************************************************** 蜂鸣器鸣叫子程序 功能:只负责鸣叫就是 **************************************************************************************/ void mingjiao(void) { byte i; for(i=0;i<35;i++) {call=0;delay(20);call=1;delay(20);} } /*********************************************************************************** 功能:自动控制时的转速初始化 ***********************************************************************************/ void auto_speed(void) { if(wendu>vhi_wen){JDQ2=1;JDQ3=1;JDQ1=0; LED_zhong=LED_man=1;LED_kuai=0;}//kuai else if(wendu>=hig_wen){JDQ1=1;JDQ3=1;JDQ2=0; LED_kuai=LED_man=1;LED_zhong=0;}//zhong else if(wendu>=mid_wen){JDQ2=1;JDQ1=1;JDQ3=0; LED_zhong=LED_kuai=1;LED_man=0;}//man else {JDQ2=1;JDQ3=1;JDQ1=1; LED_zhong=LED_man=LED_kuai=1;}//ting } /************************************************************************************ 功能:进入睡眠状态之前的准备 ************************************************************************************/ void weak_default(void) { flag_dingshi=0; //清楚定时标志 dingshi_time=time_default; dingshi_jishu3=1000; // flag_dingshi_delay=0; dingshi_delay=100; // state=weak; //进入睡眠状态 JDQ1=1;JDQ2=1;JDQ3=1; //关闭继电器 LED_shoudong=LED_zidong=LED_dingshi=1; LED_kuai=LED_zhong=LED_man=1; // wendu_stor=100; time_stor=100; }

Tags: 单片机   风扇   智能  

搜索
网站分类
标签列表