51单片机课程设计_第1页
51单片机课程设计_第2页
51单片机课程设计_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、智能电风扇的设计学院计算机与控制工程学院专业班级自动化073班学生姓名冯文科指导教师白晓乐夏康伟2010年6月25日随着人们生活水平及科技水平的不断提高,现在家用电器在款式、功能等方面日益求精,并朝着健康、安全、多功能、节能等方向发展。过去的电器不断的显露出其不足之处。电风扇作为家用电器的一种,同样存在类似的问题。现在电风扇的现状:大部分只有手动调速,再加上一个定时器,功能单一。存在的隐患或不足:比如说人们常常离开后忘记关闭电风扇,浪费电且不说还容易引发火灾,长时间工作还容易损坏电器。再比如说前半夜温度高电风扇调的风速较高,但到了后半夜气温下降,风速不会随着气温变化,容易着凉。之所以会产生这些

2、隐患的根本原因是:缺乏对环境的检测。如果能使电风扇具有对环境进行检测的功能,当房间里面没有人时能自动的关闭电风扇;当温度下降时能自动的减小风速甚至关闭风扇,这样一来就避免了上述的不足。本次设计就是围绕这两点对现有电风扇进行改进。1?总体方案设计及功能描述本设计是以AT89C51单片机控制中心,主要通过提取热释电红外传感器感应到的人体红外线信息和温度传感器DS18B20得到的温度以及内部定时器设定时间长短来控制电风扇的开关及转速的变化。功能描述:电风扇工作在四种状态:手动调速状态、自动调速状态、定时状态、停止状态。手动状态时可以手动调节速度;自动状态时通过温度高低自动调节速度,如果出现手动现象则

3、变为手动状态;定时状态时可以调节定时时间,并设定是否启动定时,之后可以手动退出,也可以在不操作6秒后自动退出进入手动状态;停止状态时可以被唤醒并进入自动状态。当没有检测到人体存在超过3分钟或定时完毕时进入停止状态。在数码管显示方面,当没有定时时,只显示气温,当定时启动时气温和定时剩余时间以3秒的速度交替显示。系统方框图如下图所示,主要包括:输入、控制、输出三大部分8个功能模块。2.功能模块硬牛简介与实现所以可以直接耳一AT89C51的通用极管0端口且选用作为键盘接口。对对于按键只需二端接地另二端接AN1一蜂鸣器.X?图2-1图1-1系统方框图继电器2.1键盘输入电路由于设计中用到的按键数目不多

4、,AT-9C5.8热的电红外虑命内部有上担电®1口即可。见下图(2-1):2.2热释电度传外传感器;模块ADS18B20(DS18B202.21>释电红外线传感器原理简介人体辐射的红外线中心波长为910um,而探测元件的波长灵敏度在0.220um范围内几乎稳定不变。在传感器顶端开设了一个装有滤光镜片的窗口,这个滤光片可通过光的波长范围为710um,正好适合于人体红外辐射的探测,而对其它波长的红外线由滤光片予以吸收,这样便形成了一种专门用作探测人体辐射的红外线传感器。实质上热释电传感器是对温度敏感的传感器。它由陶瓷氧化物或压电晶体元件组成,在元件两个表面做成电极,如图2所示。在环

5、境温度有AT的变化时,由于有热释电效应,在两个电极上会产生电荷4Q,即在两电极之间产生一微弱的电压222热释电红外线传感器应用热释电红外线传感器有三个端口,如图2-2所示:一个接电源、一个接地、一个信号端口,当有人们就是利用这个跳变来判断是否有进入其检测区域时,信号端口便产生一个电平跳变,并维持数秒钟,我人在这个检测区域。绅线传感器闵图2-2VccSIG2.3.1温度传感器DS18B20简GND介2.3温度传感器VCC-T-工23新型数字温度传感器DS18420具有体积更小、精度更高、适用电压更宽、采用一线总线,在实际应用中取得了良好的测温效果。DS18B20的主要特性:(1)独特的单线接口方

6、式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)测温温范围一55C?+125C(3)最高分辨率为0.0625C。2.3.2DS18B20的一般操作过程、初始化;、跳过ROM(命令:CCH);(4)、温度变换(命令:44H);读暂存存储器(命令:BEH);注:每次读取温度都要经过上面四个过程2.3.3DS18B20的温度存储方式即温度计算DS18B20是用12位存储温度,最高位为符号位,下图为它的温度存储方式2A3222A12A02A-12A-22A-32A-4LSBYTEBit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0SSSS

