找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1597|回复: 4
收起左侧

请教一下单片机C语言继电器if判断代码问题

[复制链接]
ID:908313 发表于 2021-4-19 13:41 | 显示全部楼层 |阅读模式
1黑币
像下面if判断执行继电器 这8个判断方式可以直接写在一个if判断里么 麻烦大神讲解下 谢谢

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;sbit k5=P1^4;sbit k6=P1^5;sbit k7=P1^6;sbit k8=P1^7;         //定义P10口是k1
sbit l1=P0^0;sbit l2=P0^1;sbit l3=P0^2;sbit l4=P0^3;sbit l5=P0^4;sbit l6=P0^5;sbit l7=P0^6;sbit l8=P0^7;         //定义P00口是led

void delay(u16 i)
{
        while(i--);        
}

void keypros()
{
        if(k1==0)                  //执行1号继电器动作
        {        
                delay(1000);   
                if(k1==0)         
                {
                        l1=~l1;         
                }
                while(!k1);         
        }        
        if(k2==0)                  //执行2号继电器动作
        {        
                delay(1000);   
                if(k2==0)         
                {
                        l2=~l2;         
                }
                while(!k2);         
        }        
        if(k3==0)                  //执行3号继电器动作
        {        
                delay(1000);   
                if(k3==0)         
                {
                        l3=~l3;         
                }
                while(!k3);         
        }        
        if(k4==0)                  //执行4号继电器动作
        {        
                delay(1000);   
                if(k4==0)         
                {
                        l4=~l4;         
                }
                while(!k4);         
        }        
        if(k5==0)                  //执行5号继电器动作
        {        
                delay(1000);   
                if(k5==0)         
                {
                        l5=~l5;         
                }
                while(!k5);         
        }        
        if(k6==0)                  //执行6号继电器动作
        {        
                delay(1000);   
                if(k6==0)         
                {
                        l6=~l6;         
                }
                while(!k6);         
        }        
        if(k7==0)                  //执行7号继电器动作
        {        
                delay(1000);   
                if(k7==0)         
                {
                        l7=~l7;         
                }
                while(!k7);         
        }        
        if(k8==0)                  //执行8号继电器动作
        {        
                delay(1000);   
                if(k8==0)         
                {
                        l8=~l8;         
                }
                while(!k8);         
        }        
               
}

void main()
{        
        l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;
        while(1)
        {        
                keypros();         
        }               
}

最佳答案

查看完整内容

要确定你这边按键的功能需求。 你现有的程序,是按键互斥的,当一个按键先一直按住,在按其他按键是无效的。等效为互斥。 那就可以把判断条件放在一起如: if(!key1||!key2||!key3...||!key8) { }
回复

使用道具 举报

ID:332214 发表于 2021-4-19 13:41 | 显示全部楼层
要确定你这边按键的功能需求。
你现有的程序,是按键互斥的,当一个按键先一直按住,在按其他按键是无效的。等效为互斥。
那就可以把判断条件放在一起如:
if(!key1||!key2||!key3...||!key8)
{

}
回复

使用道具 举报

ID:908313 发表于 2021-4-19 13:43 | 显示全部楼层
像这样     如果(a=1 或 b=1 或 c=1)   
回复

使用道具 举报

ID:332214 发表于 2021-4-19 17:55 | 显示全部楼层
//之前的没写完就发出去了。。。。
if(!key1||!key2||!key3...||!key8)
{
   delay(1000);//防抖
   if(!key1)         
   {
       l1=~l1;
       while(!key1);           
    }
     else if(!key2)         
   {
       l2=~l2;
       while(!key2);           
    }
.......
}
回复

使用道具 举报

ID:908313 发表于 2021-4-19 18:01 | 显示全部楼层
谢谢 主要是完全没接触过C语言 只会易语言 不过我发现思路其实都一样 只是代码描述有点区别
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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