基本功能:控制继电器吸合和断开,蜂鸣器响和不响
以上为控制蜂鸣器和继电器的基本模块
注意:需要蜂鸣器响得把跳帽盖上,此跳帽连接了蜂鸣器的N_BUZZ和ULN2003的N_BUZZ
接下来我们一步步分析如何实现,根据原理图,我们发现控制蜂鸣器和继电器与LED的控制大同小异,可以参考上一篇博客,唯一的区别在于多了一个ULN2003,它的OUT1-OUT8是将IN1-IN8进行取反操作,其中OUT5和OUT7分别为继电器和蜂鸣器。根据原理图,我们要关闭继电器和蜂鸣器,就需要将OUT5和OUT7取高电平,则IN5和IN7需要取低电平。
#include "reg52.h"
void InitHC138(unsigned char n)
{
switch(n)
{
case 4:
P2 = (P2 & 0X1f) | 0x80;
break;
case 5:
P2 = (P2 & 0X1f) | 0xa0;
break;
case 6:
P2 = (P2 & 0X1f) | 0xc0;
break;
case 7:
P2 = (P2 & 0X1f) | 0xe0;
break;
}
}
void OutPutP0(unsigned char channel, unsigned char dat)
{
InitHC138(channel);
P0 = dat;
}
void InitSystem()
{
OutPutP0(5,0x00);
}
void main()
{
InitSystem();
while(1);
}
通过以上代码,就能关闭继电器和蜂鸣器(蜂鸣器不响,继电器指示灯熄灭)
值得注意的是,我们这里使用了新的选择功能函数InitHC138,我们来分析分析
void InitHC138(unsigned char n)
{
switch(n)
{
case 4:
P2 = (P2 & 0X1f) | 0x80;
break;
case 5:
P2 = (P2 & 0X1f) | 0xa0;
break;
case 6:
P2 = (P2 & 0X1f) | 0xc0;
break;
case 7:
P2 = (P2 & 0X1f) | 0xe0;
break;
}
}
4,5,6,7分别对应着原理图的Y4,Y5,Y6,Y7
我们再来分析 P2端口,以P2 = (P2 & 0X1f) | 0x80;为例,首先这行代码先对P2进行了与操作(当A,B都为1时,其值为1,否则为零),我们拆开来看
P2.7/P2.6/P2.5/P2.4/P2.3/P2.2/P2.1/P2.0&00011111
我们可知,与操作是将P2.7,P2.6,P2.5初始化为0,其他端口置1
再看或操作(当A,B都为0时,其值为0,否则为1)
P2.7/P2.6/P2.5/P2.4/P2.3/P2.2/P2.1/P2.0|10000000
我们可知,或操作是将P2.7置1,其他端口不变
最终P2端口为0X8f,拆开为10001111,根据HC138译码器,是将Y4置0,打开关于LED的锁存器
其他的同理