找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1534|回復(fù): 0
收起左側(cè)

寫了一個關(guān)于兩個廠房門聯(lián)動的pic單片機(jī)程序,上板后不好使,求指點

[復(fù)制鏈接]
ID:388367 發(fā)表于 2018-8-21 10:08 | 顯示全部樓層 |閱讀模式
//這是一個關(guān)于兩個廠房門聯(lián)動的程序。

  1. #include<pic.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. __CONFIG(0x3B31);
  5. uchar cishu;        //設(shè)置一個標(biāo)記變量,通過這個變量來觀察是否有車輛正在通過通道,確定內(nèi)外門是否開啟
  6.                     //來自地感的開門信號,判斷次數(shù)是否為0,為0說明沒有車輛通過,門可以開啟;如果為1,說
  7.                                //明有車兩正在通過,不能開門
  8. uchar jin;         //為了解決內(nèi)外兩個門同時下咯,軟件如何執(zhí)行的問題,設(shè)立3個變量,同過比較進(jìn)出兩個變量
  9. uchar chu;          //大小,相等時變量為0,為0時候不動作;變量不為0時候執(zhí)行命令。進(jìn)出兩個變量由開門信號產(chǎn)生。
  10. uchar bijiao;
  11. void delay(uint x);
  12. void init();
  13. void scan();
  14. void didi1(uchar num);
  15. void didi2(uchar num);

  16. void main()
  17. {   

  18.     jin=0;
  19.     chu=0;
  20.     bijiao=0;

  21.     cishu=0;  
  22.         init();
  23.         while(1)
  24.         {
  25.                 scan();
  26.                         }      
  27. }
  28. void delay(uint x)
  29. {
  30.         uint a,b;
  31.         for(a=x;a>0;a--)
  32.                 for(b=110;b>0;b--);
  33. }
  34. void init()
  35. {
  36. TRISA=0B00001111;PORTA=0B00000001;
  37. TRISB=0B00000000;         PORTB=0B00000000;
  38. TRISC=0B11111111;     PORTC=0B11111111;


  39.                         }
  40. void scan()
  41. {
  42.         if(RA1==1)              //室內(nèi)門開門信號

  43.         {
  44.                 delay(10);
  45.                 if(RA1==1)
  46.                 {  
  47.               jin=jin+1;
  48.                                        switch(cishu)                       
  49.                 {                                       
  50.                 case 0:didi1(100);RB5=1;RB7=1;break;  //RB6 內(nèi)門開,外門鎖,警燈亮
  51.                 case 1:cishu=-1;break;
  52.                
  53.                
  54.                 }                              
  55.                        
  56.                 }
  57.         }
  58.         if(RA2==1)          //室外門開門信號
  59.         {
  60.                 delay(10);
  61.                 if(RA2==1)
  62.                 {  
  63.                 chu=chu+1;
  64.                     switch(cishu)                       
  65.                 {                                       
  66.                 case 0:didi2(100);RA5=1;RB7=1;break;  //RB2外門開,內(nèi)門鎖,警燈亮
  67.                 case 1:cishu=-1;break;
  68.                
  69.       
  70.                 }                              

  71.                                        
  72.                        
  73.                 }
  74.           }
  75.         if(RA0==0)               //室內(nèi)門關(guān)閉到位,外門解鎖 ,外門開啟,次數(shù)加1.
  76.         {
  77.                 delay(10);
  78.                 if(RA0==0)
  79.                 {   
  80.            if(jin=chu)bijiao=0;
  81.                    if(bijiao!=0){
  82.                                 cishu=cishu+1;
  83.                         RB5=0;
  84.                         didi2(50);    //開外門 RB2
  85.                         }                  
  86.             if(bijiao==0){;}
  87.                 }
  88.         }
  89.         if(RC6==0)               //室外門關(guān)閉到位,內(nèi)門解鎖 ,內(nèi)門開啟,次數(shù)加1.
  90.         {
  91.                 delay(10);
  92.                 if(RC6==0)
  93.                 {
  94.                  if(jin=chu)bijiao=0;

  95.           if(bijiao!=0){
  96.                                 cishu=cishu+1;
  97.                         RA5=0;
  98.                          didi1(50);    //開內(nèi)門  RB6
  99.                         }                  
  100.             if(bijiao==0){;}  
  101.                 }
  102.         }

  103. }
  104. void didi1(uchar num)
  105. {
  106.         uchar di_num;
  107.         for(di_num=num;di_num>0;di_num--)
  108.         {
  109.                 RB6=1;                              //內(nèi)門開
  110.                 delay(50);
  111.                 RB6=0;
  112.                 delay(20);
  113.         }
  114. }
  115. void didi2(uchar num)
  116. {
  117.         uchar di_num;
  118.         for(di_num=num;di_num>0;di_num--)
  119.         {
  120.                 RB2=1;
  121.                 delay(50);                           //外門開
  122.                 RB2=0;
  123.                 delay(20);
  124.         }
  125. }
復(fù)制代碼



回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表