标题: 单片机人体红外感应自动门电路原理图+PCB文件+源程序 [打印本页]

作者: 王克520    时间: 2018-4-13 11:15
标题: 单片机人体红外感应自动门电路原理图+PCB文件+源程序
基于51单片机和人体红外感应模块的自动门程序设计资料分享给大家
Altium Designer画的自动门原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


  4. unsigned char code zheng[4]={0x08,0x04,0x02,0x01};//正转表格
  5. unsigned char code fan[4]  ={0x01,0x02,0x04,0x08};//反转表格

  6. uchar flag_start ;     //启动标志位  1为起动步进电机 否则关闭电机
  7. uchar flag_z_f;        //正反标志位  0为顺时钟 1为逆时史上转
  8. uint flag_moshi;

  9. sbit led1 = P2^0;   //指示灯
  10. sbit led2 = P2^1;
  11. sbit led3 = P2^2;
  12. sbit led4 = P2^3;

  13. sbit hw1 = P2^4;        //红外感应
  14. sbit hw2 = P2^5;        //红外感应

  15. uint bjdj_value;   //步进电机的量

  16. uchar flag_sj,flag_zdg;         //延时关门时间   打开和关闭的变量

  17. void Delay(unsigned int i)//延时
  18. {
  19.         while(--i);
  20. }

  21. /***********************1ms延时函数*****************************/
  22. void delay_1ms(uint q)
  23. {
  24.         uint i,j;
  25.         for(i=0;i<q;i++)
  26.                 for(j=0;j<120;j++);
  27. }


  28. uchar key_can;
  29. /********************独立按键程序*****************/
  30. void key()
  31. {
  32.         static uchar key_new;
  33.         if((P3 & 0xf0) != 0xf0)                //按键按下
  34.         {
  35.                 Delay(1000);                                //按键消抖动
  36.                 if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
  37.                 {                                                //确认是按键按下
  38.                         key_new = 0;
  39.                         switch(P3 & 0xf0)
  40.                         {
  41.                                 case 0xe0:  key_can = 1;  break;         //得到按键值
  42.                                 case 0xd0:  key_can = 2;  break;         //得到按键值
  43.                                 case 0xb0:  key_can = 3;  break;         //得到按键值
  44.                                 case 0x70:  key_can = 4;  break;         //得到按键值
  45.                         }                                
  46.                 }        
  47.         }
  48.         else           //按键松开
  49.                 key_new = 1;        
  50. }


  51. void bujindj()         //步进电机函数
  52. {
  53.         static uchar i;
  54.         if(flag_z_f != 0)        
  55.         {        
  56.                 if(flag_z_f == 1)           //开
  57.                 {
  58.                         if(bjdj_value >= 512)
  59.                         {
  60.                                 flag_z_f = 0;
  61.                                 flag_zdg = 1;
  62.                         }else
  63.                                 bjdj_value ++;        
  64.                 }
  65.                 if(flag_z_f == 2)           //关
  66.                 {                                
  67.                         if(bjdj_value <= 1)
  68.                         {
  69.                                 flag_z_f = 0;
  70.                                 bjdj_value = 1;
  71.                         }else  
  72.                         {
  73.                                 bjdj_value --;
  74.                         }
  75.                 }
  76.                 for(i=0;i<4;i++)          //4相
  77.                 {
  78.                         if(flag_z_f == 1)          //开
  79.                         {
  80.                                 P1=zheng[i];//      //
  81.                                 P0=fan[i];
  82.                         }
  83.                         else if(flag_z_f == 2)//关
  84.                         {
  85.                                 P1=fan[i];//         //
  86.                                 P0=zheng[i];
  87.                         }
  88.                 }
  89.         }
  90. }



  91. /******************主程序**********************/
  92. void main()
  93. {
  94.         static unsigned char value;        
  95.         while(1)
  96.         {
  97.                 key();
  98.                 if(key_can < 10)
  99.                 {                                                
  100.                          if(key_can == 1)         //自动模式
  101.                         {
  102.                                 flag_moshi = 0;
  103.                                 flag_z_f = 0;
  104.                                 led4 = 0; led3 = 1;         //指示灯
  105.                         }
  106.                         if(key_can == 2)         //手动模式
  107.                         {
  108.                                 flag_moshi = 1;
  109.                                 flag_z_f = 0;
  110.                                 led4 = 1; led3 = 0;         //指示灯
  111.                         }
  112.                         if(key_can == 3)          //手动关
  113.                         {
  114.                                 flag_z_f = 2;
  115.                                 led2 = 0; led1 = 1;         //指示灯
  116.                         }
  117.                         if(key_can == 4)         //手动开
  118.                         {
  119.                                 flag_z_f = 1;
  120.                                 led2 = 1; led1 = 0;         //指示灯
  121.                         }
  122.                 }
  123.                 if(flag_moshi == 0)          //自动模式
  124.                 {
  125.                         if((hw1 == 1) || (hw2 == 1))
  126.                         {
  127.                                 flag_z_f = 1;   //打开        
  128.                                 led2 = 1; led1 = 0;         //指示灯
  129.                                 flag_zdg = 0;
  130.                                 flag_sj = 0;
  131.                         }
  132. ……………………

  133. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
程序.zip (21.11 KB, 下载次数: 398)
自动门 9.rar (272.9 KB, 下载次数: 445)



作者: 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