电风扇模拟控制系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机原理与应用课
程设计
院(系):工业中心
班级: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 int
sbit 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*/// 10
0x5C,/*o*/ //11
0x73// 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);