七段数码管的显示 滚动显示

一、HAL库进行设置,将中断打开,使用tim6中断,在中断中完成对数码管的滚动显示

void  HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(TIM6 == htim->Instance)
  {
        HAL_GPIO_WritePin (GPIOE,0XFF,GPIO_PIN_SET);
        HAL_GPIO_WritePin (GPIOE,num,GPIO_PIN_RESET);
        num=num<<1;
        if(num==0x100)
        {
            num=0x01;
        }
  }
}

二、滚动数码管的实现依赖于for循环的实现

for(int i=0;i<8;i++)
        {

            HAL_Delay (1);
        }
        

三、数码管的显示,每个数码管都有七段数显。

1.先将数码管的显示全部清空

2.在送进段码,也就是你要将在数码管上显示的数字

3.送完段码需要将位码送进,位码则是你需要数字显示的位置

 //0.清除数码管所有显示
            HAL_GPIO_WritePin (GPIOA,0xFF,GPIO_PIN_SET);

//1.送段码
            
            HAL_GPIO_WritePin (GPIOA,~LED_Val[LED[i]],GPIO_PIN_RESET );

//2.送位码
            
            switch(i)    //即用PB也用PC所以可用switch
            {
                case 0:

                  HAL_GPIO_WritePin (GPIOC,GPIO_PIN_9,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_10,GPIO_PIN_SET );
                    break;
                case 1:

                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_10,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_11,GPIO_PIN_SET );
                    break;
                case 2:

                   HAL_GPIO_WritePin (GPIOB,GPIO_PIN_11,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_12,GPIO_PIN_SET );
                    break;
                case 3:

                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_12,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_13,GPIO_PIN_SET );
                    break;
                case 4:

                    HAL_GPIO_WritePin (GPIOB,GPIO_PIN_13,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_6,GPIO_PIN_SET );
                    break;
                case 5:

                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_6,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_7,GPIO_PIN_SET );
                    break;
                case 6:

                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_7,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_8,GPIO_PIN_SET );
                    break;
                case 7:

                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_8,GPIO_PIN_RESET );
                    HAL_GPIO_WritePin (GPIOC,GPIO_PIN_9,GPIO_PIN_SET );
                    break;
            }

四、定义两个数组分别为数码管的段码数组和用于显示移位的数组

uint8_t LED_Val[]= {0xC0,/*0*/0xF9,/*1*/0xA4,/*2*/0xB0,/*3*/0x99,/*4*/0x92,/*5*/0x82,/*6*/0xF8,/*7*/};

uint16_t LED[]={0,1,2,3,4,5,6,7};

五、使用stm32的io口都要进行初始化

七段数码管的显示滚动显示-嵌入式文档类资源-CSDN文库icon-default.png?t=M666https://download.csdn.net/download/ming_chen_jing/86249296

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来给您编写这个程序。 首先,我们需要导入 turtle 和 time 库: ```python import turtle import time ``` 接下来,我们定义一个函数 `draw_digit(digit, x, y)`,用于绘制单个数字: ```python def draw_digit(digit, x, y): turtle.penup() turtle.goto(x, y) turtle.pendown() if digit in [2, 3, 4, 5, 6, 8, 9]: turtle.forward(20) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9]: turtle.left(90) turtle.forward(30) if digit in [0, 2, 3, 5, 6, 8, 9]: turtle.right(90) turtle.forward(20) if digit in [0, 2, 6, 8]: turtle.right(90) turtle.forward(30) if digit in [0, 4, 5, 6, 8, 9]: turtle.right(90) turtle.forward(20) if digit in [0, 2, 3, 5, 6, 7, 8, 9]: turtle.right(90) turtle.forward(30) turtle.penup() turtle.goto(x, y) turtle.pendown() ``` 然后,我们定义一个函数 `draw_num(num)`,用于绘制整个学号: ```python def draw_num(num): turtle.clear() turtle.speed(0) turtle.pensize(5) x = -200 y = 0 for digit in num: draw_digit(int(digit), x, y) x += 50 turtle.hideturtle() ``` 最后,我们可以使用一个无限循环来不断滚动显示学号: ```python while True: for i in range(11): draw_num('202205404029') time.sleep(0.5) turtle.clear() time.sleep(0.5) ``` 完整代码如下: ```python import turtle import time def draw_digit(digit, x, y): turtle.penup() turtle.goto(x, y) turtle.pendown() if digit in [2, 3, 4, 5, 6, 8, 9]: turtle.forward(20) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9]: turtle.left(90) turtle.forward(30) if digit in [0, 2, 3, 5, 6, 8, 9]: turtle.right(90) turtle.forward(20) if digit in [0, 2, 6, 8]: turtle.right(90) turtle.forward(30) if digit in [0, 4, 5, 6, 8, 9]: turtle.right(90) turtle.forward(20) if digit in [0, 2, 3, 5, 6, 7, 8, 9]: turtle.right(90) turtle.forward(30) turtle.penup() turtle.goto(x, y) turtle.pendown() def draw_num(num): turtle.clear() turtle.speed(0) turtle.pensize(5) x = -200 y = 0 for digit in num: draw_digit(int(digit), x, y) x += 50 turtle.hideturtle() while True: for i in range(11): draw_num('202205404029') time.sleep(0.5) turtle.clear() time.sleep(0.5) ``` 运行程序,您将看到学号以七段数码管的形式滚动显示

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值