全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

流水灯与蜂鸣器声光报警设计实现

时间:2023-06-12 14:28

人气:

作者:admin

标签: 声光      蜂鸣器  流水 

导读:流水灯与蜂鸣器声光报警设计实现-所谓流水灯,就是LED灯轮流点亮,看起来就像水流一样流动着点亮。我们板子上一共有4个LED灯。我们每隔500MS点亮一个灯,然后熄灭这个灯,再点亮下...

所谓流水灯,就是LED灯轮流点亮,看起来就像水流一样流动着点亮。我们板子上一共有4个LED灯。我们每隔500MS点亮一个灯,然后熄灭这个灯,再点亮下一个灯。

图片

图片

这个IO外设使用分4个步骤,不管是用库函数还是寄存器编写都要按照这个步骤来。上一节讲了GPIOB->ODR如何转换到PBout,后面直接用寄存器编程时,我们采用GPIOB->ODR来操作。

图片

这里的HAL_Delay()是HAL库使用系统定时器实现的MS级延迟函数。上面的程序里,HAL_Delay(500);也可以直接放在for循环体里。

图片

这里控制蜂鸣器是采用的通用开漏输出模式,外接上拉电阻到5V,这样IO就可以控制输出5V电压了。我们使用的蜂鸣器是5V供电,如果采用通用推挽模式,那么3.3V是无法关闭PNP三极管的。PNP三极管低电平开启三极管,5V才能关闭PNP三极管。下面采用寄存器的方法来实现流水灯程序。先实现IO初始化配置。下图是相关时钟寄存器和IO相关的寄存器。

图片

图片

通过阅读用户手册,我们在第一幅图上知道IO口的时钟是挂靠在APB2上的,在APB2CLKEN寄存器的第3位是PB口时钟使能位,该位赋值1,则开启PB口时候。每组IO有16位引脚,我们使用的PB15-PB12,属于高8位,因此,要配置CFGHIG这个寄存器。CFGHIG每4位配置一个IO,低2位控制IO是输出还是输入,这里选择50MHZ输出,因此为11。高2位是配置是哪一种输出模式,这里选择通用推挽模式,因此为00。所以这4位为0011B,即为3。所以,CFGHIG |=0x33330000;配置好了后,就要开始输出数据了。我们往数据寄存器ORD里写数据就可以了。PB0-PB15,对应ORD的低16位。比如PB15出0,那么ORD&=~(1<<15);具体的寄存器程序,看下图。

图片

图片

把LED_Init();放在while语句前面,Led()放在循环体里就行了。在实际的项目中,我们很少直接使用HAL_Delay()这种堵塞型延迟函数。一般采用定时器中断实现,或者采用循环实现。比如我们的while循环体里,有很多程序,比如执行一次循环需要100us,那么我们定义一个变量CNT,当CNT等于5000时,就刚好500MS,这样子就可以切换LED灯了。如果直接延迟500MS,那么程序在这期间就什么事情都不能干,除了中断程序。下一节准备探讨下关于按键检测的短按和长按实现的方法。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信