2111|5

1510

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【AT32F421测评】+数码管模块与自动计数显示 [复制链接]

  本帖最后由 jinglixixi 于 2021-4-17 11:59 编辑

在工业现场多采用数码管来显示数据,其主要原因是它显示亮度高,成本低且比较皮实。

通常为了便于使用,可直接购置数码管的功能模块,此类模块可分为2类,一种是采用并行的数据传输方式,另一种则是采用串行的数据传输方式。

这里介绍的是并行传输方式的数码管模块,见图1所示。该模块已配置了限流电阻及各显示位的驱动,因此在使用时,直接与开发板的相关引脚连接即可。

比较有意思的是,该模块只提供了电源VCC引脚,却没提供GND引脚。其中,D1~D4为位控引脚,A~DP则为段控引脚。

https://bbs.eeworld.com.cn/data/attachment/forum/202104/06/185132pjcf0kgtiveqcghz.png.thumb.jpg

图1 数码管模块

 

以2位数值的自动计数显示为例,其显示效果如图2所示。

图2 计数显示效果

 

由于该模块是并行传输数据的,而开发板的引脚排列是分散的,因此在驱动数码管显示时没有采用传统的数据输出要固定占用某一端口的方式,而是按引脚的连接关系,直接以位控的方式来实现。

模块引脚与MCU的对应关系如下:

A---PA5

B---PA6

C---PA7

D---PA15

E---PB7

F---PA9

G---PB10

DP---PA8

D1---PB3

D2---PB4

D3---NC

D4---NC

定义相关引脚输出高低电平的语句为:

#define SMG_A_L  GPIOA->BRE = GPIO_Pins_5

#define SMG_A_H  GPIOA->BSRE = GPIO_Pins_5

 

#define SMG_B_L  GPIOA->BRE = GPIO_Pins_6

#define SMG_B_H  GPIOA->BSRE = GPIO_Pins_6

 

#define SMG_C_L  GPIOA->BRE = GPIO_Pins_7

#define SMG_C_H  GPIOA->BSRE = GPIO_Pins_7

 

#define SMG_D_L  GPIOA->BRE = GPIO_Pins_15

#define SMG_D_H  GPIOA->BSRE = GPIO_Pins_15

 

#define SMG_E_L  GPIOB->BRE = GPIO_Pins_7

#define SMG_E_H  GPIOB->BSRE = GPIO_Pins_7

 

#define SMG_F_L  GPIOA->BRE = GPIO_Pins_9

#define SMG_F_H  GPIOA->BSRE = GPIO_Pins_9

 

#define SMG_G_L  GPIOB->BRE = GPIO_Pins_10

#define SMG_G_H  GPIOB->BSRE = GPIO_Pins_10

 

#define SMG_P_L  GPIOA->BRE = GPIO_Pins_8

#define SMG_P_H  GPIOA->BSRE = GPIO_Pins_8

 

#define SMG_1L  GPIOB->BRE = GPIO_Pins_3

#define SMG_1H  GPIOB->BSRE = GPIO_Pins_3

 

#define SMG_2L  GPIOB->BRE = GPIO_Pins_4

#define SMG_2H  GPIOB->BSRE = GPIO_Pins_4

显示数值0~9的函数为:

void smg_disp(char n)
{
     if(n==0)
     {
         SMG_A_L;
         SMG_B_L;
         SMG_C_L;
         SMG_D_L;
         SMG_E_L;
         SMG_F_L;
         SMG_G_H;
         SMG_P_H;
     }
     if(n==1)
     {
         SMG_A_H;
         SMG_B_L;
         SMG_C_L;
         SMG_D_H;
         SMG_E_H;
         SMG_F_H;
         SMG_G_H;
         SMG_P_H;
     }
     if(n==2)
     {
         SMG_A_L;
         SMG_B_L;
         SMG_C_H;
         SMG_D_L;
         SMG_E_L;
         SMG_F_H;
         SMG_G_L;
         SMG_P_H;
     }
     if(n==3)
     {
         SMG_A_L;
         SMG_B_L;
         SMG_C_L;
         SMG_D_L;
         SMG_E_H;
         SMG_F_H;
         SMG_G_L;
         SMG_P_H;
     }
     if(n==4)
     {
         SMG_A_H;
         SMG_B_L;
         SMG_C_L;
         SMG_D_H;
         SMG_E_H;
         SMG_F_L;
         SMG_G_L;
         SMG_P_H;
     }
     if(n==5)
     {
         SMG_A_L;
         SMG_B_H;
         SMG_C_L;
         SMG_D_L;
         SMG_E_H;
         SMG_F_L;
         SMG_G_L;
         SMG_P_H;
     }
     if(n==6)
     {
         SMG_A_L;
         SMG_B_H;
         SMG_C_L;
         SMG_D_L;
         SMG_E_L;
         SMG_F_L;
         SMG_G_L;
         SMG_P_H;
     }
     if(n==7)
     {
         SMG_A_L;
         SMG_B_L;
         SMG_C_L;
         SMG_D_H;
         SMG_E_H;
         SMG_F_H;
         SMG_G_H;
         SMG_P_H;
     }
     if(n==8)
     {
         SMG_A_L;
         SMG_B_L;
         SMG_C_L;
         SMG_D_L;
         SMG_E_L;
         SMG_F_L;
         SMG_G_L;
         SMG_P_H;
     }
     if(n==9)
     {
         SMG_A_L;
         SMG_B_L;
         SMG_C_L;
         SMG_D_L;
         SMG_E_H;
         SMG_F_L;
         SMG_G_L;
         SMG_P_H;
     }
}

 

实现2位数自动计数显示的主程序为:

 

int main(void)
{
         char i;
         int j;
         AT32_Board_Init();
         smg_Init();
         SMG_A_L;
         SMG_B_L;
         SMG_C_L;
         SMG_D_L;
         SMG_E_L;
         SMG_F_L;
         SMG_G_L;
         SMG_P_L;
         for(;;)
         {
               for(j=0;j<500;j++)
               {
                   if(i<10)
                   {
                          SMG_1L;
                          SMG_2H;
                          smg_disp(i);
                          Delay_ms(2);
                   }
                   else
                   {
                          SMG_1L;
                          SMG_2H;
                          smg_disp(i%10);
                          Delay_ms(1);
                          SMG_1H;
                          SMG_2L;
                          smg_disp(i/10);
                          Delay_ms(1);
                   }
               }
          }
          i++;
          if(i>99)  i=0;
}

 

最新回复

谢谢分享,期待后续!   详情 回复 发表于 2021-4-21 18:24

赞赏

1

查看全部赞赏

点赞(1) 关注
 
 

回复
举报

1700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

模块只提供了电源VCC引脚,却没提供GND引脚,,

为什么这样设计呢

点评

估计是节省引脚吧,因此点亮段码是必须输出低电平。  详情 回复 发表于 2021-4-20 00:11
 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
火辣西米秀 发表于 2021-4-19 23:19 模块只提供了电源VCC引脚,却没提供GND引脚,, 为什么这样设计呢

估计是节省引脚吧,因此点亮段码是必须输出低电平。

 
 
 

回复

71

帖子

2

TA的资源

一粒金砂(中级)

4
 

哎,没有这么方便的周边模块,看来以后要买些套件了。

点评

用些不太贵的模块还是比较合适的,会方便许多。  详情 回复 发表于 2021-4-21 15:32
 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

5
 
Albert.G 发表于 2021-4-21 09:17 哎,没有这么方便的周边模块,看来以后要买些套件了。

用些不太贵的模块还是比较合适的,会方便许多。

 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

6
 

谢谢分享,期待后续!

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表