ME32F103开发板具有4位数码管及相应的显示驱动函数,为用户的使用提供了一定的便利,该数码管的电路如图1所示。

image.png
   image.png
图1 数码管电路

经分析,数码管各引脚的连接关系如下:

A---PA4

B---PA5

C---PA6

D---PA7

E---PB12

F---PB13

G---PB14

DOT---PB15

COM0---PD2

COM1---PC12

COM2---PC11

COM3---PC10


但由程序可知,其引脚的连接关系为:

A---PB3

B---PB4

C---PB5

D---PB6

E---PA4

F---PA5

G--PA6

DOT---PA7

COM0---PA9

COM1---PA10

COM2---PA11

COM3---PA12


其程序的对应如下:

PB3_INIT(PB3_LED_SEG0);

PB4_INIT(PB4_LED_SEG1);

PB5_INIT(PB5_LED_SEG2);

PB6_INIT(PB6_LED_SEG3);

PA4_INIT(PA4_LED_SEG4);

PA5_INIT(PA5_LED_SEG5);

PA6_INIT(PA6_LED_SEG6);

PA7_INIT(PA7_LED_SEG7);

PA9_INIT(PA9_LED_COM0);

PA10_INIT(PA10_LED_COM1);

PA11_INIT(PA11_LED_COM2);

PA12_INIT(PA12_LED_COM3);


那哪个引脚的连接关系才正确呢?

经下载测试,例程的运行效果如图2所示,这说明程序中的定义是正确的。

image.png

图2 显示效果


但该程序的不足之处是只适于显示固定的内容,而不适于显示变化的数据。

经改造,适于显示变化数据的程序段为:
uint8_t m;
  • uint16_t n=0;
  • n=2024;       // 存放显示数据
  • while(1)
  • {
  •                 if (grayinc)
  •                         graytemp++;
  •                 else
  •                         graytemp--;
  •                 if (graytemp==0xFF)
  •                         grayinc=0;
  •                 if (graytemp==0)
  •                         grayinc=1;               
  •                 m=led[n%10];
  •                 LED_Fill(COM3,m,graytemp);
  •                 m=led[n%100/10];
  •                 LED_Fill(COM2,m,graytemp);
  •                 m=led[n%1000/100];
  •                 LED_Fill(COM1,m,graytemp);
  •                 m=led[n/1000];
  •                 LED_Fill(COM0,m,graytemp);
  •                 SYS_Delay(0x3fff);
  • }
  • 复制代码

    在运行该程序后,其运行效果如图3所示,说明该程序有效。
    image.png
    图3 显示效果