资讯详情

关于继电器和蜂鸣器的干扰问题

当我做自动灌溉系统的问题时,我发现继电器蜂鸣器同时干扰。

为了避免这种情况,我发现它可以使用,relay_flag, buzz_flag,1点打开标志,0点关闭标志。

void KeyAction(uchar keycode) {   if(keycode == '1')   {     buzz_flag = 1;               }   else if(keycode == '2')   {     buzz_flag = 0;   }   else if(keycode == '3')   {     relay_flag = 1;   }   else if(keycode == '4')   {     relay_flag = 0;   } } 

void SetFucker() {   if(buzz_flag)   {     if(relay_flag)     {       P2 = (P2&0x1f)|0xa0;       buzz = 1; relay = 1;                    P2 = P2&0x1f;     }     else     {       P2 = (P2&0x1f)|0xa0;       buzz = 1; relay = 0;       P2 = P2&0x1f;     }   }   else if(buzz_flag == 0)   {     if(relay_flag)     {       P2 = (P2&0x1f)|0xa0;       buzz = 0; relay = 1;       P2 = P2&0x1f;     }     else     {       P2 = (P2&0x1f)|0xa0;       buzz = 0; relay = 0;       P2 = P2&0x1f;     }   } } 

代码

main.c

****************************************************************************** * 文件名称:按键控制继电器蜂鸣器 * 描 述: * 作 思考与猫  * 日 期: 19/3/8 * 备 注:S4开蜂鸣器,S5关蜂鸣器,S6开继电器,S7关继电器  ******************************************************************************* #include<stc15f2k60s2.h> #define uchar unsigned char #define uint unsigned int  sbit key_in1 = P3^3; sbit key_in2 = P3^2; sbit key_in3 = P3^1; sbit key_in4 = P3^0;  sbit relay = P0^4; sbit buzz = P0^6;  uchar KeySat[4]={1, 1, 1, 1}; uchar KeyMap[4]={'1', '2', '3', '4'};  bit relay_flag = 0, buzz_flag = 0;  void CloseFucker(); void Timer0Init(); void KeyScan(); void KeyDriver(); void KeyAction(uchar keycode); void SetFucker();  void main() {   CloseFucker();   Timer0Init();   while(1)   {     KeyDriver();     SetFucker();   } } void KeyDriver() {   char i;   static uchar keyback[4] = {1, 1, 1, 1};      for(i=0; i<4; i  )   {     if(KeySat[i] != keyback[i])     {       if(KeySat[i] != 0)       {         KeyAction(KeyMap[i]);             }       keyback[i] = KeySat[i];     }   } } void SetFucker() {   if(buzz_flag)   {     if(relay_flag)     {       P2 = (P2&0x1f)|0xa0;       buzz = 1; relay = 1;       P2 = P2&0x1f;     }     else     {       P2 = (P2&0x1f)|0xa0;       buzz = 1; relay = 0;       P2 = P2&0x1f;     }   }   else if(buzz_flag == 0)   {     if(relay_flag)     {       P2 = (P2&0x1f)|0xa0;       buzz = 0; relay = 1;       P2 = P2&0x1f;     }     else     {       P2 = (P2&0x1f)|0xa0;       buzz = 0; relay = 0;       P2 = P2&0x1f;     }   } } void KeyAction(uchar keycode) {   if(keycode == '1')   {     buzz_flag = 1;   }   else if(keycode == '2')   {     buzz_flag = 0;   }   else if(keycode == '3')   {     relay_flag = 1;   }   else if(keycode == '4')   {     relay_flag = 0;   } } void KeyScan() {   char i;   static uchar keybuf[4] = {0xff, 0xff, 0xff, 0xff};      keybuf[0] = keybuf[0]<<1|key_in1;   keybuf[1] = keybuf[1]<<1|key_in2;   keybuf[2] = keybuf[2]<<1|key_in3;   keybuf[3] = keybuf[3]<<1|key_in4;      for(i=0; i<4; i  )   {     if(keybuf[i] == 0xff)     {       KeySat[i] = 1;      }     else if(keybuf[i] == 0x00)     {       KeySat[i] = 0;      }   } } void T0_time() interrupt 1 {   TL0 = 0x40;     TH0 = 0xA2;    KeyScan(); } void Timer0Init()   {   AUXR |= 0x80;     TMOD &= 0xF0;     TL0 = 0x40;     TH0 = 0xA2;     TF0 = 0;     TR0 = 1;     ET0 = 1;   EA = 1; } void CloseFucker() {   P2 = (P2&0x1f)|0xa0;   P0 = 0xaf;   P2 = P2&0x1f; } 

标签: tr50继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台