欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機5個按鍵控制5個繼電器開關(guān) 程序調(diào)試不出來 [打印本頁]

作者: Granger-R    時間: 2022-4-6 22:31
標題: 單片機5個按鍵控制5個繼電器開關(guān) 程序調(diào)試不出來
一個獨立按鍵可以控制繼電器開關(guān),但是我想5個獨立按鍵控制5個繼電器程序調(diào)不出來,請求大佬指點

下面是一個按鍵控制一個繼電器單片機程序
#include <reg52.h>

#define uchar unsigned char

sbit A = P3 ^ 0;

sbit RelayEN = P2 ^ 0;                                   //定義繼電器開啟信號

void Timer0Init();                                           //聲明定時器0初始化函數(shù)
void RelayProcess();                                   //聲明斷電器處理函數(shù)

uchar count = 0;                                           //計秒數(shù)

void main()                                                           //主函數(shù)
{
        RelayEN = 1;                                           //開機時關(guān)閉繼電器,否則一上電繼電器有動作;

        Timer0Init();
        RelayProcess();
        
}

void Timer0Init()                                           //定時器初始化函數(shù)
{
        TMOD |= 0x01;                                           //“|”使用多個定時器時不受影響
        TH0 = 0xFC;                                                   //定時1MS
        TL0 = 0x67;
        TR0 = 1;                                                   //開啟定時器0
        EA = 1;                                                           //開啟總中斷
        ET0 = 1;                                                   //開啟定時器0中斷
}

void RelayProcess()                                          //繼電器處理函數(shù)
{
        A = 0x01;                                                  //讀外部狀態(tài)時,先使端口輸出高電平;
        while (1)
        {
                if(!A)                                          //判定有無按鍵按下
                {
                        if(count >= 20)                          //判定秒數(shù)是否達到20MS,即去抖
                        {
                                count = 0;
                                if(!A)
                                {
                                        RelayEN = ~RelayEN;//當(dāng)按鍵按下時,改變繼電器的狀態(tài)
                                        while(!A);           //等待按鍵釋放;
                                }
                        }
                }
        }
        
}

void Timer0() interrupt 1                                //定時器0中斷函數(shù)
{
        TH0 = 0xFC;                                                        //重新賦值給定時器0
        TL0 = 0x67;
        count++;                                                        //計秒數(shù)
}


作者: lkc8210    時間: 2022-4-7 00:12
  1. sbit Key_A = P3 ^ 0;
  2. sbit Key_B = P3 ^ 1;
  3. sbit Key_C = P3 ^ 2;
  4. ...

  5. sbit RelayEN = P2 ^ 0;                                   //定義繼電器開啟信號
  6. sbit RelayEN2 = P2 ^ 1;                                   //定義繼電器開啟信號
  7. sbit RelayEN3 = P2 ^ 2;                                   //定義繼電器開啟信號
  8. ...

  9. if(!Key_A || !Key_B || !Key_C)                                          //判定有無按鍵按下
  10. {
  11.         if(count >= 20)                          //判定秒數(shù)是否達到20MS,即去抖
  12.         {
  13.                 if(!Key_A)
  14.                 {
  15.                         RelayEN = ~RelayEN;//當(dāng)按鍵按下時,改變繼電器的狀態(tài)
  16.                 }
  17.                 if(!Key_B)
  18.                 {
  19.                         RelayEN2 = ~RelayEN2;//當(dāng)按鍵按下時,改變繼電器的狀態(tài)
  20.                 }
  21.                 if(!Key_C)
  22.                 {
  23.                         RelayEN3 = ~RelayEN3;//當(dāng)按鍵按下時,改變繼電器的狀態(tài)
  24.                 }
  25.                 while(!Key_A || !Key_B || !Key_C);           //等待按鍵釋放;
  26.         }
  27. }else{
  28.         count = 0;
  29. }
復(fù)制代碼



作者: Granger-R    時間: 2022-4-7 01:45
lkc8210 發(fā)表于 2022-4-7 00:12

謝謝啊,可以了,但是就第一個三極管基極加電阻就可以控制,后面幾個要去掉基極的限流電阻,這是什么原因啊。可以看一下第二個跟第三個對比,進來都是低電平,第二個電機轉(zhuǎn)[img][/img],但第三個不轉(zhuǎn),就是要去掉電阻嗎[img]
作者: Granger-R    時間: 2022-4-7 01:47
lkc8210 發(fā)表于 2022-4-7 00:12

還有第一個電機轉(zhuǎn)一段時間,也就自己停了。所以我把電阻都取了




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