前言
前段时间利用TMS320F2335实现了对四位共阳数码管的控制(链接在这),不过当时只实现了利用数码管显示整数,对于含有纯小数部分的小数无法处理,因此打算对之前的代码进行完善,使得数码管能够显示小数。
实现过程
思路
小数和整数的区别在于小数除了整数部分之后还有纯小数部分,这一方面要求我们需要对纯小数部分进行处理;另一方面也要求我们对小数点进行处理。下面我们分别解决这两个问题。
首先解决小数点的问题,小数点这一块主要是小数点位置的问题,也就是说应该在哪一位上显示小数点。为此,我们先确立优先显示整数部分的规则,也就是说小数点的位置会随着整数部分的变化而变化。具体来说就是:如果整数部分在0到9,那么用一位显示整数部分,后面三位显示小数部分,而小数点就显示在第一位的位置上,如此类推。
接着,我们需要对纯小数部分进行处理,也就是将纯小数部分显示出来,这需要我们将纯小数部分各位上的数字提取出来。这里我们采用“乘10变整”的思想,也就是将纯小数部分不断乘以10来将各位上的数字移到整数部分。比如对于纯小数0.234,我们先乘以10得到2.34,就可以将十分位上的2移到个位上,然后就可以利用处理整数的方法来处理这一个2。接着不断乘10,就可以将纯小数部分上的各位依次移到整数部分来。
具体方法
根据上述思路,我们首先要将小数拆分为整数部分和纯小数部分。整数部分的提取可以通过强制类型转换实现,而将小数减去整数部分就可得到纯小数部分,代码如下:
Uint16 int_part;
float dec_part;
int_part = (Uint16)num;
dec_part = num - int_part;
其中,int_part和dec_part分别为整数部分和纯小数部分,而num为待显示的小数。
拆分之后,我们就可以对整数部分进行初步判断并对表征小数点位置的变量进行赋值,代码如下:
if (int_part <= 9)
{
Point_Pos = 1;
}
else if (int_part >= 10 && int_part <= 99)
{
Point_Pos = 2;
}
else if (int_part >= 100 && int_part <= 999)
{
Point_Pos = 3;