标题: 单片机热释电红外自动门Proteus仿真程序 [打印本页]

作者: jijkf    时间: 2020-4-28 15:33
标题: 单片机热释电红外自动门Proteus仿真程序
话不多,直接看图,本设计是模拟自动门效果,用电机显示
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg51.h>



  2. sbit led=P0^0;//指示灯信号
  3. sbit k1=P1^2;//按键信号
  4. sbit k2=P1^3;//按键信号
  5. sbit IN1=P3^0;
  6. sbit IN2=P3^1;
  7. unsigned char flag,n;

  8. void delay(char x);   //延时程序
  9. void  motor_1(float a);
  10. void  motor_2(float a);
  11. void zhengzhuan();       
  12. void fanzhuan();   



  13. void key_process()

  14. {
  15.     if(k1==0)  
  16.          {
  17.                  delay(100); //延时100MS,按键必须延时消抖
  18.                 while(!k1);
  19.                  
  20. //    led=~led;
  21.      flag=1;
  22.                  zhengzhuan();//当有人时,正转
  23.          }
  24.                  
  25.          if(k2==0)  //没人时, 反转
  26.          {
  27.                  delay(100);
  28.                  while(!k2);
  29.                  flag=0;
  30.                  fanzhuan();
  31.          }
  32.                  
  33. }


  34. void delay(char x)//延时程序
  35. {                          
  36.    char i;
  37.    while(x--)
  38.    {
  39.      for(i=0; i<120; i++);
  40.    }
  41. }




  42. void  motor_1(float a)//a即想要转的圈数  //反转
  43. {
  44.    unsigned char b;
  45.    unsigned int  c;
  46.    for (c=0; c<8*64*a; c++)  
  47.     {
  48.       for (b=0; b<8; b++)
  49.         {
  50.          
  51.                                         IN2=1;
  52.                                         IN1=0;
  53.          delay(1);
  54.          }
  55.     }
  56. }



  57. void  motor_2(float a)//a即想要转的圈数  //正转
  58. {
  59.    unsigned char b;
  60.    unsigned int  c;
  61.    for (c=0; c<8*64*a; c++)
  62.     {
  63.       for (b=0; b<8; b++)
  64.         {
  65.                  IN2=0;
  66.                                         IN1=1;
  67.          delay(1);
  68.                                        
  69.          }
  70.     }
  71. }


  72. void Timer0() interrupt 1
  73. {
  74.         TH0  = 0x3c; //每中断都要重装载,大概50MS中断一次,十进制的15536,65536-15536=50000
  75.         TL0  = 0xb0;        
  76.   if(flag)  //表示有人灯亮
  77.         {
  78.                 led=0;
  79.         }
  80.         else    //表示没人
  81.         {
  82.                 led=1;
  83.         }
  84.        
  85. }         


  86. void zhengzhuan()    //正转
  87. {
  88.        
  89.        motor_2(0.04); //转1圈(可以改动)         
  90.        delay(1);
  91.              P3=0XFF;                //防止电机发热
  92. }


  93. void fanzhuan()    //正转
  94. {
  95.        
  96.        motor_1(0.04); //转1圈(可以改动)         
  97.        delay(1);
  98.              P3=0XFF;                //防止电机发热
  99. }




  100. void intial()
  101. {
  102.        
  103.   TMOD = 0x11;//16位计数器
  104.         TH0  = 0x3c;
  105.         TL0  = 0xb0;        
  106.         ET0  = 1;  
  107.         TR0  = 1;
  108.         EA=1;
  109. }

  110. void main()//主程序
  111. {   

  112.          intial();
  113.             
  114.         while(1)
  115.         {
  116.                
  117.            key_process() ; //按键处理
  118.   
  119.                
  120.         }
  121. }
复制代码

所有资料51hei提供下载:
热释电红外自动门.rar (281.86 KB, 下载次数: 149)



作者: 22222546    时间: 2020-4-29 19:16
想问一下楼主,这个是什么

BP9AEAI346W`144WXX69~(L.png (3.27 KB, 下载次数: 60)

BP9AEAI346W`144WXX69~(L.png

作者: 周11111222    时间: 2020-5-11 07:07
仿真没成功




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1