基于51单片机的自动门设计

基于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单片机设计资料

​大家共同学习进步:

链接:百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间icon-default.png?t=N7T8https://pan.baidu.com/s/1prY7CKvzvFjYWZ93Bf0spw?pwd=bmxq

提取码:bmxq

点赞分享,一起学习进步!一起成长。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值