历史上的今天
返回首页

历史上的今天

今天是:2024年10月22日(星期二)

正在发生

2019年10月22日 | 单片机人体红外感应自动门电路

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

                        {

                                flag_z_f = 2;

                                led2 = 0; led1 = 1;         //指示灯

                        }

                        if(key_can == 4)         //手动开

推荐阅读

史海拾趣

芯茂微电子公司的发展小趣事

芯茂微电子始终坚持以创新驱动发展,不断投入研发资源,推动技术创新和产品升级。同时,公司积极寻求与国内外知名企业和研究机构的合作,共同开展技术研发和市场拓展。通过与合作伙伴的紧密合作,芯茂微电子在集成电路设计、制造工艺、封装测试等方面取得了重要进展,进一步提升了公司的核心竞争力和市场地位。

Diamond SA公司的发展小趣事

随着技术的不断成熟,Diamond SA公司开始积极拓展市场。他们与全球知名的电子产品制造商建立了合作关系,将自己的芯片技术应用于各种电子设备中。同时,公司还加大了品牌推广力度,通过一系列营销活动提升了品牌知名度和美誉度。随着市场份额的逐步扩大,Diamond SA公司成为了电子行业中的领军企业。

High Voltage Power Solutions Inc公司的发展小趣事

Diamond SA公司深知创新是企业持续发展的动力源泉。因此,他们不断加大对研发的投入力度,积极引进和培养高端人才,建立了完善的研发体系。公司不断推出具有创新性和领先性的电子产品和技术解决方案,赢得了客户的广泛赞誉和认可。同时,他们还积极参与国际技术交流和合作,与全球顶尖的科研机构和企业建立了紧密的合作关系。

Advance Tapes公司的发展小趣事

随着电子行业的快速发展,对胶带产品的性能要求也越来越高。Advance Tapes公司意识到,只有不断创新才能在激烈的市场竞争中立于不败之地。于是,公司加大了对研发的投入,引进了一批高素质的研发人才,并与多家高校和研究机构建立了合作关系。经过不懈努力,Advance Tapes成功开发出了一系列具有高性能、高可靠性的胶带产品,得到了广大客户的认可。

CUI Inc.公司的发展小趣事

除了电源产品,CUI Inc.还提供世界一流的配套板级元器件,包括互连、声音、运动控制和热产品。为了满足全球客户的需求,CUI积极扩展其全球化布局。通过与各地的合作伙伴建立紧密的合作关系,CUI成功地将其产品和服务推广到了全球范围内。这种全球化战略不仅提高了CUI的市场份额,还增强了其在国际市场上的影响力。

台湾君耀(Brightking)公司的发展小趣事

君耀(Brightking)公司于1996年在台湾新竹高科技园区创立,初期专注于防雷元器件的研发和生产。凭借对技术的深入研究和市场需求的敏锐洞察,君耀逐步在台湾的电子器件市场上占得一席之地。随着产品质量和技术含量的提升,君耀的产品开始受到国内外客户的青睐,销售网络逐渐拓展至全球。

问答坊 | AI 解惑

无线网络 --常见标准有以下三种

IEEE 802.11a :使用5GHz频段,传输速度54Mbps,与802.11b不兼容 IEEE 802.11b :使用2.4GHz频段,传输速度11Mbps IEEE 802.11g :使用2.4GHz频段,传输速度54Mbps,可向下兼容802.11b 目前IEEE 802.11b最常用,但IEEE 802.11g更具下一代标准 ...…

查看全部问答>

帮我解释一下 德州电子 CC2430 点对点 实例程序

我在网上下载了一个源代码是基于CC2430的zigbee 点对点的实例通信代码,但是看不懂, 能不能帮我解释一下程序的大致框架和实现原理,诸如 hal层 cul层 是实现什么的,程序如何工作的?十分感谢了 TI(德州仪器公司)的CC2430芯片的库函数以及一些 ...…

查看全部问答>

ARM7 NXP236串口问题,请教高手

串口0为片内自带的,初始化的时候,U0FCR这个寄存器总是写不进去值,请教高手~~~ 附代码:[code] INT8U UART0_Init( INT32U baudrate) {     INT32U Fdiv;                 PINSEL0 &= 0 ...…

查看全部问答>

谁有VGA-DB15的封装资料帮我发一份

现在要画一个DB15的封装不知道参数,知道的大侠帮下!!!!!!!!!!!…

查看全部问答>

【问TI】如何能让大家更好的利用M3的板子?

        对于TI的M3系列的开发板,普及率还不是很高,为什么这么说?我主要参考了淘宝里的开发板的销售情况,发现其他公司,尤其是现在比较热的××公司,你只要到淘宝上一搜,遍地都是。这里面良莠不齐,难免 ...…

查看全部问答>

AM335x NAND Driver's Guide中文手册改1

AM335x NAND Driver\'s Guide中文手册改1…

查看全部问答>

视频编解码芯片电源问题

在视频编解码芯片中既有模拟电源又有数字电源,要完全的物理隔离呢?还是只需简单的串联磁珠、电阻等。谢谢…

查看全部问答>

ADI ADC PCB 硬件设计指南

HARDWARE DESIGN TECHNIQUES Prototyping Analog Circuits Evaluation Boards Noise Reduction and Filtering for Switching Power Supplies Low Dropout References and Regulators EMI/RFI Considerations Sensors and Cable Shielding …

查看全部问答>

下载程序出现了这样的错误,麻烦大神帮忙看看

MSP430: Trouble Writing Memory Block at 0x0 on Page 0 of Length 0x4: Could not perform access, BSL memory segments are protected. MSP430: GEL: File: D:\\workspace_v5_2\\12864\\Debug\\12864.out: Load failed.…

查看全部问答>

经网友两次指点,我终于找到了这里:求温度和流量传感器得到的信息怎么显示在液晶屏上

我在传感器板块发了这么一个帖子(开始我连发什么板块都不知道,觉得用到了传感器,所以应该发传感器吧) ------------------------------------------------------------------------------------------ 我从来没搞过开发,不过想自己DIY点东西 ...…

查看全部问答>