当前位置:文档之家› 电风扇模拟控制系统设计

电风扇模拟控制系统设计

单片机原理与应用课程设计院(系):工业中心班级:106001姓名:王永安100203120路体力 100201114指导老师:王党利时间:2013.07.07目录一、设计题目 (4)二、总体方案设计及分析 (4)三、硬件原理图设计 (4)四、软件流程图及程序设计 (6)五、设计总结和心得体会 (13)摘要本次课程设计通过keilC软件和Proteus软件设计一个电风扇模拟控制系统设计。

基于AT89C51芯片实现了用四位数码管实时显示电风扇的工作状态,最高位显示风类:“自然风”显示“1”、“常风”显示“2”、“睡眠风”显示“3”。

后3位显示定时时间:动态倒计时显示剩余的定时时间,无定时显示“000”。

设计一个“定时”键,用于定时时间长短设置;设置一个“摇头”键用于控制电机摇头。

设计过热检测与保护电路,若风扇电机过热,则电机停止转动,电机冷却后电机又恢复转动。

最终完成了设计任务。

关键词:AT89C51 keilC软件 Proteus软件一、设计题目:电风扇模拟控制系统设计1、用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:“自然风”、“常风”和“睡眠风”。

2、设计“自然风”、“常风”和“睡眠风”三个风类键用于设置风类;设计一个“摇头”键用于控制电机摇头。

3、设计一个“定时”键,用于定时时间长短设置;4、设计过热检测与保护电路,若电风扇电机过热,则电机停止转动,蜂鸣器报警,电机冷却后电机又恢复转动。

5、用LCD作为用户界面显示风扇运行模式等信息。

6、其他功能。

二、总体方案设计分析、讨论1、程序说明:为了提高单片机的工作效率,不让单片机的工作消耗在延时上,所以在考虑单片几需要延时的时间里,单片机并不是做的无用功,仅仅是在执行消耗时间的“空指令”,而根据实际考虑出发,从本程序设计的思路来看,电机除了数码管显示和PWM调速部分需要一定延时外,其他指令都是uS级的,可以忽略不计,所以可以将数码管显示和PWM 调速部分做在一起,即数码管每一位显示需延时的几个毫秒的时间可以用来做处理PWM调速功能使用,通过设定,改变脉宽从而调速!经过实验,本方法能够十分有效的节约单片机的资源,并且各项功能能够很好的工作!2、程序功能说明:功能总共有三个按键控制“功能键/加”、“定时”、“摇头/减”,其中“功能键”“摇头”为多功能键。

初始状态时:风扇不转;数码管显示 POFF;当第一次按“功能/加”时风扇处于“自然风”电机转速最快;当第二次按“功能/加”时风扇处于“常风”电机转速为中速;当第三次按“功能/加”时风扇处于“睡眠风”电机转速为低速;当风扇处于停止状态时不可进入定时状态,只有当风扇运转时才能进入定时状态,当按下“定时”键进入定时状态后(定时指示灯亮),功能键/加键为定时时间加,当按下“摇头/减键时,为定时时间减,再次按下定时键时,定时功能启动,时间到停止,并显示“POFF”风扇运转时按下摇头,即电机开始摇头。

