找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1221|回复: 0
收起左侧

写了一个关于两个厂房门联动的pic单片机程序,上板后不好使,求指点

[复制链接]
ID:388367 发表于 2018-8-21 10:08 | 显示全部楼层 |阅读模式
//这是一个关于两个厂房门联动的程序。

  1. #include<pic.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. __CONFIG(0x3B31);
  5. uchar cishu;        //设置一个标记变量,通过这个变量来观察是否有车辆正在通过通道,确定内外门是否开启
  6.                     //来自地感的开门信号,判断次数是否为0,为0说明没有车辆通过,门可以开启;如果为1,说
  7.                                //明有车两正在通过,不能开门
  8. uchar jin;         //为了解决内外两个门同时下咯,软件如何执行的问题,设立3个变量,同过比较进出两个变量
  9. uchar chu;          //大小,相等时变量为0,为0时候不动作;变量不为0时候执行命令。进出两个变量由开门信号产生。
  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)              //室内门开门信号

  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 内门开,外门锁,警灯亮
  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外门开,内门锁,警灯亮
  67.                 case 1:cishu=-1;break;
  68.                
  69.       
  70.                 }                              

  71.                                        
  72.                        
  73.                 }
  74.           }
  75.         if(RA0==0)               //室内门关闭到位,外门解锁 ,外门开启,次数加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)               //室外门关闭到位,内门解锁 ,内门开启,次数加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);    //开内门  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;                              //内门开
  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. }
复制代码



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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