学习STM32的数码管显示

STM32是一款常用的微控制器系列,具有丰富的功能和强大的性能,可用于各种应用领域。在本文中,我将向您介绍如何使用STM32来控制数码管显示内容,包括基本的数码管控制、多位数码管显示内容以及数码管显示动画效果等。

首先,我们需要准备一块支持数码管控制的STM32开发板,如STM32F103C8T6。接下来,我们将使用Keil MDK为STM32编写代码案例,Keil MDK是一款流行的开发工具,支持ST公司的MCU系列。

案例一:基本的数码管显示控制

首先,我们需要引入STM32的库文件。在Keil MDK中,您可以通过添加新的文件夹和源文件来引入库文件。例如,您可以将STM32的库文件放在一个名为"stm32_lib"的文件夹中,并将其添加到工程中。

接下来,我们需要初始化STM32的GPIO端口,将其配置为推挽输出模式,并设置输出电平高电平(即数码管不亮)。

#include "stm32f10x.h"

void GPIO_Init(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;  // 使能GPIOC时钟
    GPIOC->CRH &= ~GPIO_CRH_MODE13;      // 将PC13引脚配置为输出模式
    GPIOC->CRH |= GPIO_CRH_MODE13_0;
    GPIOC->CRH &= ~GPIO_CRH_CNF13;       // 将PC13引脚配置为推挽输出模式
    GPIOC->ODR |= GPIO_ODR_ODR13;        // 设置PC13引脚输出高电平
}

接下来,我们需要编写一个函数来控制数码管的显示内容。假设我们要在数码管上显示数字"0",我们需要设置对应的GPIO端口为低电平(即数码管亮)。

void Display_Number_0(void)
{
    GPIOC->ODR &= ~GPIO_ODR_ODR13;  // 设置PC13引脚输出低电平
}

最后,我们在主函数中调用上述函数,即可实现控制数码管显示数字"0"的功能。

int main(void)
{
    GPIO_Init();          // 初始化GPIO端口
    Display_Number_0();   // 控制数码管显示数字"0"
    
    while(1)
    {
        
    }
}

案例二:多位数码管显示内容

在实际应用中,我们通常需要控制多位数码管显示不同的内容。为了实现多位数码管显示,我们可以使用多个GPIO端口来控制不同位数的数码管。

首先,我们需要定义多个GPIO端口来控制每个数码管的显示内容。

#define DIGIT_1_GPIO_PORT GPIOC
#define DIGIT_1_GPIO_PIN  GPIO_Pin_0

#define DIGIT_2_GPIO_PORT GPIOC
#define DIGIT_2_GPIO_PIN  GPIO_Pin_1

#define DIGIT_3_GPIO_PORT GPIOC
#define DIGIT_3_GPIO_PIN  GPIO_Pin_2

// 其他数码管的GPIO端口和引脚定义

接下来,我们需要编写一个函数来控制多位数码管的显示内容。假设我们要在三位数码管上显示"123",我们需要依次设置对应的GPIO端口为低电平(即数码管亮)。

void Display_Number_123(void)
{
    DIGIT_1_GPIO_PORT->ODR &= ~DIGIT_1_GPIO_PIN;  // 设置DIGIT_1_GPIO_PIN引脚输出低电平
    
    DIGIT_2_GPIO_PORT->ODR &= ~DIGIT_2_GPIO_PIN;  // 设置DIGIT_2_GPIO_PIN引脚输出低电平
    
    DIGIT_3_GPIO_PORT->ODR &= ~DIGIT_3_GPIO_PIN;  // 设置DIGIT_3_GPIO_PIN引脚输出低电平
}

最后,在主函数中调用上述函数,即可实现控制三位数码管显示数字"123"的功能。

int main(void)
{
    GPIO_Init();              // 初始化GPIO端口
    Display_Number_123();     // 控制数码管显示数字"123"
    
    while(1)
    {
        
    }
}

案例三:数码管显示动画效果

为了实现数码管显示动画效果,我们可以使用定时器和中断来控制数码管的显示内容。

首先,我们需要初始化STM32的定时器和中断,并设置合适的时间间隔。

#include "stm32f10x.h"

void Timer_Init(void)
{
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;  // 使能TIM3定时器时钟
    TIM3->PSC = 7199;                   // 设置预分频值,72M/7200=10KHz
    TIM3->ARR = 999;                    // 设置定时器溢出时间,10KHz/1000=10Hz
    TIM3->CR1 |= TIM_CR1_CEN;           // 使能定时器
    TIM3->DIER |= TIM_DIER_UIE;         // 使能更新中断
    NVIC_EnableIRQ(TIM3_IRQn);          // 使能TIM3中断
}

void TIM3_IRQHandler(void)
{
    if(TIM3->SR & TIM_SR_UIF)  // 判断定时器是否溢出
    {
        // 控制数码管的显示内容
        
        TIM3->SR &= ~TIM_SR_UIF;  // 清除定时器溢出标志位
    }
}

接下来,我们需要编写一个函数来控制数码管的显示内容。假设我们要实现数码管的逐位显示动画效果,从"0"到"9"循环显示。

void Display_Number_Animation(void)
{
    static uint8_t digit = 0;  // 当前显示的数字
    
    // 根据digit设置对应的GPIO端口为低电平(即数码管亮)
    
    digit++;  // 数字加1
    if(digit > 9)  // 判断数字是否大于9
    {
        digit = 0;  // 如果大于9,重置为0
    }
}

最后,在主函数中调用上述函数,并启动定时器,即可实现逐位显示动画效果。

int main(void)
{
    GPIO_Init();              // 初始化GPIO端口
    Timer_Init();             // 初始化定时器
    
    while(1)
    {
        Display_Number_Animation();  // 控制数码管显示动画效果
    }
}

通过以上的代码案例,我们可以实现基本的数码管显示控制、多位数码管显示内容以及数码管显示动画效果。您可以根据实际需求进行修改和扩展,以满足不同的应用场景。希望这些代码案例能够帮助您学习STM32的数码管显示内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大黄鸭duck.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值