標(biāo)題: 單片機(jī)循環(huán)控制多個繼電器 求助 [打印本頁]

作者: bluechariot    時間: 2022-10-21 03:40
標(biāo)題: 單片機(jī)循環(huán)控制多個繼電器 求助
問題描述:key_a ,key_b, key_c 三個開關(guān)分別對應(yīng) A1 A2      B1 B2     C1 C2    6個繼電器      


情景1  key_a打開,key_b&&key_c關(guān)斷,A1通;  key_a先開  key_b或key_c開一個,A1通且 B2或C2通,此時若key_a關(guān)斷,B1或C1通。                       情景2  key_b打開,key_a&&key_c關(guān)斷,B1通;  key_b先開  key_a或key_c開一個,B1通且 A2或C2通,此時若key_b關(guān)斷,A1或C1通。                       情景3  key_c打開, key_a&&key_b關(guān)斷,C1通;  key_c先開  key_a或key_b開一個,C1通且 A2或B2通,此時若key_c關(guān)斷,A1或B1通。  
情景4   key_a&&key_b&&key_c關(guān)斷,   A1 && B1 && C1 通。  


在線等大神回復(fù)。  目前 A>B>C   順序 開 沒問題,但是 BA BC CA 開  就會和前面的  AB AC BC沖突  不按計劃開啟。                     

作者: bluechariot    時間: 2022-10-21 04:57
#include<reg51.h>



sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^4;

sbit ATIAN=P0^0;
sbit BTIAN=P0^1;
sbit CTIAN=P0^2;
sbit AJIA=P0^3;
sbit BJIA=P0^4;
sbit CJIA=P0^5;











void main()
{
        P0=0xff;
        P10=0;
        while(1)
        {
                if(P14==1)
                {
                 P0=0xff;
                }
                else P0=0xf8;
               
               
                                       

               
       
                       
                                if((key0==0)&&(key1==1)&&(key2==1))             //A主
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                       
                                        if((key0==0)&&(key1==0)&&(key2==1))                                //A機(jī)主 B機(jī)備
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=0;CJIA=1;
                                        }                       
                                       
                                        if((key0==0)&&(key1==1)&&(key2==0))                                //A機(jī)主 C機(jī)備
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=0;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==1))                                //A機(jī)關(guān)機(jī),B機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                        if((key0==1)&&(key1==1)&&(key2==0))                                //A機(jī)關(guān)機(jī),C機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==1))                                //B機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==0))                                //B機(jī)主,C機(jī)備
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=0;
                                        }                       
                                       
                                        if((key0==1)&&(key1==1)&&(key2==0))                                //B機(jī)關(guān)機(jī),C機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }       

                                        if((key0==1)&&(key1==1)&&(key2==0))                                //C機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }       
                                       
        }
}                                               
                                       
//        現(xiàn)確少         B先開 A開;
//                           B先關(guān) A開;
//                           C先開 A開;
//                           C先關(guān) A開;
//                           C先開 B開;
//                           C先關(guān) B開;
                          
作者: bluechariot    時間: 2022-10-21 04:58
#include<reg51.h>

sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^4;

sbit ATIAN=P0^0;
sbit BTIAN=P0^1;
sbit CTIAN=P0^2;
sbit AJIA=P0^3;
sbit BJIA=P0^4;
sbit CJIA=P0^5;


void main()
{
        P0=0xff;
        P10=0;
        while(1)
        {
                if(P14==1)
                {
                 P0=0xff;
                }
                else P0=0xf8;
               
               
                                       

               
       
                       
                                if((key0==0)&&(key1==1)&&(key2==1))             //A主
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                       
                                        if((key0==0)&&(key1==0)&&(key2==1))                                //A機(jī)主 B機(jī)備
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=0;CJIA=1;
                                        }                       
                                       
                                        if((key0==0)&&(key1==1)&&(key2==0))                                //A機(jī)主 C機(jī)備
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=0;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==1))                                //A機(jī)關(guān)機(jī),B機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                        if((key0==1)&&(key1==1)&&(key2==0))                                //A機(jī)關(guān)機(jī),C機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==1))                                //B機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==0))                                //B機(jī)主,C機(jī)備
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=0;
                                        }                       
                                       
                                        if((key0==1)&&(key1==1)&&(key2==0))                                //B機(jī)關(guān)機(jī),C機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }       

                                        if((key0==1)&&(key1==1)&&(key2==0))                                //C機(jī)主
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }       
                                       
        }
}                                               
                                       
//        現(xiàn)確少     B先開 A開;
//                           B先關(guān) A開;
//                           C先開 A開;
//                           C先關(guān) A開;
//                           C先開 B開;
//                           C先關(guān) B開;
                          

作者: bluechariot    時間: 2022-10-21 07:30
#include<reg51.h>



sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^4;

sbit ATIAN=P0^0;
sbit BTIAN=P0^1;
sbit CTIAN=P0^2;
sbit AJIA=P0^3;
sbit BJIA=P0^4;
sbit CJIA=P0^5;


void main()
{
//        P0=0xff;    //開機(jī)繼電器全關(guān)
//        P10=0;
        while(1)
        {
//                if(P14==1)
//                {
//                 P0=0xff;
//                }
//                else P0=0xf8;
               
                                        if((key0==0)&&(key1==1)&&(key2==1))             //A主                                        1111 1110
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                       
                                        if((key0==0)&&(key1==0)&&(key2==1))                                //A機(jī)主 B機(jī)備                        1111 1100
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=0;CJIA=1;
                                        }                       
                                       
                                        if((key0==0)&&(key1==1)&&(key2==0))                                //A機(jī)主 C機(jī)備                        1111 1010
                                        {          
                                                   ATIAN=0;BTIAN=1;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=0;
                                        }                       
                                       
                                        if((key0==1)&&(key1==0)&&(key2==1))                                //A機(jī)關(guān)機(jī),B機(jī)主        1111 1101
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }                       
                                       
                                                if((key0==1)&&(key1==0)&&(key2==0))                    //B機(jī)主,C機(jī)備          1111 1001
                                        {          
                                                   ATIAN=1;BTIAN=0;CTIAN=1;
                                                        AJIA=1;BJIA=1;CJIA=0;
                                        }                       
                                       
                                        if((key0==1)&&(key1==1)&&(key2==0))                                //B機(jī)關(guān)機(jī),C機(jī)主         1111 1011
                                        {          
                                                   ATIAN=1;BTIAN=1;CTIAN=0;
                                                        AJIA=1;BJIA=1;CJIA=1;
                                        }       
                                       
        }
}                                               
作者: wojiaoguogai    時間: 2022-10-21 08:32
把誰先通的要記錄下來
作者: yzwzfyz    時間: 2022-10-21 08:39
建議改行。
作者: lkc8210    時間: 2022-10-21 09:26


作者: bluechariot    時間: 2022-10-24 16:17
wojiaoguogai 發(fā)表于 2022-10-21 08:32
把誰先通的要記錄下來

你給的這個邏輯合適,我進(jìn)入誤區(qū)  應(yīng)該 把判斷主備線路占用做判斷,就好辦多了。
作者: 一事無成    時間: 2022-10-24 23:18
可以用萬能的狀態(tài)機(jī),把上一個/幾個狀態(tài)記錄下來(取決于前幾個狀態(tài)能影響到下一個狀態(tài)),再確定下一個狀態(tài),要不把所有狀態(tài)和情況列出來,就很好寫了。




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