找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5250|回复: 1
收起左侧

基于单片机的门控系统设计(红外遥控步进电机源码和电路)

[复制链接]
ID:430388 发表于 2018-11-21 10:47 | 显示全部楼层 |阅读模式
基于单片机的门控系统电路原理图如下:
电路图图片格式的.jpg

制作出来的实物图如下:
0.png 0.jpg 0.jpg 0.jpg
元件清单:
单片机*1
11.0592晶振*1
瓷片电容22*2
电阻10k*1
电解电容10μF*2
四脚按键*3
DC电源座(3.5mm)*1、
LED红灯(3mm)*1
电阻1k*3
DIP16底座*1
ULN2003AN芯片*1
步进电机*1
红外人体传感器*1
LED红灯(5mm)*1
LED绿灯(5mm)*1
排针*9
杜邦线*7
洞洞板*1
焊接跳线(不计)
焊锡丝(不计)

单片机源程序如下:
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. unsigned char code RUN1[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//正转
  5. unsigned char code RUN2[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反转

  6. sbit led1=P0^1;           //绿色的
  7. sbit led2=P0^0;           //红色的

  8. sbit hongwai=P1^0;

  9. sbit kaibtn=P1^1;
  10. sbit guanbtn=P1^2;

  11. uint ji=0;
  12. uint miao=0;


  13. uint ji2=0;
  14. uint miao2=0;

  15. bit flag=1;
  16. bit flag2=0;


  17. /******延时函数****************/
  18. void delay(unsigned int t)
  19. {                           
  20.    unsigned int k;
  21.    while(t--)
  22.    {
  23.      for(k=0; k<60; k++)//用for的空循环延长程序的执行时间
  24.      { }
  25.    }
  26. }

  27.           //步进电机驱动         正转
  28. void  zz()
  29. {
  30.    unsigned char i;
  31.   
  32.       for (i=0; i<8; i++)       //一个周期转3.75*8=30度
  33.         {
  34.           P2 = RUN1[i]&0x1f;     //取数据
  35.           delay(2);             //调节转速
  36.         }


  37.   }
  38.   //步进电机驱动  反转
  39. void  fz()
  40. {
  41.    unsigned char i;
  42.   
  43.       for (i=0; i<8; i++)       //一个周期转3.75*8=30度
  44.         {
  45.           P2 = RUN2[i]&0x1f;     //取数据
  46.           delay(2);             //调节转速
  47.         }

  48.   }


  49.          void dingshi1()
  50.          {
  51.          TMOD=0x01;
  52.          TH0=(65536-50000)/256;
  53.          TL0=(65536-50000)%256;
  54.           TH1=(65536-50000)/256;
  55.          TL1=(65536-50000)%256;
  56.          EA=1;
  57.          ET0=0;
  58.          TR0=0;
  59.                   ET1=0;
  60.          TR1=0;
  61.          }
  62. void main()
  63. {       
  64.   dingshi1();
  65.        
  66. while(1)
  67. {

  68.                            if(kaibtn==0)
  69.                            {
  70.                                       fz();

  71.                            }

  72.                            if(guanbtn==0)
  73.                            {
  74.                            zz();
  75.                            }
  76.                  
  77.                  if(flag==1)
  78.                  {

  79.                    if(hongwai==1||kaibtn==0) //检测到有人的情况下 打开门
  80.                    {
  81.        
  82.                                    ET0=1;
  83.                                    TR0=1;
  84.                                    fz();
  85.                                    led1=0;
  86.                                    led2=1;
  87.                    }
  88.                 }                                                               
  89.                        
  90.                        
  91.                        
  92.                 if(flag2==1)
  93.                         {
  94.                         if(hongwai==0||guanbtn==0)  //检测到无人的情况下
  95.                         {
  96.        
  97.                                    ET1=1;
  98.                                    TR1=1;
  99.                                    zz();
  100.                                    led1=1;
  101.                                    led2=0;
  102.                         }       
  103.                 }
  104.                                
  105.                                   
  106.                                     if(miao==5)        //
  107.                                  {
  108.                              miao=0;
  109.                                  P2=0x00;
  110.                                  ET0=0;
  111.                                  TR0=0;
  112.                                  flag=0;
  113.                                  flag2=1;
  114.                                  led1=1;
  115.                              led2=1;
  116.                                  }               

  117.                                  if(miao2==30) //停止的时间调节的地方-具体时间可以自己实际操作计时计算
  118.                                  {
  119.                                  miao2=0;
  120.                                  ET1=0;
  121.                                  TR1=0;
  122.                              flag2=0;
  123.                                  flag=1;
  124. led1=1;
  125. led2=1;
  126.                                  }



  127.                  





  128. }
  129. }


  130. void timer0() interrupt 1
  131. {
  132.          TH0=(65536-50000)/256;
  133.          TL0=(65536-50000)%256;
  134.          ji++;
  135.          if(ji==20)
  136.          {
  137.          ji=0;
  138.          miao++;
  139.          }
  140. }

  141. void timer1() interrupt 3
  142. {
  143.          TH1=(65536-50000)/256;
  144.          TL1=(65536-50000)%256;
  145.          ji2++;
  146.          if(ji2==20)
  147.          {
  148.          ji2=0;
  149.          miao2++;
  150.          }
  151. }
复制代码

所有资料51hei提供下载:
基于51单片机红外人体感应自动门设计.zip (7.66 MB, 下载次数: 157)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:572091 发表于 2019-7-1 18:32 来自手机 | 显示全部楼层
你好有没有完整的电路原理图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表