单片机C51使用一个按键控制继电器开关通断

     既上一次发布博文,这一次发表的文章是对上一篇博文的补充改进。本着优化算法的原则,硬件简化后,软件便会变得复杂。
     硬件部分使用一个按键控制继电器的通断情况,按下按键,单片机判断当前继电器的通断情况。如果当前继电器是导通的,按下按键后,单片机按位取反,继电器下一个状态就会变关闭的状态;如果当前继电器是关闭的,按下按键后,单片机按位取反,继电器下一个状态就会变导通的状态。
     优化算法,C语言中,运算分成逻辑非运算和按位取反运算。经过逻辑非运算(运算符为"!")运算后,运算结果只有0或1;而经过按位取反运算(运算符为"~")后,结果取决于操作数,比如 8位无符号数0,按位取反后就变成FF  了。   应该用逻辑取反!, 不是0就是1.  
#include <reg52.h>
sbit relay=P1^1;     //接继电器控制端

void delay_10ms();

void main()
{
       unsigned char flag = 0;

         while (1)
         {
               if(0==P1^3) {//判断按键是否按下
                        delay_10ms();
                        if(0==P1^3) {
                            relay = ~flag;//继电器开
                        }
                }
         }
}


/*
单片机12M晶振下,延迟10ms函数
*/
void delay_10ms()
{
     unsigned char i,j,k;
     for(i=5;i>0;i--)
     {
           for(j=4;j>0;j--)
           {
                   for(k=248;j>0;j--);
            }
      }
}

Perotues图如下:
一个按键开关

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值