標(biāo)題: 請教一下單片機C語言繼電器if判斷代碼問題 [打印本頁]

作者: idsjp    時間: 2021-4-19 13:41
標(biāo)題: 請教一下單片機C語言繼電器if判斷代碼問題
像下面if判斷執(zhí)行繼電器 這8個判斷方式可以直接寫在一個if判斷里么 麻煩大神講解下 謝謝

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

typedef unsigned int u16;          //對數(shù)據(jù)類型進行聲明定義
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)                  //執(zhí)行1號繼電器動作
        {        
                delay(1000);   
                if(k1==0)         
                {
                        l1=~l1;         
                }
                while(!k1);         
        }        
        if(k2==0)                  //執(zhí)行2號繼電器動作
        {        
                delay(1000);   
                if(k2==0)         
                {
                        l2=~l2;         
                }
                while(!k2);         
        }        
        if(k3==0)                  //執(zhí)行3號繼電器動作
        {        
                delay(1000);   
                if(k3==0)         
                {
                        l3=~l3;         
                }
                while(!k3);         
        }        
        if(k4==0)                  //執(zhí)行4號繼電器動作
        {        
                delay(1000);   
                if(k4==0)         
                {
                        l4=~l4;         
                }
                while(!k4);         
        }        
        if(k5==0)                  //執(zhí)行5號繼電器動作
        {        
                delay(1000);   
                if(k5==0)         
                {
                        l5=~l5;         
                }
                while(!k5);         
        }        
        if(k6==0)                  //執(zhí)行6號繼電器動作
        {        
                delay(1000);   
                if(k6==0)         
                {
                        l6=~l6;         
                }
                while(!k6);         
        }        
        if(k7==0)                  //執(zhí)行7號繼電器動作
        {        
                delay(1000);   
                if(k7==0)         
                {
                        l7=~l7;         
                }
                while(!k7);         
        }        
        if(k8==0)                  //執(zhí)行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();         
        }               
}


作者: 啊哈哈123    時間: 2021-4-19 13:41
要確定你這邊按鍵的功能需求。
你現(xiàn)有的程序,是按鍵互斥的,當(dāng)一個按鍵先一直按住,在按其他按鍵是無效的。等效為互斥。
那就可以把判斷條件放在一起如:
if(!key1||!key2||!key3...||!key8)
{

}
作者: idsjp    時間: 2021-4-19 13:43
像這樣     如果(a=1 或 b=1 或 c=1)   
作者: 啊哈哈123    時間: 2021-4-19 17:55
//之前的沒寫完就發(fā)出去了。。。。
if(!key1||!key2||!key3...||!key8)
{
   delay(1000);//防抖
   if(!key1)         
   {
       l1=~l1;
       while(!key1);           
    }
     else if(!key2)         
   {
       l2=~l2;
       while(!key2);           
    }
.......
}
作者: idsjp    時間: 2021-4-19 18:01
謝謝 主要是完全沒接觸過C語言 只會易語言 不過我發(fā)現(xiàn)思路其實都一樣 只是代碼描述有點區(qū)別




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1