单片机蓝桥杯——蜂鸣器、继电器

        当Y5C有效时,P0口可以控制蜂鸣器、继电器等,不过,由于单片机驱动能力有限,一般会采用ULN2003等是大电流驱动装置,如图,经过573锁存器输出后接了一个ULN2003,可直接驱动继电器等大电流的装置。需要注意的是ULN2003是个非门电路,输出与输入相反。例如下图中的当P0.6为低电平时,BUZZ为高电平。

蜂鸣器

        电路如下,由图可知,当BUZZ为0,即P0.6为1时,蜂鸣器响。

继电器

          电路如下,由图可知,当N_RELAY为0,即P0.4为1时,上方有电流通过,K1接通到m2,m2为低电平,继电器工作。(注意:由于不同板的电路图不同,继电器工作时的引脚高低也不尽相同,比如我的板是为0的时候继电器打开,但有的板则是为1继电器打开)

代码如下:

#include"reg51.h"

sbit fmq=P0^6;
															 
void Delay(unsigned int t)//简单的延时函数
{
	while(t--);
	while(t--);
	while(t--);	
}

void Init_74HC138(unsigned char n)
{
	switch(n)
	{
		case 4://Y4有效,P0直接控制LED
			P2=(P2 & 0x1f) | 0x80;
			break;
		case 5://Y5有效,P0控制蜂鸣器、继电器
			P2=(P2 & 0x1f) | 0xa0;
			break;
		case 6://Y6有效,P0控制数码管位选
			P2=(P2 & 0x1f) | 0xc0;
			break;
		case 7://Y7有效,P0控制数码管段选
			P2=(P2 & 0x1f) | 0xe0;
			break;
	}
}

//*************主函数************
void main()
{
	Init_74HC138(5);//Y5有效,P0口控制蜂鸣器
	while(1)
	{		
		fmq=1;//蜂鸣器响
		Delay(10000);
		fmq=0;//蜂鸣器不响
		Delay(10000);	
	}
	
}

         整体程序相对而言比较简单,唯一需要注意的是对74hc138的片选函数进行了改进,相对于之前的子程序(如下)代码量小了些。一个是一位一位的进行设置,一个是通过P2口直接设置,后一种逻辑可能有些复杂,但对于代码的书写量却大大减少,节省时间。

void Init74HC138(unsigned char n)
{
	switch(n)
	{
		case 4://Y4有效,P0直接控制LED
			HC138_A=0;
			HC138_B=0;
			HC138_C=1;
			break;
		case 5://Y5有效,P0控制蜂鸣器、继电器
			HC138_A=1;
			HC138_B=0;
			HC138_C=1;
			break;
		case 6://Y6有效,P0控制数码管位选
			HC138_A=0;
			HC138_B=1;
			HC138_C=1;
			break;
		case 7://Y7有效,P0控制数码管段选
			HC138_A=1;
			HC138_B=1;
			HC138_C=1;
			break;			
	}
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值