实现在8个8段数码管上扫描显示A—H

本文详细描述了如何使用STM32通过GPIO控制8个8段数码管,进行字符A到H的逐位显示过程,涉及初始化GPIO、定时器和延时函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现在8个8段数码管上扫描显示A—H

一、代码

这段代码是为 STM32 微控制器编写的,目的是通过 GPIO 控制8段数码管显示器,使其显示一系列的字符。这里分析代码的主要部分:
初始化部分

  1. led_duan_init() - 这个函数负责初始化数码管的段(即数码管的每一部分),设置相应的GPIO端口为输出模式。
  2. led_wei_init() - 这个函数负责初始化数码管的位(即控制哪一个数码管显示),同样配置相关的GPIO端口。
  3. SysTick_Init() - 初始化系统滴答定时器,通常用于精确的时间控制。
  4. delay_init() - 初始化延时函数,为后续的延时调用做准备。

主循环
在 while(1) 循环中,代码执行以下操作:

  1. 循环遍历 - 使用 for 循环遍历数组 a,数组中的每个元素代表一个数码管位。
  2. Display(i) - 这个函数调用将特定字符的译码写入GPIOA的端口。参数 i 指定了要显示的字符。这里的 i 与字符’A’到’H’的映射有关。
  3. GPIO_ResetBits(GPIOE, a[i]) - 点亮特定的数码管位。这里使用数组 a 中的元素作为参数,这意味着在每次迭代中点亮不同的数码管位。
  4. delay_ms(1) - 提供1毫秒的延时,这个短暂的延时保持当前显示。
  5. GPIO_SetBits(GPIOE, a[i]) - 关闭特定的数码管位,结束当前位的显示。
  6. 再次 delay_ms(1) - 这个延时是在切换到下一个数码管位之前提供短暂的视觉暂停。
    main.c
int main(void)
{
    led_duan_init();//数码管段初始化
    led_wei_init(); //数码管位初始化
    SysTick_Init(); //定时器初始化    
    delay_init();//延时初始化
    
  int a[8]={GPIO_Pin_0,GPIO_Pin_1,GPIO_Pin_2,GPIO_Pin_3,
GPIO_Pin_4,GPIO_Pin_5,GPIO_Pin_6,GPIO_Pin_7}; 
    while(1)
    {
        for(int i = 0 ; i < 8 ; i++){
                Display(i);//将A的译码写到GPIOA的端口
                GPIO_ResetBits(GPIOE, a[i]);//亮/ 位置控制
                delay_ms(1);
                GPIO_SetBits(GPIOE, a[i]);//灭
            delay_ms(1);              // 视觉暂停
        }
    }

二、结果

在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值