三、硬件原理图:该图是通过proteus7.0仿真设计和模拟的结果电风扇硬件控制系统四、软件流程图及程序设计*************************************************************************/#include"reg52.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned intsbit led=P1^0;sbit duan=P2^6;sbit wei=P2^7;sbit k1=P3^6; // 功能键/加键(3)sbit k2=P3^4;//定时功能键(1)sbit k3=P3^5;//摇头键/减键sbit pwm=P2^1;sbit zz=P2^1;sbit fz=P2^2;uint t=50000,g=1; //g用来表是选的风功能,tt定时的时间 uchar f,biao1=0,sudd ;int tt=0;uchar kk=1;uint aa=5;/************才初始化函数**************************************/ void init (){EA=1;ET0=1;// TR0=1;TMOD=0X01; //定时器0工作方式1 16位TH0=(65536-t)/256;TL0=(65536-t)%256;}/***************************************************/uchar code sz[]={0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x71,/*F*/// 100x5C,/*o*/ //110x73// p 12};void delay(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=50;j>0;j--);}/********pwm调速兼作延时**************************/void pwmdelay(uchar qq){pwm=1;delay(1);pwm=0;delay(qq);pwm=1;}/************当风扇停止时显示的函数*******************************/ void display2(){P0=sz[12];duan=1;duan=0;P0=0xfe;wei=1;wei=0;delay(10);//pwmdelay(sudu);P0=sz[0];duan=1;duan=0;P0=0xfd;wei=1;wei=0;delay(10);// pwmdelay(sudu);P0=sz[10];duan=1;duan=0;P0=0xfb;wei=1;wei=0;delay(10);// pwmdelay(sudu);P0=sz[10];duan=1;duan=0;P0=0xf7;wei=1;wei=0;delay(10);// pwmdelay(sudu);P0=0xff;wei=1;wei=0;P0=0x00; //关闭数码管显示防止闪烁duan=1;duan=0;}/**************显示函数 *****************************/ void display(uint shu){uchar qian,bai,shi,ge;qian=biao1;bai=shu/100;shi=(shu%100)/10;ge=(shu%10);P0=sz[qian];duan=1;duan=0;P0=0xfe;wei=1;wei=0;//delay(1);pwmdelay(sudu);P0=sz[bai];duan=1;duan=0;P0=0xfd;wei=1;wei=0;//delay(1);pwmdelay(sudu);P0=sz[shi];duan=1;duan=0;P0=0xfb;wei=1;wei=0;// delay(1);pwmdelay(sudu);P0=sz[ge];duan=1;duan=0;P0=0xf7;wei=1;wei=0;//delay(1);pwmdelay(sudu);P0=0x00; //关闭数码管显示防止闪烁duan=1;duan=0;P0=0xff;wei=1;wei=0;}/**************************************************//***************键盘程序***********************************/ void kescan(){uchar biao2;//一键多功能的标号/**************************************/if(k1==0)//功能键一键多功能键自然风常风睡眠风停止{delay(50);if(k1==0){pwm=0; //关闭电机while(!k1);//等待释放按键biao1++;//功能选择if(biao1==4)//只允许四种状态biao1=0;}}/***********************************************/if(biao1!=0) //功能0时不可以设置定时功能 {if(k2==0)//定时功能键按一次设置第二次确认{delay(50);if(k2==0){tt=000; //如果进入定时功能则显示全部清零 TR0=0;//确认按键俺下后关闭定时器while(!k2);//等待释放按键biao2=1;while(biao2)//如果不再次按下K2则将一直保持设置状态 {led=0;if(k1==0){delay(50);if(k1==0){while(!k1);tt=tt+10;if(tt>990) //tt=0;}}if(k3==0){delay(50);if(k3==0){while(!k3);tt=tt-10;if(tt<0) //tt=990;}}display(tt);//刷新设置的时间if(k2==0) //k2是否再次按下{delay(50);if(k2==0){while(!k2);if(tt>0) //如果进入定时设置后没有设置时间则不能退出定时功能biao2=0;}}}TR0=1; //设置好定时功能后开启定时器led=1;}TR0=1;//开启定时器}}}/************功能函数**********************/void gongnen(){while(biao1==0){pwm=0;tt=0;kescan();display2();}if(biao1==1) //功能1 自然风{sudu=0;}if(biao1==2)//功能2 常风{sudu=4;}if(biao1==3) //功能3 睡眠风{sudu=10;}}/*************************************/void main(){init();while(1){kescan();display(tt);gongnen();}}/*****************************************//*****************定时器0中断函数************************/void t_0()interrupt 1{TH0=(65536-t)/256;TL0=(65536-t)%256;f++;if(f==20){ f=0;tt--;}if(tt==0) // 如果定时到了显示为000,电机关闭{tt=000;biao1=0;//使电机不转TR0=0;}}五、设计总结和心得体会课程设计是培养学生综合所学知识,发现、提出、分析和解决实际问题,锻炼自身能力的重要培养,是对我们学生能力的具体陪练和考察过程。

相关主题