电风扇模拟控制系统设计.docx
《电风扇模拟控制系统设计.docx》由会员分享,可在线阅读,更多相关《电风扇模拟控制系统设计.docx(10页珍藏版)》请在冰豆网上搜索。
电风扇模拟控制系统设计
单片机原理与应用课
院(系):
工业中心
班级:
106001
姓名:
王永安0路体力4指导老师:
王党利时间:
目录
、设计题目二、总体方案设计及分析
三、硬件原理图设计
四、软件流程图及程序设计五、设计总结和心得体会
摘要
本次课程设计通过keilC软件和Proteus软件设计一个电风扇模拟控制系统设计。
基于
AT89C51芯片实现了用四位数码管实时显示电风扇的工作状态,最高位显示风类:
“自然风”
显示“1”、“常风”显示“2”、“睡眠风”显示“3”。
后3位显示定时时间:
动态倒计时显示剩余的定时时间,无定时显示“000”。
设计一个“定时”键,用于定时时间长短设置;
设置一个“摇头”键用于控制电机摇头。
设计过热检测与保护电路,若风扇电机过热,则电
机停止转动,电机冷却后电机又恢复转动。
最终完成了设计任务。
关键词:
AT89C51keilC软件Proteus软件
一、设计题目:
电风扇模拟控制系统设计
1、用4个LED显示电风扇的工作状态(1,2,3,4四档风力),显示风类:
“自然风”、“常风”和“睡眠风”。
2、设计“自然风”、“常风”和“睡眠风”三个风类键用于设置风类;设计一个“摇头”键用于控制电机摇头。
3、设计一个“定时”键,用于定时时间长短设置;
4、设计过热检测与保护电路,若电风扇电机过热,则电机停止转动,蜂鸣器报警,电机冷却后电机又恢复转动。
5、用LCD作为用户界面显示风扇运行模式等信息。
6、其他功能。
二、总体方案设计分析、讨论
1、程序说明:
为了提高单片机的工作效率,不让单片机的工作消耗在延时上,所以在考虑单片几需要延时的时间里,单片机并不是做的无用功,仅仅是在执行消耗时间的“空指令”,而根据实际考虑出发,从本程序设计的思路来看,电机除了数码管显示和PWM调速部分需要一定延时外,其他指令都是uS级的,可以忽略不计,所以可以将数码管显示和PWM调速部分做在一起,即数码管每一位显示需延时的几个毫秒的时间可以用来做处理PWM调速功能使
用,通过设定,改变脉宽从而调速!
经过实验,本方法能够十分有效的节约单片机的资源,并且各项功能能够很好的
工作!
2、程序功能说明:
功能总共有三个按键控制“功能键/加”、“定时”、“摇头/减”,其中“功能键”“摇头”为多功能键。
初始状态时:
风扇不转;数码管显示POFF;
当第一次按“功能/加”时风扇处于“自然风”电机转速最快;当第二次按“功能/加”时风扇处于“常风”电机转速为中速;当第三次按“功能/加”时风扇处于“睡眠风”电机转速为低速;当风扇处于停止状态时不可进入定时状态,只有当风扇运转时才能进入定时状态,当按下“定时”键进入定时状态后(定时指示灯亮),功能键/加键为定时时间加,当按下“摇头/减键时,为定时时间减,再次按下定时键时,定时功能启动,时间到停止,并显示“POFF”风扇运转时按下摇头,即电机开始摇头。
三、硬件原理图:
该图是通过仿真设计和模拟的结果
电风扇硬件控制系统
四、软件流程图及程序设计
#include""
#include""
#defineucharunsignedchar#defineuintunsignedintsbitled=P1^0;
sbitduan=P2^6;
功能键/加键(3)定时功能键
(1)摇头键/减键
sbitwei=P2^7;
sbitk1=P3^6;//
sbitk2=P3^4;//sbitk3=P3^5;//sbitpwm=P2^1;
sbitzz=P2^1;
sbitfz=P2^2;
//g用来表是选的风功能,tt定时的时间
uintt=50000,g=1;ucharf,biao1=0,sudd;
inttt=0;
ucharkk=1;
uintaa=5;
才初始化函数************************************
voidinit()
EA=1;
ET0=1;
//TR0=1;
TMOD=0X01;//定时器0工作方式116位
TH0=(65536-t)/256;
TL0=(65536-t)%256;
}
ucharcodesz[]=
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
0x71,/*F*///10
0x5C,/*o*///11
0x73//p12
};
voiddelay(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=50;j>0;j--);
******pwm
调速兼作延时************************
voidpwmdelay(ucharqq)
pwm=1;
delay
(1);
pwm=0;delay(qq);
pwm=1;
当风扇停止时显示的函数
voiddisplay2()
{
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;
}
voiddisplay(uintshu)
ucharqian,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;
}
/**************************************************/
/***************
键盘程序***********************************/
voidkescan()
{
ucharbiao2;//一键多功能的标号/**************************************/
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;//开启定时器
while(biao1==0)
{
}
if(biao1==1)//功能1自然风
{sudu=0;}
if(biao1==2)//功能2常风{sudu=4;}
if(biao1==3)//功能3睡眠风{sudu=10;}
voidmain()
{
init();
while
(1)
{kescan();display(tt);gongnen();
}
}
voidt_0()interrupt1
{
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;
}
}
五、设计总结和心得体会
课程设计是培养学生综合所学知识,发现、提出、分析和解决实际问题,锻炼自身能力的重要培养,是对我们学生能力的具体陪练和考察过程。
短短一周的时间,我们做完了我们小组的单片机实验,感触很深,我们小组做的是“电风扇模拟控制系统设计”对我们很有挑战,虽然在别人眼中我们的实验很简单,不过我们还是遇到了很多困难。
随着科学发展的日新月异,单片机已成为当今计算机应用中活跃的领域,在我们的生活中可以说是无处不在,因此作为电力系统的学生不得不掌握它,这次的实验设计,对我们是一种挑战,更是一种考验,怎么才能找到课堂所学与实际应用的最佳结合点怎样才能使自己更专业化怎样才能使自己的设计更具有序性,而不会忙无一用,这都是我们所要考虑和努力的。
这次的课程设计我学到很多东西,学到了怎么去制定设计,怎么去实现设计,并掌握了在执行过程中怎样克服心理上的不良情绪,不仅巩固了所学的知识,而且学习到了许多书上所没有的东西,我从中掌握了系统的研究方法,可以进行一些简易的编程。
在这次设计任务中,通过我们三人的共同努力,老师的精心指导,还有和在网上找到的资料,我们主要掌握了动态发光显示数码管的编程,掌握了数据运算的编程方法,这也是编程必须掌握的知识,当然仿真与调试也是一个很重要的环节,也让我们收获良多,这其中就是硬件和软件两部分,虽然我们没有做硬件,但软件的制作与编程我们也做得很认真。
你必须对程序的每部分都很熟悉,掌握每句程序的作用,这样你出现问题时才能根据问题改编程序,我们出现问题最多的也是在这个地方,对编程的不全面理解,导致我们不能顺利的完成这个程序任务,当然也有很多细节问题,我们三人小组的第一次合作还不是配合得很好,这也浪费了我们许多时间,这也是我们没有把这方面学扎实的原因,所以我们要一次把设计完成好,不但要学习好课堂知识,而且要注意好各方面的细节。
通过这次课题设计使我懂得了理论与实践相结合是非常重要的,从理论中得出结论,能真正为社会服务,从而提高自己思考的能力,同时在设计中发现自己的不足之处。