找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1313|回复: 3
打印 上一主题 下一主题
收起左侧

单片机按键控制继电器程序,不能正常运行是怎回事,大神指教下

[复制链接]
跳转到指定楼层
楼主
ID:724976 发表于 2020-9-12 23:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>

  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar x,miao,jishi;//计时

  5. sbit K0=P3^5; //轻触开关
  6. sbit K1=P3^0;        
  7. sbit K2=P3^1;      
  8. sbit K3=P3^4;        




  9. sbit JDQ1=P3^7; //继电器
  10. sbit JDQ2=P1^2;
  11. sbit JDQ3=P1^7;


  12. sbit BM1 =P1^3;//拔码开关
  13. sbit BM2 =P1^4;
  14. sbit BM3 =P1^5;
  15. sbit BM4 =P1^6;

  16. bit b1,b2,b3,b4;


  17. void DelayMS(uint z) //延时
  18. {
  19.         uint x,y;
  20.         for(x=z;x>0;x--)
  21.                 for(y=100;y>0;y--);
  22. }
  23.        
  24. void init()//初始化
  25. {
  26.         TMOD=0x01;                                           //T0 工作在方式1 16位计数器
  27.         TH0=(65536-10000)/256;
  28.         TL0=(65536-10000)%256;
  29.         EA=1;                                                     //开启 总中断
  30.   ET0=1;
  31.         TR0=1;

  32. }


  33. void main()
  34. {
  35.         init();
  36.          
  37.         while(1)
  38.         {
  39.                 if(BM1==0&&BM2==1&&BM3==1&&BM4==1&&b1==0)//拔码0111计5分钟
  40.                 {
  41.                          x=miao=0;
  42.                          jishi=10;
  43.        b1=1;
  44.     }       
  45.                 if(BM1==1&&BM2==0&&BM3==1&&BM4==1&&b2==0)//拔码1011计10分钟
  46.                 {  x=miao=0;
  47.                          jishi=20;
  48.        b2=1;
  49.     }       
  50.                 if(BM1==1&&BM2==1&&BM3==0&&BM4==1&&b3==0)//拔码1101计15分钟
  51.                 {         x=miao=0;
  52.                          jishi=30;
  53.                          b3=1;
  54.     }       
  55.                 if(BM1==1&&BM2==1&&BM3==1&&BM4==0&&b4==0)//拔码1110计20分钟
  56.                 {         x=miao=0;
  57.                          jishi=10;
  58.        b4=1;
  59.     }       
  60.                 if(BM1==1)b1=0;
  61.                 if(BM2==1)b2=0;
  62.     if(BM3==1)b3=0;
  63.     if(BM4==1)b4=0;               
  64.                
  65.                 if(K1==0)//K1对RL1自锁
  66.                 {

  67.                          DelayMS(20);
  68.                          while(K1==0);
  69.                                 
  70.                                          DelayMS(50);
  71.                          JDQ1=~JDQ1;
  72.                          b1=b2=b3=b4=0;
  73.     }

  74.                 if(K2==0)//K2对RL2自锁
  75.                 {

  76.                          DelayMS(20);
  77.                          while(K2==0);
  78.                          
  79.                                          DelayMS(50);
  80.                          JDQ2=~JDQ2;
  81.                          b1=b2=b3=b4=0;
  82.     }

  83.                 if(K3==0)//K3对RL3自锁
  84.                 {

  85.                          DelayMS(20);
  86.                          while(K3==0);
  87.                          
  88.                                          DelayMS(50);
  89.                          JDQ3=~JDQ3;
  90.                          b1=b2=b3=b4=0;
  91.     }
  92.        




  93.                 if(K0==0)//K0按1次所有RL吸合.再1次所有RL断开.
  94.                 {
  95.                                 {

  96.                          DelayMS(20);
  97.                          while(K0==0);
  98.                          
  99.                                          DelayMS(50);
  100.                          if(JDQ1=JDQ2=JDQ3)
  101.                          {
  102.                                  JDQ1=~JDQ1;
  103.                 JDQ2=~JDQ2;
  104.                                  JDQ3=~JDQ3;
  105.                             b1=b2=b3=b4=0;
  106.        }       
  107.                          else
  108.                          {
  109.                                   JDQ1=1;
  110.                                         JDQ2=1;
  111.                                         JDQ3=1;
  112.                                    b1=b2=b3=b4=0;
  113.                        
  114.                          }

  115.        }       


  116.             }




  117.                 if(jishi==0)//预定计算时间到.所有RL断开.
  118.                 {
  119.                                 JDQ1=1;
  120.                                 JDQ2=1;
  121.                                 JDQ3=1;

  122.          b1=b2=b3=b4=0;
  123.     }

  124.   }
  125. }


  126. void time0(void) interrupt 1 using 0
  127. {
  128.   TH0=(65536-10000)/256;
  129.   TL0=(65536-10000)%256;
  130.         x++;
  131.        
  132.         if(x==100)
  133.         {
  134.                         x=0;
  135.                         miao++;//计1秒
  136.                        
  137.         }
  138.         if(miao==60)//计一分钟
  139.         {
  140.       miao=0;
  141.                   if(jishi>0)jishi--;
  142.        
  143.   }

  144.        

  145.                
  146.        
  147.                
  148. }
复制代码


chengxu.c.zip

1.08 KB, 下载次数: 3

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-9-13 03:54 | 只看该作者
if(JDQ1=JDQ2=JDQ3)?
回复

使用道具 举报

板凳
ID:724976 发表于 2020-9-13 10:58 来自手机 | 只看该作者
xianfajushi 发表于 2020-9-13 03:54
if(JDQ1=JDQ2=JDQ3)?

少了=。谢谢。我再试下
回复

使用道具 举报

地板
ID:724976 发表于 2020-9-13 13:13 来自手机 | 只看该作者
xianfajushi 发表于 2020-9-13 03:54
if(JDQ1=JDQ2=JDQ3)?

全开,全关不正常。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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