LED动态扫描显示设计

更新于 2026年10月10日 版权声明
LED动态扫描显示设计

1.任务要求

利用STM32的GPIO和LED数码管设计一个动态扫描显示器,能显示数字“01234567”。请设计硬件电路、软件程序,并通过Proteus进行仿真和调试。

2.硬件设计

LED数码管选用共阳极4位一组相连的LED模组。硬件电路图如图1所示,LED数码管的段选线通过锁存器74HC573与STM32F1系列MCU的PA0~PA7相连,位选线通过另一片74HC573与PA0~PA7相连。锁存器U2的锁存信号(段选)连在PB0引脚,锁存器U3的锁存信号(位选)连在PB1引脚。通过PA0~PA7、PB0和PB1可实现对数码管的操作。

图示

图1 硬件电路图

3.软件设计

通过STM32CubeMX建立工程文件,设置系统时钟为64 MHz,建立共阳极LED数码显示器的段码数组leddata[]和位码数组WeiMa[]。由于8位LED采用动态扫描方式,其操作逻辑是先开位选PB1=1,将位码送到锁存器U3输出,并锁存PB1=0,再开段选PB0=1,将段码送到锁存器U2输出,并锁存PB0=0。依次循环,即可显示相应的数据。

在生成的MDK工程文件中,“gpio.c”和“gpio.h”文件是自动生成的GPIO接口初始化代码,“main.c”文件是需要用户完成的LED动态扫描实现程序。

“gpio.c”文件包括GPIO接口的初始化程序、数码管驱动程序的原文件和头文件,程序如下。

图示

图示

在“main.c”文件中的while语句中添加显示程序,程序如下。

图示

图示

4.仿真与调试

在Keil-MDK中编译生成.hex可执行文件,在Proteus中绘制仿真电路图,加载可执行文件,并通过Proteus仿真,数码管上依次显示数字“01234567”,仿真电路图与调试效果如图2所示。

图示

图2 仿真电路图与调试效果

函数xQueueGenericCreate()的代码(https://www.daowen.com)

图示

队列初始化函数prvIni tialiseNewQueue()的代码

图示

队列复位函数xQueueGenericReset()的代码

图示

函数xQueueGenericSend()的代码

图示

图示

图示

函数xQueueGenericReceive()的代码

图示

图示

图示

中断级队列接收函数xQueueReceiveFromISR()的代码

图示

图示

函数xQueueGiveMutexRecursive()的代码

图示

函数xQueueTakeMutexRecursive()的代码

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)