欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機快速折疊門感應自動控制程序 [打印本頁]

作者: ssman    時間: 2022-1-12 11:39
標題: 單片機快速折疊門感應自動控制程序
        本廠儲料棚區有一8m*6m大門,電機為三相1.5kw,渦輪減速傳動,主軸配上下限位開關。開始安裝的按鈕和遙控開關大門,感覺不便,配上微波雷達感應和光感應開關,51單片機控制,現在一直在用。自動門大致要求都差不多:1有人車在雷達范圍內,則自動開門。2無人車延時6s左右關門。3防夾人車。本電路用到6個io口,其中限位開關2個,光感和雷達用2個,輸出正反轉2個。接口用光電隔離器,一是電氣隔離,再一電位易于匹配,用的24v直流繼電器。以下是仿真圖,代碼等。其中第二代碼是實戰的,第一個參考狀態機思想來的,也已仿真。

電路原理圖如下:


單片機源程序如下:
  1. #include <reg51.h>
  2. #include <stdio.h>
  3. #include<intrins.h>
  4. sbit  upsw =P2^4;
  5. sbit  downsw =P2^3;
  6. sbit  radar =P2^2;
  7. sbit  lightinduct =P2^1;


  8. sbit  uprelay=P2^7;
  9. sbit downrelay=P2^6;

  10. sbit upport=P3^6;
  11. sbit dowport=P3^7;


  12. #define time_cnt  6   //延時常數
  13. unsigned int cnt;
  14. unsigned char sec;

  15. typedef enum{
  16.                state_open,
  17.                state_close,
  18.                 state_up,
  19.                 state_down,
  20.                 state_stop
  21.                }enum_state;
  22.   enum_state  system_state;
  23.     void systemStateCtrl();   
  24.       void systemStateWork();         
  25.                //狀態機就是若干個“當前狀態 + 觸發條件 = 新狀態( + 附加動作)”的公式。
  26. void main(void)
  27.      {
  28.                
  29.                  TMOD=0X01;
  30.                  TH0=(65535-20000)/256;
  31.                  TL0=(65535-20000)%256;
  32.                
  33.                  TR0=1;
  34.           uprelay=1;
  35.           downrelay=1;

  36.            while(1)
  37.                     {
  38.                 systemStateCtrl();
  39.                 systemStateWork();

  40.             }
  41.         }      
  42. void systemStateCtrl()
  43.             {     
  44.               switch(system_state)                       //狀態枚舉5
  45.                 {  
  46.                    case state_open:                                   //全開態
  47.                          if(lightinduct  ==0||radar ==0)         //若有光
  48.                              system_state= state_open;      //保持全開態
  49.                          else if(lightinduct  ==1&&radar ==1) //否則無光
  50.                          {
  51.                               if(TF0 == 1)
  52.                                                                         {
  53.                                                                                 TF0 = 0;
  54.                                                                                 TH0=(65535-20000)/256;
  55.                                                                                 TL0=(65535-20000)%256;//20ms
  56.                                                                                 cnt++;
  57.                                                                                 if(cnt >= 50)                         //1s
  58.                                                                                         {
  59.                                                                                                 cnt = 0;
  60.                                                                                                 sec++;
  61.                                                                                                 if(sec >= time_cnt )
  62.                                                                     {
  63.                                                                           sec = 0;             //延時5秒
  64.                                                       system_state=  state_down; //下行
  65.                                                     }
  66.                                                 }
  67.                                             }
  68.                                }
  69.                                break;
  70.                     case    state_down:                        //下行態
  71.                             if(lightinduct  ==0||radar ==0)   //有光
  72.                             {   
  73.                             system_state=state_stop;           //停止態
  74.                             }
  75.                             else if(downsw==0)            //否則若下限到
  76.                                        system_state=  state_close;    //關閉態
  77.                                     break;

  78.                     case  state_close:                               ////關閉態
  79.                              if(lightinduct  ==1&&radar ==1)  //無光
  80.                                  system_state=state_close;       ///關閉態
  81.                              else if(radar ==0)                       // 有光
  82.                                  system_state= state_up;      //上行
  83.                             break;   
  84.                     case state_stop:      //停止態
  85.                          if(TF0 == 1)
  86.                                                                         {
  87.                                                                                 TF0 = 0;
  88.                                                                                 TH0=(65535-20000)/256;
  89.                                                                                 TL0=(65535-20000)%256;//20ms
  90.                                                                                 cnt++;
  91.                                                                                 if(cnt >= 5)                         //100ms
  92.                                                                                         {
  93.                                                                                                 cnt = 0;                      //延時到
  94.                                                 system_state=  state_up; //上行
  95.                                             }
  96.                                         }
  97.                             break;     
  98.                        case  state_up:                            //上行
  99.                          if(upsw ==0)                       //上限到
  100.                                    system_state= state_open;////全開態
  101.                                  break;         
  102.                      default:     system_state= state_open;
  103.                          break;  
  104.               }      
  105.           }   

  106. void systemStateWork()
  107.        {
  108.          switch( system_state )
  109.             {
  110.                 case state_open://開門態
  111.                             upsw =0;
  112.                             downsw=1;
  113.                             uprelay=1;
  114.                             downrelay=1;
  115.                             break;
  116.                 case state_close://關門態
  117.                             upsw =1;
  118.                            downsw=0;//
  119.                            uprelay=1;
  120.                            downrelay=1;
  121.                         break;
  122.                                          case state_up:       //上行
  123.                           uprelay=0;
  124.                            downrelay=1;  
  125.                        break;
  126.                  case state_down://下行
  127.                           uprelay=1;
  128.                            downrelay=0;  
  129.                        break;
  130.                 case  state_stop:   //停止
  131.                      upsw =1;
  132.                     downsw=1;
  133.                       uprelay=1;
  134.                       downrelay=1;      
  135.                      break;
  136.                  default:
  137.                        break;

  138.     }
  139. }      
