1.实验原理
74HC138译码器高三位P2^5,P2^6,P2^7,作为输入端,Y5作为输出口低电平,连接到74HC02或非门,或非门WR口与J13接地口连接为低电平,因此,两个输入端都为低电平,(先或后非) 输出高电平。
74HC573锁存器LE口接入高电平,使P0能正常输入命令,控制蜂鸣器/继电器的关断与开通。
138译码器→74HC02或非门→HC573锁存器→ULN2003芯片(反相器)→蜂鸣器/继电器
2.实验原图
3.各元器件原理图
74HC138译码器
HC573锁存器,ULN2003反相器
74HC02或非门
BUZZER蜂鸣器
继电器
4.代码部分
#include <STC15F2K60S2.H>
#include "intrins.h"
unsigned char buzzer;
unsigned char ctrl;
void Delay(unsigned int xms) //延时函数
{
unsigned char i, j;
while(xms)
{
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
xms--;
}
}
void HC573(unsigned char i)//锁存器控制函数
{
switch(i)
{
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;
case 0:P2 = 0x1f; break;
}
}
//蜂鸣器初始化引脚是P06,继电器初始化引脚是P04
void System_Init()
{
buzzer = 0;
ctrl = 0;
P0 = (buzzer<<6)|(ctrl<<4);
HC573(5);
HC573(0);
}
void main()
{
System_Init();
unsigned char i;
while(1)
{
while(i<5)
{
buzzer = 1;
P0 = (buzzer<<6)|(ctrl<<4);
HC573(5);
HC573(0);
Delay(200);
buzzer = 0;
P0 = (buzzer<<6)|(ctrl<<4);
HC573(5);
HC573(0);
Delay(1000);
i++;
}
ctrl = 1;
P0 = (buzzer<<6)|(ctrl<<4);
HC573(5);
HC573(0);
Delay(1000);
ctrl = 0;
P0 = (buzzer<<6)|(ctrl<<4);
HC573(5);
HC573(0);
Delay(1000);
i = 0;
}
}