基于51单片机的自动门设计
(仿真+程序+电路图+原理图+设计报告)
功能介绍
具体功能:
1.检测人体。
2.如持续没能检测到人体,系统自动关门,LED从两边往中间灭,电机开始反转。
3.如检测有人,则进入开门状态,LED继续往两边亮,电机正转。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
bit flag;
int j; //控制电机关门变量
int n; //控制电机开门变量
unsigned code table[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //1-2相励磁方式 最小步距角
//unsigned code table[]={0x80,0x40,0x20,0x10}; //1相励磁方式 最小步距角*2
//红线接电源,只要其中一相为高电平,该相导通,动作两拍,转过两个步距角
unsigned code OPEN_P0[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01}; //LED灯
unsigned code OPEN_P2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; //LED灯
void delay(unsigned int t);
void Delay_1s(uint y);
void int0init(void);
void Motor_GO(void);
void Motor_BACK(void);
void delay(unsigned int t)
{
while(t--);
}
void Delay_1s(uint y) //延时1s
{
uint a;
for(a=0;a<200*y;a++) //200为1s
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(!TF1);
TF1=0;
}
}
void int0init(void) //外部中断0初始化
{
EA=1; //打开总中断
EX0=1; //中断允许位
IT0=1; //外部中断0触发方式为下降沿触发
}
void Motor_GO(void) //电机正转函数,即开门
{
uchar m;
while(n)
{
for(m=0;m<8;m++)
{
n--;
P1=table[m];
if(n>2000)
delay(280); //快速开门半圈
if(n<=2000)
delay(480); //慢速开门半圈
}
if((n<=4096)&(n>3800)) //LED灯提示
{
P0=OPEN_P0[0];
P2=OPEN_P2[0];
}
if((n<=3800)&(n>3500))
{
P0=OPEN_P0[1];
P2=OPEN_P2[1];
}
if((n<=3500)&(n>3200))
{
P0=OPEN_P0[2];
P2=OPEN_P2[2];
}
if((n<=3200)&(n>2900))
{
P0=OPEN_P0[3];
P2=OPEN_P2[3];
}
if((n<=2900)&(n>1950))
{
P0=OPEN_P0[4];
P2=OPEN_P2[4];
}
if((n<=1950)&(n>1000))
{
P0=OPEN_P0[5];
P2=OPEN_P2[5];
}
if((n<=1000)&(n>50))
{
P0=OPEN_P0[6];
P2=OPEN_P2[6];
}
if((n<=50)&(n>=0))
{
P0=OPEN_P0[7];
P2=OPEN_P2[7];
}
if(n<0)
{
n=0; //跳出死循环
}
}
}
void Motor_BACK(void) //电机反转函数,即关门
{
uchar i;
while(j)
{
for(i=0;i<8;i++)
{
j--;
P1=table[7-i];
if(j>2000)
delay(280); //快速关门半圈
if(j<=2000)
delay(480); //慢速关门半圈
}
if((j<=4096)&(j>3800)) //LED灯提示
{
P0=OPEN_P0[7];
P2=OPEN_P2[7];
}
if((j<=3800)&(j>3500))
{
P0=OPEN_P0[6];
P2=OPEN_P2[6];
}
if((j<=3500)&(j>3200))
{
P0=OPEN_P0[5];
P2=OPEN_P2[5];
}
if((j<=3200)&(j>2900))
{
P0=OPEN_P0[4];
P2=OPEN_P2[4];
}
if((j<=2900)&(j>1950))
{
P0=OPEN_P0[3];
P2=OPEN_P2[3];
}
if((j<=1950)&(j>1000))
{
P0=OPEN_P0[2];
P2=OPEN_P2[2];
}
if((j<=1000)&(j>50))
{
P0=OPEN_P0[1];
P2=OPEN_P2[1];
}
if((j<=50)&(j>=0))
{
P0=OPEN_P0[0];
P2=OPEN_P2[0];
}
if(j<0) //跳出死循环
{
j=0;
}
}
}
硬件设计
使用元器件:
单片机:STC89C52;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
电阻:470;电阻:1K;
电阻:10K;排阻:10K;
人体红外:DYP-ME003;
步进电机:28BYJ48;
电解电容:10uF;晶振:12MHZ;
瓷片电容:30pF;三极管:9013 ;
发光二极管;2P插头:2P;
复位开关:6*6*6;自锁开关;
IC:ULN2003;排针:5PIN ;
导线:若干;
流程图:
设计资料
01 仿真图
本设计使用proteus7.8和proteus8.7两个版本设计,向下兼容,无需担心!具体如图!
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil4和keil5两个版本编程设计,无需担心!具体如图!
04 设计报告
一万字设计报告,具体如下!
05 设计资料
全部资料包括仿真源文件 、程序(含注释)、AD原理图、电路图、设计说明、参考论文、流程图等。具体内容如下,全网最全! !
下面是开源51单片机设计资料
大家共同学习进步:
提取码:bmxq
点赞分享,一起学习进步!一起成长。