復制代碼




  1. #include <reg51.h>
  2. #include <stdio.h>

  3. sbit  upsw =P2^4;
  4. sbit  downsw =P2^3;
  5. sbit  radar =P2^2;
  6. sbit  lightinduct =P2^1;

  7. sbit  uprelay=P2^7;
  8. sbit downrelay=P2^6;



  9. void DelayMS(unsigned int x)
  10. {
  11.         unsigned char i;
  12.         while(x--) for(i=0;i<120;i++);
  13. }

  14. void main(void)
  15.      {
  16.           uprelay=1;
  17.           downrelay=1;
  18.            while(1)
  19.                     {
  20.                           if(downsw==0)                              //在下限
  21.                                         {
  22.                                                  if(radar==1)                                         //無雷光
  23.                                                           {
  24.                                                                  uprelay=1;                        //保持
  25.                                          downrelay=1;
  26.                                                           }
  27.                                                  else if(radar==0)         //有雷光
  28.                                                              {
  29.                                                                          uprelay=0;             //上行開
  30.                                                              }
  31.                                         }
  32.                            if(uprelay==0)
  33.                               {         
  34.                                   if(upsw==0)             //上限到
  35.                                         {
  36.                                                 uprelay=1;        //上行停
  37.                                          }
  38.                                         }
  39.                                 if(upsw==0&&downrelay==1)     //上位
  40.                                     {
  41.                                            if(lightinduct==0|| radar==0) //有雷光
  42.                                               {
  43.                                                    uprelay=1; downrelay=1;         //保持
  44.                                               }
  45.                                            else
  46.                                               {
  47.                                                    DelayMS(5000);
  48.                                                    downrelay=0;                    //下行
  49.                                               }
  50.                                     }
  51.                            if( downrelay==0)                                    //下行
  52.                                  {
  53.                                    if(downsw==0)                                                 //若到下限
  54.                                      {
  55.                                            downrelay=1;                                                //下行停
  56.                                          }
  57.                                    else if(lightinduct==0|| radar==0) //有雷光
  58.                                      {
  59.                                            downrelay=1;                           //下行停
  60.                                            DelayMS(100);
  61.                                            uprelay=0;                                     //上行開
  62.                                             if(upsw==0)                            //上限到
  63.                                                          {
  64.                                                                 uprelay=1;                                  //上行停
  65.                                                      }
  66.                                        }
  67.                                    }
  68.                                  if(upsw==1&&downsw==1&&  downrelay==1&& uprelay==1)
  69.                                         downrelay=0;         
  70.                         }
  71.                 }         
復制代碼

作者: heicad    時間: 2022-1-14 07:38
好資料,51黑有你更精彩!!!
作者: lazygoat    時間: 2022-2-12 22:46
暫時用不到,先學習看看




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1