C51:蜂鸣器和继电器

蜂鸣器的分类:

  1. 有源蜂鸣器:内部带振荡源,只要一通电就会叫,声音频率固定。用的比较多
  2. 无源蜂鸣器:内部不带振荡源,必须要用方波来驱动它,用的少

蜂鸣器和继电器程序控制顺序:

P0输出——>打开锁存器(P27 P26 P25输出控制)——>关闭锁存器(让控制外设的数据稳定)

程序解释

1.P0口控制着继电器和蜂鸣器的打开和关闭。看左图的最右边,荧光笔标注部分,从上往下看(从0开始数),delay(继电器)在第四位,buzz(蜂鸣器)在第六位,所以通过对P0口第四位和第六位赋值0或1就可以控制继电器和蜂鸣器的开关。

2.打开锁存器,这个时候需要给P2口赋值,我们需要让Y5C打开,如图右半部分所示,那么P27=1,P26=0,P25=1,对P2字节赋值,P2=0xa0

3.关闭锁存器,直接对P2字节赋值为0即可

【原则】:在打开锁存器前,需要保持P0数据的稳定;在关闭锁存器后,才可以操作P0改变数据,这样可以保护数据安全


程序示例(标志位控制写法)

unsigned char buzzer_ctrl;//定义全局变量,buzzer_ctrl用来控制蜂鸣器
unsigned char relay_ctrl;//定义全局变量,relay_ctrl用来控制继电器
void vSystem_Init(void)
{
  buzzer_ctrl=0;
  relay_ctrl=1;
  P0=(buzzer_ctrl<<6)|(relay_ctrl<<4);//标志位控制
  P2=0xa0;//打开锁存器,控制ULN2003输出
  P2=0;//关闭锁存器
}

解释:

将relay_ctrl赋值为1,按十六进制写法,relay_ctrl=0x01,relay_ctrl<<4,即向左移动四位,就是0x0000 0001——>0x0001 0000,这样就可以对P0口的第四位进行赋值,也就可以控制继电器的开关了。蜂鸣器也是同理。

标志位控制的优点:

  • 让P0的数据同时输出
  • 可以单独控制某一位

最后,你可能有问题,为什么程序中需要那么多的芯片呢

1.其实是因为板子上外设多,有LED,数码管,蜂鸣器,继电器等,IO数量不够,所以需要“译码器——锁存器”结构,让数据控制口P0分时控制外设。

2.单片机上的IO口的驱动能力有限,不足以驱动蜂鸣器,继电器的线圈。所以需要专门的驱动芯片来增加驱动能力(如ULN2003芯片)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱写代码的倒霉蛋

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

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

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

打赏作者

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

抵扣说明:

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

余额充值