本文将介绍如何使用STM32编写代码,利用点阵实现滚动屏数字显示0123456789。

硬件准备:

  • STM32开发板
  • 8x8点阵模块
  • 跳线若干
  • 杜邦线若干

步骤:

  1. 硬件连接

将STM32开发板和8x8点阵模块连接,具体连接方式如下:

  • 将点阵模块的VCC、GND分别连接到STM32的5V和GND;
  • 将点阵模块的DIN连接到STM32的PB15;
  • 将点阵模块的CS连接到STM32的PB14;
  • 将点阵模块的CLK连接到STM32的PB13。
  1. 编写代码

首先,我们需要定义数字的显示方式。我们可以使用一个8位二进制数来表示一个数字,其中每一位代表数字在点阵模块中的一个LED灯的状态,1表示点亮,0表示熄灭。例如,数字0的二进制表示为0b01111110,数字1的二进制表示为0b00110000,以此类推。

接下来,在代码中定义数字的显示方式,如下所示:

const uint8_t num[10] = {
  0b01111110, //0
  0b00110000, //1
  0b01101101, //2
  0b01111001, //3
  0b00110011, //4
  0b01011011, //5
  0b01011111, //6
  0b01110000, //7
  0b01111111, //8
  0b01111011, //9
};

然后,我们定义一个变量num_index来表示当前显示的数字,初始值为0。在主循环中,我们先将点阵模块清空,然后将当前数字的二进制表示依次写入点阵模块中,每隔一段时间更新数字的显示,从0到9循环显示。代码如下所示:

#include "stm32f10x.h"

const uint8_t num[10] = {
  0b01111110, //0
  0b00110000, //1
  0b01101101, //2
  0b01111001, //3
  0b00110011, //4
  0b01011011, //5
  0b01011111, //6
  0b01110000, //7
  0b01111111, //8
  0b01111011, //9
};

int main(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef SPI_InitStructure;

  /* Enable GPIO clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  /* Enable SPI clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI2, ENABLE);

  /* Configure SPI pins */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure SPI */
  SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_Init(SPI2, &SPI_InitStructure);

  /* Enable SPI */
  SPI_Cmd(SPI2, ENABLE);

  /* Set num_index to 0 */
  uint8_t num_index = 0;

  while (1) {
    /* Clear LED matrix */
    SPI2->DR = 0x00000000;

    /* Write current number to LED matrix */
    SPI2->DR = num[num_index];

    /* Delay for a short time */
    for (volatile int i = 0; i < 10000; i++);

    /* Increment num_index */
    num_index++;

    /* Wrap around if necessary */
    if (num_index > 9) {
      num_index = 0;
    }
  }
}
  1. 编译与下载

使用Keil等开发工具编译代码,并将编译后的hex文件下载到STM32开发板中。

  1. 测试

打开开发板电源,可以看到8x8点阵模块开始滚动显示数字0到9。如果想要修改数字的显示速度,可以调整主循环中的延时时间。如果想要显示其他数字,只需要在num数组中添加相应的二进制表示即可。

至此,使用STM32编写利用点阵实现滚动屏数字显示0123456789的教程就结束了

使用stm32编写利用点阵实现滚动屏数字显示0123456789

原文地址: http://www.cveoy.top/t/topic/hkMC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录