基于Proteus无实物STM32入门自学教程(四)--动态数码管

本自学教程三开始教大家动态点亮数码管,主要相对于教程三的静态点亮模式。
采用数码管动态扫描方式,使用STM32F103R6芯片和6个共阴极LED数码管,通过数码管动态扫描程序实现6个数码管显示“654321”。

一、Proteus仿真图基于Proteus无实物STM32入门自学教程(四)--动态数码管_第1张图片

电路组成
根据任务要求,数码管动态扫描显示电路是由STM32F103R6、6位数码管(7SEG-MOX6-CC)和一片74LS245驱动电路组成。74LS245没学过的同学可以忽略,当成一根导线。
电路连接方法
将所有位的段选控制端并联起来,接到PC0~PC7引脚。
PC0~PC7引脚输出显示段码(包括小数点“.”DP段)。
PC0~PC7引脚通过一片74LS245依次接数码管的A~G和DP引脚。
PB0~PB5引脚输出位码,PB0~PB5引脚依次接数码管的位码引脚1~6。

二、MED代码

编程思想:数码管动态扫描显示实现分析
动态扫描是采用分时的方法,轮流点亮各位数码管的显示方式。
在某一时间段,只让其中一位数码管的“位选端”(com端)有效,并送出相应的字型编码。
动态扫描过程如下:
从段选线上送出字型编码,再控制位选端,字符就显示在指定数码管上,其他位选端无效的数码管都处于熄灭状态;
持续保持1.5ms时间,然后关闭所有数码管显示;
接下来又送出新的字型编码,按照上述过程又显示在另外一位数码管上,直到每一位数码管都扫描完为止。

在USER里面,新建并保存smgdtxs.c文件,smgdtxs.c主文件代码如下:

uint16_t  wei[]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df,0xff,0xff};        //位码

  for(i=1;i<7;i++)

  {    GPIO_Write(GPIOB,wei[i-1]);  //位选,数码管一个一个轮流显示

        GPIO_Write(GPIOC,table[i]);  //输出显示的字型码

        Delay(20);  //保持显示一段时间

        GPIO_Write(GPIOB,0x0ff);  //使所有数码管都熄灭一段时间

        Delay(20);

  }

点亮方式与上一个教程一样,核心思想就是利用人眼的余辉效应,只要点亮显示间隔2ms,显示效果会一直在人眼中保留,感觉好像都点亮一样。

动态数码管点亮在显示生活中比较常见,相对静态数码管的点亮优点是节省IO,且节能。

三、仿真效果和源代码资源

基于Proteus无实物零基础STM32入门自学教程(四)--数码管动态显示-单片机文档类资源-CSDN下载

你可能感兴趣的:(零基础学单片机,stm32,proteus,单片机)