蓝桥杯备赛——蜂鸣器和继电器控制

  在上一节教程中我们介绍了蓝桥杯单片机CT107D的LED灯的控制。

  在上一节的代码里面有一段:

P2 = (P2 & 0x1f)| 0xa0;
P0=0x00;

首先我们是对P2寄存器的写入到我们P2寄存器内 :

这个时候我们P2寄存器里面的值假设为:0101 1011;

然后我们 “&(且)”上0x1F       // 0001 1111

0101 1011 & 0001 1111 = 0001 1011

这个时候P2寄存器的高三位就全都为0了,而低五位不变。在我们CT107D单片机硬件图里面,138译码器的输入口仅连接三个IO口,分别为P25、P26和P27。

利用上述方法就可以使P2只更改寄存器高三位的值而不改变其他值,以免对程序产生影响。

继电器和蜂鸣器的控制

与蜂鸣器和继电器有关的电路如下:

HC573锁存器连接了一个ULN2003芯片,ULN2003芯片主要用来放大电流,增强单片机的驱动能力。高电平通过ULN2003时会转变为低电平。

继电器原理图如下:

 

 继电器可以理解为,由一块电磁铁控制开关。当N_RELAY通入高电平时,电磁铁不工作,通入低电平时,电磁铁有磁性,吸引开关向下导通M2。

继电器的控制我们就可以这样写:

由于我们下一节已经学习了特殊寄存器SFR。我们接下来编程的时候就可以在Keil中选择好芯片型号,右键导入我们所需的头文件。头文件里面有官方定义的所有特殊寄存器。

#include <STC15F2K60S2.H>

然后建立一个主函数。

#include <STC15F2K60S2.H>


void main(void)
{
	P2 = ( P2 &0x1f) | 0xa0;//选择控制LED灯的锁存器
	P0 = 0xff;              //将LED灯全关
	P2 = ( P2 &0x1f) | 0xa0;//选择控制继电器的锁存器
	P0 = 0x10;              //打开继电器
	
	while(1)
	{
		
	}
}

蜂鸣器的控制同理:

代码如下:

 

#include <STC15F2K60S2.H>


void main(void)
{
	P2 = ( P2 &0x1f) | 0xa0;//选择控制LED灯的锁存器
	P0 = 0xff;              //将LED灯全关
	P2 = ( P2 &0x1f) | 0xa0;//选择控制蜂鸣器的锁存器
	P0 = 0x40;              //打开蜂鸣器
	
	while(1)
	{
		
	}
}

建立蜂鸣器和继电器控制函数

#include <STC15F2K60S2.H>



void Hardware_Ctrl(unsigned char Place, unsigned char Set)
{
	P2 = ( P2 &0x1f) | 0xa0;
	if(Set)
	{
		P0 = 0x01 << Place;
	}
	else 
	{
		P0 = 0x00;
	}

}

void main(void)
{
	P2 = ( P2 &0x1f) | 0xa0;//选择控制LED的锁存器
	P0 = 0xff;              //关掉所有LED
	Hardware_Ctrl(6,1);//打开蜂鸣器
	Hardware_Ctrl(4,1);//打开继电器
	while(1)
	{
		
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值