【ct107d】蜂鸣器,继电器控制

这篇博客介绍了微控制器如何通过M74HC573锁存器和ULN2003驱动蜂鸣器和继电器。ULN2003作为高耐压大电流驱动器兼有非门功能,控制信号通过P04和P06口。程序优化中创建了一个子程序`hc138init`用于选择Y4到Y7的输出,只有当所有输出为高电平时锁存器才导通。在主程序中,通过`ledrun`实现了LED灯的亮灭效果以及继电器和蜂鸣器的控制。
摘要由CSDN通过智能技术生成

蜂鸣器,继电器的控制

与led一样 蜂鸣器继电器的输出都有M74HC573锁存器的控制。
先放上原理图:
在这里插入图片描述
与其不同的是在锁存器与输出引脚之间有一个ULN2003
ULN2003

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003不仅有驱动作用,而且有非门的作用;
从原理图上可知蜂鸣器的一个引脚接vcc一个引脚接到了ULN2003的第10引脚,对应着单片机的P06口;
继电器而言引脚接到了ULN2003的12引脚,与输入io引脚P04;
故用P06和P04能控制蜂鸣器和继电器,控制的蜂鸣器的引脚若是高电平1,蜂鸣器就不鸣响,反之低电平0就会鸣响。控制继电器引脚若是高电平1则继电器不吸合led灯不亮,反之引脚低电平继电器吸合led灯亮;结合到ULN2003有非门的作用可知。

PO4,P06送入0即低电平蜂鸣器和继电器不发挥作用
P04,P06送人高电平则发挥作用

与led一样都是先打开锁存器再向PO口送数。
在这里插入图片描述
这次我们优化了程序,我们建一个子程序来选择Y4,Y5,Y6,Y7的输出
只有当他们都为高电平是锁存器才打通
程序如下:

void hc138init(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;
    }
}

为何这样写,大家可以思考一下,也可以用位定义。
再放上总程序:

#include<reg52.h>  //头文件
#define uchar unsigned char
#define uint  unsigned int
#define led P0  //宏定义
uchar a;
void delay(uint i)  //延时
{
    while(i--);
}

void hc138init(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 init()  //初始化 关闭蜂鸣器,继电器
{
    hc138init(5);
    P0=0x00;  
}
void ledrun()  //小灯亮灭两次再依次流水点亮 继电器吸合蜂鸣器响
{
    hc138init(4);
    P0=0x00;
    delay(50000);
    P0=0xff;
    delay(50000);
	P0=0x00;
    delay(50000);
    P0=0xff;
    delay(50000);
    for(a=0;a<8;a++)
    {
	P0=0X01;
    P0=~(P0<<a);
    delay(50000);
    }
    hc138init(5);
    P0=0x10;
    delay(50000);
    P0=0x00;
    delay(5000);
    P0=0x40;
    delay(50000);
    P0=0x00;
    delay(5000);   
}
void main()
{
	init();
	while(1)
	{
	ledrun();
	}	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你我山巅自相逢y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值