




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
光电信息协会电子设计竞赛钟培文小组基于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 chose the subject D called intelligent fan design, and we have achieved all the requirements in this subject. Besides, we add our own ideas and creativity to make our design more functional. This report mainly introduces that we use the STC89C52 as the central controller, to design a intelligent fun integrated with speed setting, multi-mode, timer, LCD display and infrared remote control. After using the MCU to control the traditional fan, we have greatly improved its intelligence ,practicability, and also, the functionality.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#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; sbit spk=P35;/蜂鸣器sbit lcden=P26;/1602sbit lcdrs=P27;sbit IR=P32; /红外接口/* 变量声明区 */uchar PWM_ON; /定义高电平时间uchar num,num2,key,beep_time,time3; /定时器1计时uint time1,time2; /tim是定时的时间,单位秒,为60的倍数uchar timing_flag=0;uint tim=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开关 uchar i=0,j=0,a; /速度和模式切换标志unsigned char irtime; /红外用全局变量bit irpro_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); /键盘扫描void Delayus(uint t);void Delayms(uint t); /us延迟 void Init_timer(void);/定时器初始化 void Init_all(void);void run(void);void start(void);void stop(void);void change_speed(void);void change_mode(void);void led(uchar i,uchar j);void fan_normal(void);void fan_natural(void);void fan_sleep(void);void write_com(uchar com);void write_data(uchar Data);void Init_1602(void);void Timing(void);void display2(void);void write_string(unsigned char x,unsigned char y,unsigned char *s) ; void write_char(unsigned char x,unsigned char y,unsigned char Data) ;void change_display2(void);void Ir_work(void);void Ircordpro(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 ); /速度切换void change_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; /模式切换void change_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(uchar o,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;/* 模式函数 */void fan_normal(void) p=1; void fan_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;void fan_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; /* 模式函数 */void Delayus(uint t) while(-t);void Delayms(uint n) while(-n) Delayus(245);Delayus(245); /*.初始化定时器 . */void Init_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 static uchar 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部分.*/void write_com(uchar com)Delayms(5); lcdrs=0;lcden=1;P0=com;lcden=0;void write_data(uchar Data) Delayms(5); lcdrs=1; lcden=1; P0=Data; ; lcden=0; /写入1602字符串 void write_string(uchar x,uchar y,uchar *s) if (y = 0) write_com(0x80 + x); else write_com(0xC0 + x); while (*s) write_data( *s); s +; /1602写字符 void write_char(uchar x,uchar y,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)uchar time_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;a5;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_strin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理理论笔试题及答案
- 2025年人力资源部门招聘面试实战模拟题集
- 2025年谷物加工品质测试仪项目申请报告
- 2025年中国灯笼制作师认证考试模拟题及答案详解
- 安全人员考试试题及答案
- 水下砼浇筑施工方案
- 2025【合同范本】物业管理委托合同
- 2025年乡镇农技站招聘农产品质量安全协管员考试要点解析
- 2025年健康管理师专业技能提升考试题集
- 2025年医疗救护员应聘面试热点解析及模拟题答案
- 照相凹版制版法课件
- 《无人机组装与调试》课件 第一章
- 轨行区作业安全专项方案
- 科技创新领军人才申请表
- 云南省食品经营许可申请表
- 高中物理进阶学习资料-第3章 刚体力学基础(大学物理版)
- 校园管制刀具排查记录表
- 折弯机保养记录表
- 财务管理学及财务知识分析笔记串讲
- 07FK02防空地下室通风设备安装PDF高清图集
- 项目费用申请表
评论
0/150
提交评论