7、S2A62A52A4MSBYTEBit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8表2-1DS18B20温度存储地址分配这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。2.4数码管显示电路2.4174IS164简介移位寄存器是一类应用很广的时序逻辑电路,在时钟脉冲的作用下,低位寄存器的数码送给高位寄存器,作为高位寄存器的次态输出。在时钟脉冲的作

8、用下,高位寄存器的数码送给低位寄存器,作为低位寄存器的次态输出;移位寄存器:除具寄存器的功能外,所存储的数码在时钟脉冲的作用下还可以移位。74IS164是八位串入并出移位寄存器,其工作电压范围4.755.25V,大于2V的高电平输入、小于0.8V的低电平输入,clock最高响应频率为25MHZ,八位并行输出可以直接驱动八段数码管。OUTPUTS-图2-374ls164的引脚图及功能图OgOfOeCLEARCLOCKInputsVccOH2424共阴极八段数码管简介8Clear共阴极八段殳数码管是将各八段发光二极管封装在一起其图如下图所示,公共端接低电平,八它八个端口高电平立点亮相应的Outpu

9、ts低电平相反IH图2-4HQboQh0Oh2.43显示电路设计QAnQGn此显示电路采用动电路,睬用共阴极八段数码管原理图示意图如下-VOUTPUTS用现串并出U1布74LS164作为驱QAnQGnSERIALINPUTS数码管数码管从图中可以2、移位脉冲线。它只占用很少的IO74IS164的引脚图及功能图如下所示:口。2.5发发光二极管|电路发光二极管4的反向击穿电压约5伏。它的发光二极管简称为LED正向伏安特性曲线很陡,使用时必须串联限它是半导体二极管的一种流电阻以控制通过管子的电流限流电阻kR可用下式计算:R=(E-Uf)/If式中E为电源电压,Uf为LED的正向压降,If为LED的一

10、般工作电流。"二极管的两根引线中较长的一根为正极,应按电源正极。与小白炽灯泡和钗灯相比,发光二极管的特点是:工作电压很低(有的"点几伏);工作电流很小(有的仅零点几毫安即可发光);抗冲击和抗震性能好,可靠性高,寿命长;通过调制通过的电流强弱可以方便地调制发光的强弱。由于有这些特点,发光二极管在一些光电控制设备中用作光源,在许多电子设备中用作信号显示器。由于AT89C51的P0口是开漏输出,所以此电路可以申位如下简单形式V5图A|-2.6蜂鸣器电路蜂鸣器工作原理简介当控制端口通以不同频率及不同占空比的信号时蜂鸣器将发出不同强度及不同频率的声音。由于其具有比传统的喇叭体积小,价

