理解基础部件
-
DIODE:继电器。竖着的长方形是一个线圈,中间接了一个铁芯。给线圈通电的时候会产生交变的磁场,线圈和铁芯就会变成一个电磁铁,然后把开关吸合下来。VCC已经接了高电平,所以只要N RELAY端接低电平,这个继电器就会吸合。二极管起导通作用
-
BUZZER:蜂鸣器,VCC已经接了电源,想让蜂鸣器叫,只需要给N BUZZ一个低电平
-
ULN2003:晶体管列阵,也叫达林顿管,起到一个缓冲驱动的作用。继电器和蜂鸣器的引脚N RELAY 和N BUZZ 都与ULN2003相连。
ULN2003的内部结构有个非门,所以IN和OUT输入输出是相反的
-
M74HC573MIR:锁存器,ULN2003的输入端与Q端相连,由D控制。让DQ连通,需要LE为高电平—>需要Y5C为高电平
让继电器打开:p04=1
蜂鸣器叫:P07=1
-
74HC02和74HC138:Y5C高电平—>Y5为0—>CBA为101
小记:74HC138用来控制某个部件的开关
代码实现
1、初始化:
关掉无用的设备,关掉蜂鸣器和继电器,首先打开就是让74HC138的控制器—>Y5=0—>CAB=101,然后
P0=0x00; //通过达林顿管之后全都输出一个高电平。这样的话继电器和蜂鸣器就会灭掉
void InitSystem()
{
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
P0 = 0x00;
}
2、继电器吸合后再关掉
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
P0 = 0x10; //打开继电器,让P04=1
Delay(60000);
Delay(60000);
P0 = 0x00; //关掉继电器
3、打开蜂鸣器
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
P0 = 0x40; //打开蜂鸣器,让P07=1
Delay(60000);
Delay(60000);
P0 = 0x00; //关掉蜂鸣器
小tips:在中途控制不同的部件的时候,CAB要变,所以每设置一个部件的时候,就重新设置一下CAB
整体代码
#include "reg52.h"
sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
void InitSystem()
{
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
P0 = 0x00;
}
void LEDRunning()
{
unsigned char i;
HC138_C = 1;
HC138_B = 0;
HC138_A = 0;
for(i=0;i<3;i++){
P0 = 0x00;
Delay(60000);
Delay(60000);
P0 = 0xFF;
Delay(60000);
Delay(60000);
}
for(i=1;i<=8;i++){
P0 = 0xff <<i;
Delay(60000);
Delay(60000);
}
HC138_C = 1;
HC138_B = 0;
HC138_A = 1;
P0