10082-基于51单片机的人体感应红外自动门控制系统(仿真+原理图+源代码工程+详细介绍说明书+PPT)
功能描述:
自动门控制系统需要实现的第1个功能是门的自动开启或关闭。第2个功能是人体检测。第3个功能是手动开启或关闭门。第4个功能是通过红外线去遥控开启或关闭门。系统虽有以上几个功能部分组成,但在设计上还需要保证电路电器的稳定性需要,确保在设计过程中的电气能够符合整体要求和设计理念。并且要确保系统能够有着最佳的性价比和良好的控制能力。
资料摘要:
自动门控制系统随着科技的进步和人文社会的发展已经成为了必不可少的设备设施。从传统的手动开门,到现在实现自动开门,经历了很长一段时间的变革。现在自动门控制系统的功能有了,但在此基础上还可以进行改进与调整,使自动门控制系统更加贴近人们的使用习惯。
本次设计的题目是基于51单片机的自动门控制系统。系统实现的功能有检测人体进出入;自动开启或关闭门;可通过红外线遥控门开启或者关闭;紧急情况下,还可以通过按键手动开启或关闭门。系统使用到的元器件有51系列单片机;红外线传感器;独立按键;步进电机;LED等几部分组成。在检测上的原理是当光电传感器检测到人体辐射以后,将信号传递给单片机。单片机检测到信号后就会控制电机进行转动,从而开启门或关闭门。可通过红外线的方式进行开启或关闭门,也可以通过手动的方式去控制门的开关。
系统在设计上,绘制硬件原理图软件系统流程和代码编写,最后制作实物调试测试功能,最终完成系统的设计与验证。
资料包含:
1、详细设计说明书-15724字
2、仿真工程文件
3、原理图工程文件
4、源代码工程文件
5、元器件清单
6、讲解PPT-21页
7、英文文献及翻译-5443字
8、开题报告-4379字
9、原理图截图
10、实物测试图片及制作过程图片
11、物料清单
12、流程图-visio
#include <reg52.h>
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
unsigned char code zheng[4]={0x08,0x04,0x02,0x01};//正转表格
unsigned char code fan[4] ={0x01,0x02,0x04,0x08};//反转表格
uchar flag_start ; //启动标志位 1为起动步进电机 否则关闭电机
uchar flag_z_f; //正反标志位 0为顺时钟 1为逆时史上转
uint flag_moshi; //模式变量
sbit led1 = P2^0; //指示灯 发光二极管IO口定义
sbit led2 = P2^1; //指示灯 发光二极管IO口定义
sbit led3 = P2^2; //指示灯 发光二极管IO口定义
sbit led4 = P2^3; //指示灯 发光二极管IO口定义
sbit hw1 = P2^4; //红外人体传感器IO口定义
sbit hw2 = P2^5; //红外人体传感器IO口定义
uint bjdj_value; //步进电机的量
uchar flag_sj,flag_zdg; //延时关门时间 打开和关闭的变量
sbit key1 = P3^4; //按键IO口定义
sbit key2 = P3^5; //按键IO口定义
sbit key3 = P3^6; //按键IO口定义
sbit key4 = P3^7; //按键IO口定义
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/********************独立按键程序*****************/
uchar key_can; //按键值
void key() //独立按键程序
{
if(key1 == 0 || key2 == 0 || key3 == 0 || key4 == 0) //有按键按下
{
delay_1ms(1); //按键延时消抖动
if(key1 == 0) //确认是按键按下
key_can = 1; //得到按键值
if(key2 == 0) //确认是按键按下
key_can = 2; //得到按键值
if(key3 == 0) //确认是按键按下
key_can = 3; //得到按键值
if(key4 == 0) //确认是按键按下
key_can = 4; //得到按键值
}
}
void bujindj() //步进电机函数
{
uchar i;
if(flag_z_f != 0)
{
if(flag_z_f == 1) //开
{
if(bjdj_value >= 512) //1圈
{
flag_z_f = 0;
flag_zdg = 1;
}else
bjdj_value ++;
}
if(flag_z_f == 2) //关
{
if(bjdj_value <= 1)
{
flag_z_f = 0;
bjdj_value = 1;
}else
{
bjdj_value --;
}
}
for(i=0;i<4;i++) //4相
{
if(flag_z_f == 1) //开
P1=zheng[i];// //
else if(flag_z_f == 2)//关
P1=fan[i];// //
}
}
}
sbit P32=P3^2; //红外遥控IO口的定义
bit flag_jiema_en = 0; //红外解码成功标志位
uchar hw_table[4]; //红外解码数据缓冲区
/***************100us的延时函数***12M晶振*****************/
void delay_100us(uchar z)
{ //12M
uchar x,y;
for(x=0;x<z;x++)
for(y=0;y<20;y++);
}
/***********外部中断0初始化程序****************/