蓝桥杯单片机模块实现 #LED_2以及蜂鸣器的关闭

上一篇实现了LED模块最简单的部分,仅仅使用三行代码(bushi)就可以实现八个LED的频闪,那么基于数据手册的原理图,我们能够对LED实现稍微复杂一点的功能,其中就是大名鼎鼎的流水灯,即使L1~L8先后亮起,之后再先后关闭。

在实现上述功能前有个实验小细节之前并没有注意,就是蜂鸣器的关闭。由于关注LED的亮灭实验而忽略了这个烦人的器件,在单独实现模块的过程中,我们应该首先关闭LED、继电器,蜂鸣器。那么LED十分简单,继电器和蜂鸣器关闭方式类似,这里只举例蜂鸣器的关闭方法。

图一可得知蜂鸣器的控制端口即N_BUZZ,在图二可看到BUZZ通过ULN2003被74HC573所控制,其中Y5C乃74HC573的使能端口,和上篇文章一样,仍是由P25 P26 P27控制,但由于5的二进制是101,所以对应的P27 P26 P25为1 0 1。在前四位二进制1 0 1 0中十六进制表示为 0xa0 。代码如下

void class_buzz()
{
  P2 = (P2 & 0x1F | 0xA0 );
	P0 = 0x00;
	P2 &= 0x1F;	
}

与LED不同的是当N_BUZZ对应端口的电平为高电平时才能工作,所以P06对应的数字为0时蜂鸣器才会关闭。

OK下面就是流水LED的具体实现了,上一篇有原理图的具体图片,这里就不放图了,流水效果的实现仅代码方面有区别。但在实现之前我们知道,想要把灯进行一个个点亮的操作那么肯定要用到循环的,废话不多说直接上代码

while(1)
	{
		for(i=1;i<=8;i++)
		{
		  P2 = (P2 & 0x1f | 0x80);
	    P0 = 0xff << i;
	    P2 &= 0x1f;
			Delay200ms();
		}
		for(j=1;j<=8;j++)
		{
		  P2 = (P2 & 0x1f | 0x80);
	    P0 = ~(0xff << j);
	    P2 &= 0x1f;
			Delay200ms();
		}
	}

其中为了使灯一个个点亮进行的是按位取反的方法,使灯一个个点亮。代码十分简单,我下面直接放效果展示了。

流水效果

小结

本期在上一期基础上做了LED的稍微复杂一点点的操作(虽然还是很简单),了解了单片机的基础工作原理,下期预告:数码管

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值