标题: 51单片机模拟自动感应门(原理图+仿真图+源程序) [打印本页]

作者: 手插口袋    时间: 2019-9-3 12:07
标题: 51单片机模拟自动感应门(原理图+仿真图+源程序)
采用的是模拟的形式  步进电机模拟开门关门

制作出来的实物图如下:


电路原理图如下:


仿真说明

RV1模拟人体检测,端口变成绿色0无人,端口变成红色是有人

其他照着操作说明操作即可
实物中的步进电机仿真中没有对应的,你就加载仿真看看端口电平变化效果吧

Comment    Designator
22P电容    C1, C2
10UF电容    C3
LED    D1
人体检测模块    H1
步进电机    P1
1K电阻    R2
10K电阻    R15
AJ按键    SW1, SW2
单片机    U2
ULN2003    U5
12M    晶振1


单片机源程序如下:
#include<reg51.h> //调用头文件
#define uchar unsigned char  //宏定义
#define uint unsigned int    //宏定义

/********    端口定义      **********/

sbit k1=P2^6;//手动开接口
sbit k2=P2^7;//手动关接口

sbit led=P3^4;//人体感应指示灯
sbit ir=P3^2;//人体感应

uchar code fan[4]={0xf8,0xf4,0xf2,0xf1};//反转
uchar code zheng[4]={0xf1,0xf2,0xf4,0xf8};//正转

uchar num,num1;
uint quan;
bit flag;//开关标志位,0为关,1为开

/***************延时函数*******************/

void delay(uint time)//延时函数         延时Time ms
{
        uint j;
        for(;time>0;time--)
           for(j=150;j>0;j--);
}void main()
{
        
        TMOD=0x11;//设置定时器1为16位计时模式
        TH0=(65536-50000)/256;  //定时器0高八位装初值
        TL0=(65536-50000)%256;  //定时器0低八位装初值
        EA=1;//开启总中断
        ET0=1;//开启定时器中断0
        TR0=0;//关闭定时器0

        TH1=(65536-4000)/256;    //定时器1高八位装初值
        TL1=(65536-4000)%256;    //定时器1低八位装初值
        ET1=1;//开启定时器中断1
        TR1=0;//关闭定时器1
        flag=0;//门关闭状态
        P2=0xf0;
        while(1)
        {        
                while(flag==0)//门关闭状态
                {                                                         
                        if(TR1==0)P2=0xf0;
                        if((ir==1)||(k1==0))//检测到人体信号或者手动开门按键按下模拟开门
                        {
                                if(ir==1)led=0;
                                TR1=1;
                                num=0;
                        }
                        else led=1;
                }
                //门开启状态 延时5S检测不到人  自动关闭         延时5S检测到人  延时清零继续
                //关闭时检测到人  反方向自动开启
                while(flag==1)
                {
                        if(TR1==0)P2=0xf0;
                        if(ir==1){num=0;led=0;}//门开启检测到人体信号定时清零
                        else led=1;
                        if((num>=100)||(k2==0))//5S 或者手动关门按键按下执行关门
                        {
                                TR0=0;//关闭定时器
                                TR1=1;
                                num=0;
                        }
                }
        }
}
void time0() interrupt 1         //中断函数
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        num++;
}
void time1() interrupt 3         //中断函数
{
        TH1=(65536-4000)/256;
        TL1=(65536-4000)%256;
        num1++;
        if((flag==0)&&(TR1==1))
        {
                if(num1==4)
                {
                        lp:
                        num1=0;
                        quan++;
                }
                P2=zheng[num1];
                if(quan>=125){TR1=0;flag=1;TR0=1;P2=0xf0;}//90°        
        }
        if((flag==1)&&(TR1==1))
        {
                if(num1==4)
                {
                        num1=0;
                        if((ir==1)||(k1==0))//检测到人体信号或者手动开门按键按下模拟开门
                        {
                                flag=0;
                                if(ir==1)led=0;
                                TR1=0;
                                delay(1000);
                                TR1=1;
                                goto lp;
                        }
                        quan--;
                }
                P2=fan[num1];
                if(quan==0){TR1=0;flag=0;P2=0xf0;}
                        
        }
}

全部资料51hei下载地址:
自动感应门资料.rar (173.83 KB, 下载次数: 212)

作者: 往初    时间: 2019-12-5 23:06
好资料,51黑有你更精彩!!!
作者: zcANDzc    时间: 2019-12-23 14:31
请问这个人体检测模块用的是什么呢?红外检测吗?

作者: 追风少年cuzz    时间: 2020-5-12 12:59
你这资料打开用不上啊!
作者: zyjones    时间: 2021-6-21 14:35
大家有没有推荐比较好用的人体感应模块呀
作者: 为01518    时间: 2021-6-21 18:22

好资料,51黑有你更精彩!!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1