一、原理图详解
蜂鸣器:
若N_BUZZ引脚为低电平时,则蜂鸣器打开,但是由于N_BUZZ引脚前面接了ULN 2003芯片,该芯片为非门芯片,则若要打开蜂鸣器,则要使P0^6引脚为高电平
即蜂鸣器为P0^6引脚高电平打开。
继电器:
当N_RELAY引脚为低电平时,继电器打开,同样的由于N_RELAY引脚前面接了ULN 2003芯片,该芯片为非门芯片,则若要打开继电器,则要使P0^4引脚为高电平
(继电器打开后,开关K1被吸附m2处,由于开关一端接地,则此时m2为接地,则右边的LED 灯接地则LED点亮,所以继电器旁的LED小灯亮则表示继电器处于工作状态)
二、引脚控制方案
控制蜂鸣器和继电器前要先将锁存器配置为Y5C打开,即P25=1; P26 = 0;P27=1;,然后分别控制P04和P06口来控制蜂鸣器和继电器
P04口为高电平则继电器工作
P06口为高电平则蜂鸣器打开
三、详细代码
代码如下(示例):
//通过板载按键S6和S7来控制继电器和蜂鸣器
#include <reg52.h>
#include <intrins.h>
sbit hc138_A=P2^5;
sbit hc138_B=P2^6;
sbit hc138_C=P2^7;
sbit RELAY = P0^4; //继电器控制引脚、高电平工作
sbit BUZZ = P0^6; //蜂鸣器控制引脚、高电平工作
sbit S6 = P3^1; //板载S6按键
sbit S7 = P3^0; //S7按键
void HC138(unsigned int n) //锁存器配置函数
{
switch(n)
{
case 4:
hc138_A=0 ; hc138_B=0 ; hc138_C=1; break;
case 5:
hc138_A=1 ; hc138_B=0 ; hc138_C=1; break;
case 6:
hc138_A=0 ; hc138_B=1 ; hc138_C=1; break;
case 7:
hc138_A=1 ; hc138_B=1 ; hc138_C=1; break;
}
}
void delay(unsigned int k) //延时函数
{
while(k--);
}
/*****按键扫描函数*****/
void key_scan(void)
{
if(S6 == 0)
{
delay(100); //延时消抖
if(S6 == 0)
{
HC138(5); //打开Y5C
BUZZ = ~BUZZ; //蜂鸣器引脚电平取反
}
while(!S6); //等待按键松开
}
if(S7 == 0)
{
delay(100); //延时消抖
if(S7 == 0)
{
HC138(5); //打开Y5C
RELAY = ~RELAY; //蜂鸣器引脚电平取反
}
while(!S7); //等待按键松开
}
}
void main()
{
HC138(5);
P0=0x00; //蜂鸣器和继电器初始化、、全关
HC138(4);
P0= 0xff; //LED小灯初始化、、全关
while(1)
{
key_scan(); //按键扫描
}
}