单片机人体红外感应自动门电路

2019-10-22来源: 51hei关键字:单片机  人体红外感应  自动门

基于51单片机和人体红外感应模块的自动门程序设计资料分享给大家


Altium Designer画的自动门原理图和PCB图如下:(51hei附件中可下载工程文件)

单片机源程序如下:

#include

#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

                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) //手动关

[1] [2]
关键字:单片机  人体红外感应  自动门 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477935.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机PT2262/2272无线遥控解码器Proteus仿真程序315-433M
下一篇:单片机信号脉宽测量程序+Proteus仿真图

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机汇编参考程序
该AVR的汇编程序选自《M128》,程序中体现了AVR汇编的基本特点,仅供大家参考。该应用系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。                           图  简易24小时时钟硬件原理图系统使用8个LED数码管显示时、分、秒、1/100秒4个时段的数字,每个时段占用2个LED。显示方式采用动态扫描方式,ATme
发表于 2019-11-14
avr单片机汇编参考程序
AVR单片机一些学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。1、AVR单片机采用RISC架构,8051单片机采用CISC架构。 前者速度为后者的2~4倍,为流水线操作指令。2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。3、 哈佛结构,131条机器指令。4、 延迟开机功能。5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。7、 堆栈指针向下增长,51
发表于 2019-11-14
avr单片机mega32之ADC程序
查手册,写程序,有问题再讨论*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>#include "adc.h"int main(void){        int m;adc_init();             m = adc_get(0);     &n
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
学单片机的第二条槛:中断,每次我都选最简单的中断——外部中断。*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>void eint0_init(void);int main(void){    DDRD |= (1 << 7);     //PD7置为输出    eint0_init();    
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
PIC单片机入门指南
;    把最下面的框钩上后点保存这时看到文本框内的字变成了蓝色了。开始编写程序最后点上面中间的那个红色的图标编译,在项目目录里面就会有个hex的文件,最后下载到单片机PIC10F200里面就可以用了!
发表于 2019-11-14
PIC单片机入门指南
单片机之间通信(类红外发送与接收)
void call_user_sent()   {       static bit data_flag=0;      static unsigned char a=0,b=0,c=0;      TRISB5=1;      TRISB2=0;      if(!data_flag)        //起始头    
发表于 2019-11-14
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved