标题:
单片机人体红外感应自动门电路原理图+PCB文件+源程序
[打印本页]
作者:
王克520
时间:
2018-4-13 11:15
标题:
单片机人体红外感应自动门电路原理图+PCB文件+源程序
基于51单片机和人体红外感应模块的自动门程序设计资料分享给大家
Altium Designer画的自动门原理图和PCB图如下:(51hei附件中可下载工程文件)
0.jpg
(67.14 KB, 下载次数: 149)
下载附件
2018-4-13 15:53 上传
0.jpg
(7.55 KB, 下载次数: 97)
下载附件
2018-4-13 15:54 上传
单片机源程序如下:
#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; //指示灯
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
sbit hw1 = P2^4; //红外感应
sbit hw2 = P2^5; //红外感应
uint bjdj_value; //步进电机的量
uchar flag_sj,flag_zdg; //延时关门时间 打开和关闭的变量
void Delay(unsigned int i)//延时
{
while(--i);
}
/***********************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()
{
static uchar key_new;
if((P3 & 0xf0) != 0xf0) //按键按下
{
Delay(1000); //按键消抖动
if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
{ //确认是按键按下
key_new = 0;
switch(P3 & 0xf0)
{
case 0xe0: key_can = 1; break; //得到按键值
case 0xd0: key_can = 2; break; //得到按键值
case 0xb0: key_can = 3; break; //得到按键值
case 0x70: key_can = 4; break; //得到按键值
}
}
}
else //按键松开
key_new = 1;
}
void bujindj() //步进电机函数
{
static uchar i;
if(flag_z_f != 0)
{
if(flag_z_f == 1) //开
{
if(bjdj_value >= 512)
{
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];// //
P0=fan[i];
}
else if(flag_z_f == 2)//关
{
P1=fan[i];// //
P0=zheng[i];
}
}
}
}
/******************主程序**********************/
void main()
{
static unsigned char value;
while(1)
{
key();
if(key_can < 10)
{
if(key_can == 1) //自动模式
{
flag_moshi = 0;
flag_z_f = 0;
led4 = 0; led3 = 1; //指示灯
}
if(key_can == 2) //手动模式
{
flag_moshi = 1;
flag_z_f = 0;
led4 = 1; led3 = 0; //指示灯
}
if(key_can == 3) //手动关
{
flag_z_f = 2;
led2 = 0; led1 = 1; //指示灯
}
if(key_can == 4) //手动开
{
flag_z_f = 1;
led2 = 1; led1 = 0; //指示灯
}
}
if(flag_moshi == 0) //自动模式
{
if((hw1 == 1) || (hw2 == 1))
{
flag_z_f = 1; //打开
led2 = 1; led1 = 0; //指示灯
flag_zdg = 0;
flag_sj = 0;
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
程序.zip
(21.11 KB, 下载次数: 398)
2018-4-13 11:14 上传
点击文件名下载附件
下载积分: 黑币 -5
自动门 9.rar
(272.9 KB, 下载次数: 445)
2018-4-13 15:55 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
lhrlhr
时间:
2018-4-13 18:54
正学习中,谢楼主……………………………………
作者:
liangxinlx
时间:
2018-4-14 09:15
谢谢你哦
作者:
艰苦豆腐111
时间:
2018-4-16 13:20
救命帖子
作者:
艰苦豆腐111
时间:
2018-4-16 13:20
谢谢!
作者:
kangta
时间:
2018-4-25 17:08
楼主啊,为什么我用开发板烧录之后 不行呢
作者:
kangta
时间:
2018-4-25 17:38
电机转不起来
作者:
fuyan13
时间:
2018-5-21 10:39
正学习中,谢楼主……………………………………
作者:
liangxinlx
时间:
2018-5-22 20:32
楼主,你有仿真图吗?
作者:
ddddddsfsafa
时间:
2018-6-21 16:41
楼主在吗?步进电机那部分函数我有点不明白,能解释一下吗
作者:
baozi1997
时间:
2018-6-21 17:00
别下载了,那程序没用,和说的压根不一样
作者:
baozi1997
时间:
2018-6-21 17:01
没用的
作者:
baozi1997
时间:
2018-6-21 17:02
下载的程序没用,不用看了,和红外感光没关系
作者:
skx999666
时间:
2018-7-6 19:54
有没有仿真结果啊
作者:
hayden
时间:
2018-7-7 21:42
顶一个,很实用的DIY
作者:
zzy7711
时间:
2018-12-6 16:09
我是红外线自动门的开关 不知道这个有没有用
作者:
usg1024
时间:
2019-3-15 15:07
学习ing 正好需要这个
作者:
我只爱学习
时间:
2019-4-8 21:34
学习下
作者:
jonebin
时间:
2019-4-24 16:31
谢谢分享,学习下。
作者:
lyclsh27
时间:
2019-5-5 12:52
感谢楼主,正在好好学习
作者:
lm19995455
时间:
2019-8-2 09:18
对于结合单片机和红外感应有导向作用
作者:
lm19995455
时间:
2019-8-2 13:51
谢谢楼主,帮了大忙了
作者:
phuilee@51
时间:
2019-8-2 15:21
学习学习,程序测试过吗?
作者:
心羽家电
时间:
2019-9-8 16:43
学习中。。。。。。
作者:
saya0769
时间:
2019-10-21 16:18
谢谢。下载收藏了。
作者:
lushiyi
时间:
2019-10-21 19:24
谢谢楼主
作者:
依恋晓
时间:
2019-10-22 07:42
为什么没设计限位开关呀
作者:
孙扬
时间:
2020-5-28 15:20
真棒,感谢楼主分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1