欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    基于STC89c52RC单片机的智能风扇设计.doc

    • 资源ID:9926548       资源大小:1.66MB        全文页数:37页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于STC89c52RC单片机的智能风扇设计.doc

    基于STC89C52RC单片机的智能风扇设计钟培文小组重庆大学 光电信息协会电子设计竞赛2014年6月10日目录摘要3ABSTRACT4一.总体方案和功能设计51.1 功能详细描述51.2设计思路6二.详细电路设计72.1电机调速电路72.2按键检测和LED指示82.3蜂鸣器模块92.4 LCD1602显示部分92.5红外接收模块10第三节.系统软件设计113.1主程序流程图113.2速度选择程序框图123.3模式选择框图123.4定时器0程序框图133.5定时器1程序框图133.6定时功能框图143.7LCD显示框图14结束语15附录1:源程序16附录2:实物照片35摘要本小组选择的题目为D题“智能风扇设计”,实际完成了所有题设要求部分,以及具有实用的创意设计。本文介绍了一台以STC89C52为控制核心,集调速,多模式,定时,液晶显示,红外遥控功能一体的智能风扇控制器设计过程。将传统的风扇用单片机来控制后极大增加了其智能化和实用化,同时也增强了功能性。关键字: STC89C52单片机 , 智能风扇ABSTRACTOur team chosethe subjectDcalled "intelligentfan design", and we have achieved allthe requirementsin this subject. Besides, we add our own ideas and creativity to make our design more functional.This report mainly introduces that we use theSTC89C52as the central controller, to design a intelligent fun integrated with speed setting, multi-mode, timer, LCD display and infraredremote control. After usingthe MCUto control thetraditional fan, we have greatlyimproved itsintelligence ,practicability,and also, thefunctionality.Keywords: STC89C52 Single chip microcomputer Intelligent fan一总体方案和功能设计1.1功能详细描述本设计以STC89C52单片机为控制核心,通过PWM控制直流电机3档调速,通过定时器实现对风扇3种模式的模拟,外部按键检测输入或者红外遥控输入指令,LED指示风扇速度和模式,LCD1602同步显示风扇速度(S),模式(M),提供定时功能,蜂鸣器按键发声。功能详细描述:1、 控制器面板为:按钮5个,分别为风速、类型、停止、定时选时、启动定时,LED指示灯六个,指示风速强、中、弱,类型为睡眠、自然和正常。2、 电扇处于停转状态时,所有指示灯不亮,只有按下“风速”键时,才会响应,进入起始工作状态;电扇在任何状态,只要按停止键,则进入停转状态。3、 处于工作状态时,有:初始状态为:风速-“弱”,类型-“正常”;按“风速”键,其状态由“弱” “中” “强” “弱” 往复循环改变,每按一下按键改变一次;按“类型”键,其状态由“正常” “睡眠” “自然” “正常” 往复循环改变;4、 风速的弱、中、强对应于电扇的转动由慢到快。 类型的不同选择,分别为:正常 电扇连续运转;自然 电扇模拟自然风,即转4s,停8s;睡眠 电扇慢转,产生轻柔的微风,运转 8s,停转8s;5、红外遥控器按键1到5分别对应按键1到5。按键1为调速,按键2为调整模式,按键3为停止,按键4为定时选时,按键5为启动定时(重复按键会取消定时)。6、当按键被按下或者接收到红外指令时蜂鸣器发声。7、LCD1602同步显示。当系统关闭时显示“Welcome!”,系统启动后显示“SYSTEM RUN!”8、定时功能,提供10s(测试),30分钟,1小时,2小时,3小时定时功能1.2设计思路整体电路采用模块化设计制作,整体框图如下:按键输入STC89C52LED显示PWM电机ULN2003驱动LCD1602外部中断0蜂鸣器红外输入ULN2003驱动USB TO TTL外接5v 1A供电二详细电路设计2.1电机调速电路电机调速是整个控制装置中的一个相当重要的方面。对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候,电源并非连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。通过控制PWM输出占空比控制输出,可以实现对电机的无极调速。2.2按键检测和LED指示设计中用到的按键数目不多,所以可以直接用STC89C51的通用IO端口且选用SYC89C51的P1口(内部有上拉电阻)作为按键扫描接口。对于按键只需一端接地另一接P1口即可。LED选用共阳接法,对应于P2.0至P2.52.3蜂鸣器模块蜂鸣器工作原理简介:当控制端口通以不同频率及不同占空比的信号时蜂鸣器将发出不同强度及不同频率的声音。由于其具有比传统的喇叭体积小格低等优点,所以此次提示音电路选用蜂鸣器。具体电路见下图:2.4 LCD1602显示部分通过1602同步显示各参数。采用P0口8位并行数据传输,液晶屏对比度加入电位器可调。2.5红外接收模块外接收电路通常被厂家集成在一个元件中,成为一体化红外接收头。 内部电路包括红外监测二极管,放大器,限幅器,带通滤波器,积分电路,比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流 信号进入带通滤波器,带通滤波器可以通过30khz到60khz的负载波,通过解调电路和积分电路进入比较器,比较器输出 高低电平,还原出发射端的信号波形。注意输出的高低电平和发射端是反相的,这样的目的是为了提高接收的灵敏度。三系统软件设计3.1主程序流程图3.2速度选择程序框图3.3模式选择框图3.4定时器0程序框图3.5定时器1程序框图3.6定时功能框图3.7LCD显示框图结束语首先,通过这次应用系统设计,在很大程度上提高了自己的独立思考能力和团队协作能力以及单片机的专业知识,也深刻了解制作电路的步骤和方法,有过这样的一次训练,相信在接下来的日子我们都会了,而且会做得更好。我所写的系统主要根据竞赛题目要求,采用了单片机控制自动化的结构形式,实现对电风扇转速的自动控制。系统以单片机STC89C52为核心部件,单片机系统完成对外界输入采集、处理、显示等功能;由Protues软件绘制电路图并进行仿真测试,利用C语言编制,运行程序该系统的主要特点是:l 适用性强,用户只需对界面参数进行设置并启动系统正常运行便可实现传统风扇各种功能。l 系统成本低廉,操作非常简单方便,随时可以根据软件编写新的功能加入产品。操作界面可扩展性强,只要稍加改变,即可增加其他按键的使用功能。l 具有非常强的使用价值。附录1:源程序#include<reg52.h>#define KeyPort P1/按键扫描#define CYCLE 10 #define uint unsigned int#define uchar unsigned charsbit PWM = P37; /定义pwm端口sbit led1=P20;/速度1sbit led2=P21;/速度2sbit led3=P22;/速度3sbit led4=P23;/正常sbit led5=P24;/自然sbit led6=P25;/睡眠sbit DSPORT=P36; sbitspk=P35;/蜂鸣器sbitlcden=P26;/1602sbitlcdrs=P27;sbit IR=P32; /红外接口/* 变量声明区 */uchar PWM_ON; /定义高电平时间uchar num,num2,key,beep_time,time3; /定时器1计时uint time1,time2; /tim是定时的时间,单位秒,为60的倍数uchartiming_flag=0;uinttim=0; /定时时间bit run_flag,r_flag,timing_run,timing_on,timing_r=1;/启动标志bit mode2_flag=0,mode3_flag=0,beep_on;bit p;/pwm开关uchari=0,j=0,a;/速度和模式切换标志unsigned char irtime; /红外用全局变量bitirpro_ok,irok;unsigned char IRcord4;unsigned char irdata33;uchar code table_1="Welcome!" ;uchar code table_21="S:" ;uchar code table_22="M:" ;/* 变量声明区 */* 函数声明区*/unsigned char KeyScan(void); /键盘扫描voidDelayus(uint t);void Delayms(uint t); /us延迟void Init_timer(void);/定时器初始化voidInit_all(void);void run(void);void start(void);void stop(void);voidchange_speed(void);voidchange_mode(void);void led(uchari,uchar j);voidfan_normal(void);voidfan_natural(void);voidfan_sleep(void);voidwrite_com(uchar com);voidwrite_data(uchar Data);void Init_1602(void);void Timing(void);void display2(void);voidwrite_string(unsigned char x,unsigned char y,unsigned char *s) ;voidwrite_char(unsigned char x,unsigned char y,unsigned char Data) ;void change_display2(void);voidIr_work(void);voidIrcordpro(void);void beep();/* 函数声明区 */void main (void) Init_all();while(1)key=KeyScan();if(irok) /如果接收好了进行红外处理 Ircordpro();irok=0;if(irpro_ok) /如果处理好后进行工作处理,如按对应的按/键后显示对应的数字等Ir_work(); switch(key)case 1: run_flag=1;beep();if(i=3)i=0;i+;start();break;case 2: beep();if(j=3)j=0;if(run_flag)+j;mode2_flag=0;mode3_flag=0;break;case 3: beep();if(run_flag)stop();break;case 4: beep();if(run_flag)timing_flag+;break; case 5: beep();if(run_flag)timing_run=timing_run;timing_on=timing_on;if(timing_flag)Timing();run();change_display2();if(time2=0 &&timing_on)stop();void Init_all(void)/全局初始化 PWM_ON=0;Init_timer();Init_1602();display2(); led(4,4);/关闭所有ledvoid start(void)if(run_flag=1 &&r_flag=0)PWM_ON=2;fan_normal();j=1; i=1;led(0,1);r_flag=1;p=1;void run(void)change_speed();change_mode(); /停止系统void stop(void)p=0;PWM_ON=0;run_flag=0;r_flag=0;Init_all();i=0,j=0,a=0;mode2_flag=0;mode3_flag=0;timing_flag=0;tim=0; timing_run=0;timing_on=0;write_string(11,1,"OFF "); /速度切换voidchange_speed(void)switch(i) case 1: PWM_ON=2;led(1,0);break;case 2: PWM_ON=4;led(2,0);break;case 3: PWM_ON=8;led(3,0);break; /模式切换voidchange_mode(void)switch(j) case 1: led(0,1);fan_normal();break;case 2: led(0,2);fan_natural();break;case 3: led(0,3);fan_sleep();break; /.led控制函数void led(ucharo,uchar p)switch(o)case 0: break;case 1: led1=0;led2=1;led3=1;break;case 2: led1=1;led2=0;led3=1;break;case 3: led1=1;led2=1;led3=0;break;case 4: led1=1;led2=1;led3=1;break; switch(p)case 0: break;case 1: led4=0;led5=1;led6=1;break;case 2: led4=1;led5=0;led6=1;break;case 3: led4=1;led5=1;led6=0;break;case 4: led4=1;led5=1;led6=1;break;/* 模式函数*/voidfan_normal(void) p=1;voidfan_natural(void)if(mode2_flag=0)time1=0; p=1;mode2_flag=1;if(time1=4)p=0;if(time1=12) p=1;time1=0;voidfan_sleep(void)if(mode3_flag=0)i=1;time1=0;p=1;mode3_flag=1; if(time1=8) p=0;if(time1=16) p=1; time1=0; /* 模式函数*/voidDelayus(uint t) while(-t);voidDelayms(uint n)while(-n) Delayus(245);Delayus(245); /*.初始化定时器 . */voidInit_timer(void) TMOD=0x11; TH1=0X00; TL1=0X00; TH0=(65536-50000)/256; TL0=(65536-50000)%256;irtime+; /外部中断 EA=1; IT0 = 1; /指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; ET0=1; ET1=1; TR0=1; TR1=1;/*-外部中断0初始化-*/ /定时器1pwmvoid Timer1(void) interrupt 3 using 1 staticuchar count; TH1=(65536-256)/256; TL1=(65536-256)%256;irtime+;time3+;if(time3=255 time3=0;if(beep_on=1)spk=!spk; if(beep_time=1)beep_on=0;if(p)if (count=PWM_ON) PWM = 0; count+;if(count = CYCLE) count=0;if(PWM_ON!=0)PWM = 1; /定时器0void Timer0(void) interrupt 1 TH0=(65536-50000)/256; TL0=(65536-50000)%256;num+;if(num=1)beep_time=1;if(num=20) num=0;time1+;if(time2)time2-; /*. .按键扫描. . */unsigned char KeyScan(void)unsigned char keyvalue;if(KeyPort!=0xff) Delayms(3);if(KeyPort!=0xff)keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue)case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;case 0xf7:return 4;break;case 0xef:return 5;break;case 0xdf:return 6;break;case 0xbf:return 7;break;case 0x7f:return 8;break;default:return 0;break; return 0;/*.定时功能定时器2.*/void Timing(void)switch(timing_flag)case 1: tim=10; if(timing_on=0)write_string(11,1,"00010");break;case 2: tim=1800; if(timing_on=0)write_string(11,1,"01800");break;/30mincase 3: tim=3600; if(timing_on=0)write_string(11,1,"03600");break;/60mincase 4: tim=7200;if(timing_on=0)write_string(11,1,"07200");break;/120mincase 5: tim=10800;if(timing_on=0)write_string(11,1,"10800");break; /180mincase 6: tim=0;timing_flag=0; write_string(11,1," ");/定时取消if(timing_on=0)timing_r=1;time2=0;if(timing_run&&timing_r&&timing_on)time2=tim;timing_r=0;timing_flag=0;/*.1602部分.*/voidwrite_com(uchar com)Delayms(5);lcdrs=0;lcden=1;P0=com;lcden=0;voidwrite_data(uchar Data) Delayms(5);lcdrs=1;lcden=1; P0=Data; ;lcden=0; /写入1602字符串voidwrite_string(ucharx,uchary,uchar *s) if (y = 0) write_com(0x80 + x); else write_com(0xC0 + x); while (*s) write_data( *s); s +; /1602写字符voidwrite_char(ucharx,uchary,uchar Data) if (y = 0) write_com(0x80 + x); else write_com(0xC0 + x); write_data(Data); void Init_1602(void) /初始化1602参数lcden=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);void display2(void)write_string(4,0,table_1);write_string(0,1,table_21);write_string(6,1,table_22);void change_display2(void)uchartime_asc5,a;time_asc0=time2/10000+0x30;time_asc1=time2%10000/1000+0x30;time_asc2=time2%10000%1000/100+0x30;time_asc3=time2%10000%1000%100/10+0x30;time_asc4=time2%10000%1000%100%10+0x30;if(timing_on=1)for(a=0;a<5;a+)write_char(11+a,1,time_asca);if(timing_flag=0 &&timing_on=0)write_string(14,1," ");write_string(11,1,"OFF");if(run_flag)write_string(2,0,"SYSTEM RUN!");elsewrite_string(4,0,table_1);switch(i)case 1: write_char(2,1,1);break;case 2: write_char(2,1,2);break;case 3: write_char(2,1,3);break;default: write_char(2,1,0);switch(j)case 1: write_char(8,1,1);break;case 2: write_char(8,1,2);break;case 3: write_char(8,1,3);break;default: write_char(8,1,0); /红外部分/*-外部中断0中断处理-*/void Ex0_ir (void) interrupt 0 /外部中断0服务函数 static unsigned char i; /接收红外信号处理 static bit startflag; /是否开始处理标志位if(startflag) if(irtime/10)<63&&(irtime>=33)/引导码 TC9012的头码,9ms+4.5msi=0;irdatai=irtime;/存储每个电平的持续时间,用于以后判断是0还是1irtime=0;i+;if(i=33)irok=1;i=0; elseirtime=0;startflag=1;void Ircordpro(void) /红外码值处理函数 uchari, j, k;ucharcord,value; k=1; for(i=0;i<4;i+) /处理4个字节 for(j=1;j<=8;j+) /处理1个字节8位 cord=irdatak;if(cord>7) value|=0x80;if(j<8)value>>=1;k+; IRcordi=value;value=0; irpro_ok=1;/处理完毕标志位置1void Ir_work(void)/红外键值散转程序 switch(IRcord2)/判断第三个数码值 case 0x0c:key=1;break;/1 返回相应的按键值case 0x18:key=2;break;/2case 0x5e:key=3;break;/3case 0x08:key=4;break;/4case 0x1c:key=5;break;/5default:break;irpro_ok=0;/处理完成标志/蜂鸣器void beep()if(run_flag) beep_on=1;beep_time=0; 附录2:实物照片

    注意事项

    本文(基于STC89c52RC单片机的智能风扇设计.doc)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开