蓝桥杯备战02-蜂鸣器与继电器

需求:先让8路LED指示灯闪烁3遍后熄灭,接着依次点亮LED指示灯,继电器吸合后断开,然后依次熄灭LED指示灯,蜂鸣器叫一会儿后关闭。

N_BUZZ输出为低电平时,蜂鸣器工作;N_RELAY为低电平时,继电器吸合。

N_BUZZ和N_RELAY这两个信号通过74HC573锁存器和ULN2003。因此,要控制这两个信号74HC573锁存器的LE需要接收高电平,即Y5C输出高电平。

Y5C受一个或非门控制,WR为0,Y5C要为1,Y5则为0。Y5信号受138译码器控制,要让Y5输出低电平,138译码器的C、B、A口分别为1、0、1即可。此时已经完成了74HC573的数据导通,导通后数据来到ULN2003,其为一个晶体管阵列,内部主要就是非门,原理图如下:

要让N_BUZZ和N_RELAY这两个信号为0,通过ULN2003的非门,那么IN5和IN7的输入信号则要为1,既然74HC573锁存器信号已经导通,那么只需P04和P06为1即可完成蜂鸣器与继电器的运行。

完整代码:

#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 LEDRunning()
{
    unsigned char i;
    HC138_C = 1;
    HC138_B = 0;
    HC138_A = 0;            //让Y4输出低电平

    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;            //让Y5输出低电平    
    P0 = 0x10;
    Delay(60000);
    Delay(60000);
    P0 = 0x00;

    HC138_C = 1;
    HC138_B = 0;
    HC138_A = 0;            //让Y4输出低电平
    for(i = 1; i <= 8; i++)
    {
        P0 = ~(0xff << i);
        Delay(60000);
        Delay(60000);
    }

    HC138_C = 1;
    HC138_B = 0;
    HC138_A = 1;            //让Y5输出低电平    
    P0 = 0x40;
    Delay(60000);
    Delay(60000);
    P0 = 0x00;
}

void InitSystem()
{
    HC138_C = 1;
    HC138_B = 0;
    HC138_A = 1;            //让Y5输出低电平
    
    P0 = 0x00;            
}

void main()
{
    InitSystem();
    while(1)
    {
         LEDRunning();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值