蓝桥杯扩展板模块(基于新版STM32G431)——数码管
Posted FILWY_M
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯扩展板模块(基于新版STM32G431)——数码管相关的知识,希望对你有一定的参考价值。
蓝桥杯扩展板模块(基于新版STM32G431)——数码管
一、驱动原理
在比赛的时候,数码管的驱动是没有给的,所以这里需要我们自己写数码管的驱动。既然我们需要自己写数码管的驱动,那么我们就必须要了解这个数码管显示的原理。
由原理图可以看到,数码管一边接的是型号,另一边接的是地,所以采用的是共阴方式的连接,则高电平点亮,低电平熄灭。蓝桥杯扩展板使用的是3片74LS595来静态驱动数码管(其实2片74LS595就可以实现使用动态扫描的方式驱动8位数码管)。
三片74LS595串行连接,每一片的输出接数码管的8个段,3片就可以实现控制三个数码管。
二、74LS595原理
这里我们就要说一下74LS595的原理,74LS595是8位的移位寄存器,之前在网上看到一篇博客,里面举了一个很形象的例子,现在没有找到原博客的地址(感谢),在这次引用一下。
我们可以看到原理图上面使用到了3根信号线,分别是SER,SCK,RCLK,驱动他就相当于我们给手枪上子弹的过程,现在我们就假设有两种型号的子弹都可以装进弹夹,叫做SER_H和SER_L(对应就是高低电平),然后SCK就相当于我们手指把子弹向弹夹里面压(其实就是对应着一个SCK脉冲),当弹夹的容量装满了之后,就把弹夹安装到手枪上面(对应着一个RCLK脉冲)。好了, 上面的解释相信已经很明白了,下面就来实战给手枪换弹夹了:
1. 设置SER的电平(准备好子弹型号)
2. 发一个SCK脉冲(将子弹压入弹夹)
3. 重复第1步和第2步动作8次(因为是8位移位寄存器)(装满弹夹)
4. 发一个RCLK,更新移位寄存器的值(将弹夹安装到手枪)
三、驱动代码
#define SEG_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET)
#define SEG_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET)
#define SCK_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_SET)
#define SCK_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_3,GPIO_PIN_RESET)
#define RCLK_H HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET)
#define RCLK_L HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET)
const uint8_t seg_buff[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void seg_set(uint8_t seg1,uint8_t seg2,uint8_t seg3)
{
uint32_t seg = (seg_buff[seg3] << 16) | (seg_buff[seg2] << 8) | seg_buff[seg1];
uint8_t i;
for(i = 0;i < 24; i++)
{
if(seg & 0x800000)
SEG_H;
else
SEG_L;
SCK_H;
SCK_L;
seg <<= 1;
}
RCLK_H;
RCLK_L;
}
以上是关于蓝桥杯扩展板模块(基于新版STM32G431)——数码管的主要内容,如果未能解决你的问题,请参考以下文章