ME32F103开发板具有4位数码管及相应的显示驱动函数,为用户的使用提供了一定的便利,该数码管的电路如图1所示。
图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所示,这说明程序中的定义是正确的。
图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所示,说明该程序有效。
图3 显示效果