使用stm32编写利用点阵实现滚动屏数字显示0123456789
本文将介绍如何使用STM32编写代码,利用点阵实现滚动屏数字显示0123456789。
硬件准备:
- STM32开发板
- 8x8点阵模块
- 跳线若干
- 杜邦线若干
步骤:
- 硬件连接
将STM32开发板和8x8点阵模块连接,具体连接方式如下:
- 将点阵模块的VCC、GND分别连接到STM32的5V和GND;
- 将点阵模块的DIN连接到STM32的PB15;
- 将点阵模块的CS连接到STM32的PB14;
- 将点阵模块的CLK连接到STM32的PB13。
- 编写代码
首先,我们需要定义数字的显示方式。我们可以使用一个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;
}
}
}
- 编译与下载
使用Keil等开发工具编译代码,并将编译后的hex文件下载到STM32开发板中。
- 测试
打开开发板电源,可以看到8x8点阵模块开始滚动显示数字0到9。如果想要修改数字的显示速度,可以调整主循环中的延时时间。如果想要显示其他数字,只需要在num数组中添加相应的二进制表示即可。
至此,使用STM32编写利用点阵实现滚动屏数字显示0123456789的教程就结束了
原文地址: http://www.cveoy.top/t/topic/hkMC 著作权归作者所有。请勿转载和采集!