11、格低等优点,所以此次提示音电路选用蜂鸣器。具体电路见下图:VCC图2-7一2.7继电器控制电路2.7.1继电器简介1K继电器是一种电子控制器件,它具有控制系统(又9012称输入回路)和被控制系统(乂称输出回路),通常应用于自动控制电路中,它实(一")际上是用较小的电流去控制较大电流全保护、转换电路等作用的一种自动开关”故在电路中起着自动调节、安它有几个:.蜂鸣器的电压重要指标:1、额定工作电压:正常工作时线圈所需要2、直流电阻:继电器中线圈的直流电阻3、吸合电流:继电器能够产生吸合动作的最小电流4、释放电流:继电器产生释放动作的最大电流。5、触点切换电压和电流:继电器允许加载的电压和

12、电流。2.7.2继电器驱动电路设计及工作原理简介采用晶闸管也可以用于小电流控制大电流电路,但是其控制电路比较复杂,而采用继电器其控制电断开,常闭、常开触电复位路就比较简单,且具有电气隔离作用。虽然其响应速度没有晶闸管快但在低频情况下采用继电器控制电开,常开触点闭合。当控3.软件设计与实现CON3通继电器吸合,常闭触电断继电器线圈通过二极管放电并3.1整体设计思路介绍软件设计整体思路:主程序部分进行一些初始化以及温度的读取;外部中断红外线感应延时时间的重新加载;定时器0进行键盘的扫描及相关操作;定时器1进行。进行路较为方便。其电路图如下所示:显示、温控速度、以及相关需要延时(如倒计时等等)的操作

13、。在显示方面,进行了一为高电些改善一一要显示的值有变化才进行重新刷新,否则不刷新。这样就大大提高了效率及最终的显示效果(不会出现不该亮的部分还有亮的现象)3.2主要部分流程图如下:321主程序流程图主程序开始322外部中断流程图定时器,4开定时初始化内部资源3.2.3定时器0中断流程图图-33YN再到对思路逐渐定时器重新开始I八初束语图3-2外部中断开始I读取一个正确温度并选择速度八-'定时状态早在定母片机键盘理及瘗吐技不云区J白动状:键盘.,单片机的课程设计。我从取初的楚然用动到慢慢的进入状态I的清晰,E削催语言来表达如果有关熟贝吊设的空见惯的,设计,时望能把主题定位得更行能电风扇的

14、设时间能时器1Or初于化51清晰,/定时从上如果有定JrH®O|®J®如性果有定时则正好夏天4B收麋工作中,当时面对浩德显景琴是有些茫>/-1就不满足于那替显示,没有则显示时间风扇题目确定下来,我便立刻着手资料的然,。在导老师的指导及同学的帮助下,我终于对自己的工作方向和方法资料已进入定时状态有了超%我开始着手论文的写作。在写作过寸程中遇到困难我就及!时和导师联系,并和同学互相交流,请教专业课老师。在大家的帮助下,困难一个手动状解决掉,论仑文也慢慢成型对的任务后整个人都很累,但同时看着当我终于完成了所有打I、绘图、排版、校电脑荧屏上的课程设计稿出定时的心里是

15、甜的,我觉得这一切都值了。这次课程设计论文勺一次再的制作过程是我的学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。本设计最终实现了电风扇的手动调速、温控自动调速、定时、温度显示、人体检测等预期功能,其中定时在1到99分钟连续可调,人体检测范围角度120度、距离6米,人体检测延时时间3分钟,定时器自动退出时间6秒。存在不足之处就是人体检测抗干扰方面不够好,需要提局。我不会忘记这难忘的半个月的时间。课程设计论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和义奋;亲手用protel99se设计电路图的时间里,记忆最深的是每一

16、步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实则蕴藏着无尽的宝藏。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。在这次课程设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商虽,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。在此更要感谢我的指导老师和专业老师,是你们的细心指导和关怀,使我能够顺利的完成课程设计。附录:程序清单m*touwenjian.htypedefunsignedcharbyte;typedefunsignedintword;

17、/以下管脚配置ds18b20部分sbitDQ=P3A4;显示部分sbitDB=P2A0;sbitCP=P2A1;/发光显示部分sbitLED_dingshi=P0A0;sbitLED_shoudong=P0A1;sbitLED_zidong=P0A2;sbitLED_kuai=P0A3;sbitLED_zhong=P0A4;sbitLED_man=P0A5;/键盘定义部分#definewujian0x3fsbitKEY1=P1A0;状态转换/启动sbitKEY2=P1A1;sbitKEY3=P1A2;/+10/1/-10/2sbitsbitAKEY5=PM4;/3/0确定继电器控制部分sbit

18、s&q仁p2a4;sd(q2=p2a5;JDQ3=P2A6;蜂鸣器部分sbitcall=P2A7;/0表小开通,1表小关断低电平鸣叫/*.*一ds18b20.c*#include<REGX51.H>#include"touwenjian.h”/*延时子程序*/externvoiddelay(worduseconds)(for(;useconds>0;useconds-);)/*复位子程序*/staticbyteow_reset(void)(bytepresence;EA=0;DQ=0;/pullDQlinelowdelay(45);/leaveitlowfo

19、r480us/551usDQ=1;/allowlinetoreturnhighdelay(4);/waitforpresence/61uspresence=DQ;/getpresencesignaldelay(40);/waitforendoftimeslot/491usEA=1;return(presence);/presencesignalreturned/0=presence,1=nopartI*从1-wire总线上读取一个字节子程序*staticbyteread_byte(void)bytei;bytevalue=0;EA=0;for(i=8;i>0;i-)(value>&

20、gt;=1;DQ=0;/pullDQlowtostarttimeslotDQ=1;/thenreturnhigh(unsignedchari;for(i=0;i<2;i+);/11usif(DQ)value|=0x80;delay(6);/waitforrestoftimeslotEA=1;return(value);*/mmmmmmmmm*向1-WIRE总线上写一个字节/staticvoidwrite_byte(charval)(bytei;EA=0;for(i=8;i>0;i-)/writesbyte,onebitatatime(DQ=0;/pullDQlowtostartti

21、meslotDQ=0;DQ=val&0x01;/6USdelay(5);/holdvalueforremainderoftimeslot/74usDQ=1;val=val>>1;EA=1;delay(5);*word*Read_Temperature(void)union(bytec2;wordx;temp;ow_reset();write_byte(0xCC);/SkipROMwrite_byte(0xBE);/ReadScratchPadtemp.c1=read_byte();temp.c0=read_byte();ow_reset();write_byte(0xCC)

22、;/SkipROMwrite_byte(0x44);/StartConversionreturntemp.x;*/*求解温度/externbyteReal_Tem(void)wordwen;wen=Read_Temperature();return(wen>>4)&0x00ff);Main.c/*/#include*<REGX51.H>#include"touwenjian.h数据区#definetime_default41bytedingshi_time=time_default;存放定时时间”bitflag_dingshi=0;/0表示没有定时wo

23、rddingshi_jishu3=1000;/1000*60=1分钟/bitflag_dingshi_delay=0;/1表示有bytedingshi_delay=100;/#definehwx_delay_const3/人体感应延时时间bytehwx_delay=hwx_delay_const;/用于保存红夕卜线触发延长时间wordhwx_jishu1=0;/bytewendu=0;/用于存放温度值”/#definelow_wen18#definemid_wen20#definehig_wen24#definevhi_wen28/bytetime_stor=100;/存储主观时间触发显示by

24、tewendu_stor=low_wen;存储主观温度触发显示/enumstation0(zidong,dingshi,shoudong,weakstate;函数说明区externbyteReal_Tem(void);externvoiddelay(worduseconds);voidmingjiao(void);voiddisplay(byteinput,bitkkl);*voidauto_speed(void);voidweak_default(void);/主程序/voidmain()*/定时器0用于键盘扫描TMOD=0x01|TMOD;/定时器0的1方式TH0=0xd8;TL0=0xf

25、0;/定时器0初始化10ms扫描一次/定时器1用于显示TMOD=0x10|TMOD;/定时器1的1方式TH1=0x15;TL1=0xA0;/定时器1初始化60ms中断一次外部中断TCON=TCON|Ox01;外部中断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=

26、1;开启定时器0TR1=1;while(1)(wendu=Real_Tem();)*定时器0中断服务子程序功能:进行键盘处理说明:键盘输入为P1.0到P1.4*/voidtime0(void)interrupt1(bytejianpan;TH0=0xd8;TL0=0xf0;jianpan=P1&wujian;if(jianpan!=wujian)/如果还有键盘值提取键盘值(delay(500);延时消抖jianpan=P1&wujian;if(jianpan=wujian)gototime_out;switch(state)(casedingshi:if(KEY1=0)/状态转

27、换时做些相应的处理(state=shoudong;LED_shoudong=0;flag_dingshi_delay=0;dingshi_delay=100;time_stor=100;wendu_stor=100;/触发mingjiao();while(KEY1=0);)elseif(KEY2=0)加分(if(dingshi_time<90)dingshi_time+=10;dingshi_delay=100;/mingjiao();while(KEY2=0);elseif(KEY3=0)/减分if(dingshi_time>10)dingshi_time-=10;dingshi

28、_delay=100;/mingjiao();while(KEY3=0);elseif(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);elseif(KEY5=0)weak_default();mingjiao();while(KEY5=0);break;caseshoudong:if(KEY1=0)/状态转换时做些相应的处理state=

29、zidong;auto_speed();LED_shoudong=1;LED_zidong=0;mingjiao();while(KEY1=0);elseif(KEY2=0)/快1JDQ2=1;JDQ3=1;JDQ1=0;/关断其它LED_zhong=LED_man=1;LED_kuai=0;mingjiao();while(KEY2=0);elseif(KEY3=0)中2JDQ1=1;JDQ3=1;JDQ2=0;关断其它LED_kuai=LED_man=1;LED_zhong=0;mingjiao();while(KEY3=0);elseif(KEY4=0)慢3JDQ1=1;JDQ2=1;J

30、DQ3=0;关断其它LED_zhong=LED_kuai=1;LED_man=0;mingjiao();while(KEY4=0);)elseif(KEY5=0)停4(weak_default();mingjiao();while(KEY5=0);break;casezidong:if(KEY1=0)/状态转换时做些相应的处理(state=dingshi;LED_zidong=1;flag_dingshi_delay=1;dingshi_delay=100;/开始延时time_stor=100;/mingjiao();while(KEY1=0);elseif(KEY2=0)/快1(JDQ2=1

31、;JDQ3=1;JDQ仁0;/关断其它LED_zhong=LED_man=1;LED_kuai=0;state=shoudong;LED_zidong=1;LED_shoudong=0;mingjiao();while(KEY2=0);elseif(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);elseif(KEY4=0)/慢3(JDQ1=1;JDQ2=1;JDQ3=0;关

32、断其它LED_zhong=LED_kuai=1;LED_man=0;state=shoudong;LED_zidong=1;LED_shoudong=0;mingjiao();while(KEY4=0);elseif(KEY5=0)/停4(weak_default();mingjiao();while(KEY5=0);break;caseweak:if(KEY1=0)(state=zidong;LED_zidong=0;wendu_stor=100;/两个不可能值time_stor=100;两个不可能值auto_speed();mingjiao();while(KEY1=0);break;ti

33、me_out:;/*定时器1中断服务子程序功能:用于定时0.060s*/voidtimer1(void)interrupt3(TH1=0x15;TL1=0xa0;/红外线到记时EX0=0;if(hwx_jishu1<999)hwx_jishu1+;elsehwx_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

34、)dingshi_time-;elseweak_default();/5秒延时if(flag_dingshi_delay=1)if(dingshi_delay>1)dingshi_delay-;elsestate=shoudong;flag_dingshi_delay=0;dingshi_delay=100;LED_shoudong=0;time_stor=100;wendu_stor=100;/mingjiao();显示和温控switch(state)casedingshi:/在定时的时候只显示时间if(time_stor!=dingshi_time)display(dingshi_t

35、ime,1);time_stor=dingshi_time;/break;caseshoudong:casezidong:/是否有定时,有则交替显示温度和时间,没有则只显示温度if(flag_dingshi!=0)/staticbytejiaoti_jishu2=0;staticbitflag_jiaoti=0;if(jiaoti_jishu2<49)jiaoti_jishu2+;elseflag_jiaoti=flag_jiaoti;jiaoti_jishu2=0;if(flag_jiaoti!=0)if(time_stor!=dingshi_time)display(dingshi_

36、time,1);time_stor=dingshi_time;wendu_stor=100;/显示时间elseif(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)caselow_wen:JDQ1=1;JDQ2=1;JDQ3=1;LED_zhong=LED_man=LED_kuai=1;/tingzhibreak;casemid_wen:JDQ1=1;JDQ2=1;JDQ3=0;LED_zhong=LED_kuai=1;LED_man=0;/manbreak;casehig_wen:JDQ1=1;JDQ3=1;JDQ2=0;LED_kuai=LED_man=1;LED_zhong=0;/zhongbreak;casevhi_wen:JDQ2=1;JDQ3=1;JDQ1=0;LED_zhong=LED_man=1;LED_ku

温馨提示

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

评论

0/150

提交评论