一种应用于8位单片机的浮点数显示方法和装置
技术领域
本发明涉及单片机技术领域,尤其涉及一种应用于8位单片机的浮点数显示方法和装置。
背景技术
目前,8位单片机普遍应用于各种简单电子产品中,在8位单片机的软件开发过程中,为了实现某些功能常常会需要进行一些复杂的计算,比如浮点数计算。
对8位单片机来说进行复杂的浮点数计算往往会降低代码的运行效率,影响单片机的性能。现有技术中通常采用如下两种方法来解决此类问题。
一种方法是更换性能更高的单片机,使代码的运行效率提高,但会带来产品设计之初单片机选型成本的增加;另一种方法是通过牺牲运算精度来换取代码运行效率的提高,但运算精度降低可能会造成对某些功能的影响。
发明内容
本发明的目的在于提供一种应用于8位单片机的浮点数显示方法和装置,旨在解决8位单片机中浮点数运算降低代码运行效率进而影响单片机性能的问题。
本发明实施例的第一方面,提供一种应用于8位单片机的浮点数显示方法,包括:
获取待显示浮点数的计算公式;
根据所述待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,所述n为自然数;
对所述乘以10n处理后的计算公式进行整数计算得到所述待显示浮点数的每一位显示值。
本发明实施例的第二方面,提供一种应用于8位单片机的浮点数显示装置,包括:
获取单元,用于获取待显示浮点数的计算公式;
变换单元,用于根据所述待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,所述n为自然数;
计算单元,用于对所述乘以10n处理后的计算公式进行整数计算得到所述待显示浮点数的每一位显示值。
本发明与现有技术相比存在的有益效果是:一方面,本发明提供的技术方案并没有采用性能更高的单片机,因此,与现有技术相比,本发明不会增加单片机的选型成本;另一方面,本发明提供的技术方案通过对计算公式的放大处理,将浮点运算简化为整数运算,从而不需要进行强制转换变量类型和浮点数运算,得到相同运算精度的显示值结果,使得在保证运算精度的同时提高代码的运行效率,使产品性能更优。
附图说明
图1是本发明实施例一提供的应用于8位单片机的浮点数显示方法的流程图;
图2是本发明实施例二提供的应用于8位单片机的浮点数显示方法的流程图;
图3是本发明实施例三提供的应用于8位单片机的浮点数显示方法的流程图;
图4是本发明实施例三提供的应用场景中8位单片机中电压的采样电路原理图;
图5是本发明实施例四提供的应用于8位单片机的浮点数显示装置的组成示意图;
图6是本发明实施例五提供的应用于8位单片机的浮点数显示装置的组成示意图;
图7是本发明实施例六提供的应用于8位单片机的浮点数显示装置的组成示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
以下结合具体附图对本发明的实现进行详细的描述。
实施例一:
图1示出了本发明实施例一提供的应用于8位单片机的浮点数显示方法的流程,具体包括S101至S104,详述如下:
S101、获取待显示浮点数的计算公式。
8位单片机中,常常会遇到各种数据显示的问题,比如电压的显示、温度的显示等,而这些数据均以浮点数形式存在。因此首先需根据实际需要获取计算待显示的浮点数的计算公式。
S102、根据待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,n为自然数。
本实施例中,对获取到的待显示浮点数的计算公式进行乘以10n的处理,其中n的值由待显示浮点数的显示精度决定。具体地,若待显示浮点数的显示精度要求为精确到小数点后N位,则n的值可取为N。例如,待显示浮点数的显示精度要求为精确到小数点后两位,则n的值为2,对计算公式进行乘以102的处理,即将计算公式放大100倍。
S103、对乘以10n处理后的计算公式进行整数计算得到待显示浮点数的每一位显示值。
本实施例中,整数计算指不需要强制转换变量类型和不需要进行浮点数运算;不需要进行强制转换变量类型包括不需要进行整型变量和浮点型变量的互相转换。
本实施例中,通过对计算公式乘以10n的放大处理,将浮点运算简化为整数运算,从而不需要进行整型变量和浮点型变量之间的强制类型转换,得到相同运算精度的显示值结果,提高了代码的运行效率。
实施例二:
图2示出了本发明实施例二提供的应用于8位单片机的浮点数显示方法的流程,具体包括S201至S204,详述如下:
S201、获取待显示浮点数的计算公式。
S202、对计算公式进行简化处理,使简化处理后的计算公式中的已知数为互质数。
本实施例中,当计算公式中已知数的数值较大时,可以对计算公式进行简化处理,去掉已知数的共同约数,使简化处理后的计算公式中的已知数为互质数。在计算公式的数据计算量较大时,通过对计算公式的简化处理,可有效降低后续步骤的数据计算量,提高运算效率。
例如,计算公式为A=a*5*11/255,则可以将5和255的共同约数5去掉,简化处理后的计算公式为A=a*11/51。
S203、根据待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,n为自然数。
与前述实施例一类似,本实施例中,n的值由待显示浮点数的显示精度决定。具体地,若待显示浮点数的显示精度要求为精确到小数点后N位,则n的值可取为N。例如,待显示浮点数的显示精度要求为精确到小数点后3位,则n的值为3,对计算公式进行乘以103的处理,即将就按公式放大1000倍。
S204、对乘以10n处理后的计算公式进行整数计算得到待显示浮点数的每一位显示值。
本实施例中,通过对计算公式的简化处理,减少后续计算步骤的计算量,有效提高代码的运行效率。
实施例三:
图3示出了本发明实施例三提供的应用于8位单片机的浮点数显示方法的流程,具体包括S301至S305,详述如下:
S301、获取待显示浮点数的计算公式。
S302、对计算公式进行简化处理,使简化处理后的计算公式中的已知数为互质数。
S303、根据待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,n为自然数。
本实施例中,n的取值可参阅前述实施例一或实施例二,此处不做赘述。
S304、对乘以10n处理后的计算公式直接进行整数计算得到整数值结果。
因计算公式的输入变量类型可能为整型,输出变量可能要求为浮点型,通常情况需要将输入变量类型强制转换为浮点型,再进行计算。在本实施例中,直接对乘以10n处理后的计算公式进行整数计算,不进行强制转换变量类型,得到整数值结果。
S305、对整数值结果进行整数计算得到待显示浮点数的每一位显示值。
因计算公式的输入变量可能为整型,输出变量可能要求为浮点型,通常情况需要将输入变量类型强制转换为浮点型,再进行计算,所得到的计算公式的计算结果值为浮点型,而在提取此浮点型结果值的每一位时,需要再次将浮点型的结果值强制转换为整型,再计算出每一位的值。本实施例中,因通过步骤S301得到的整数值结果本身为整型,因此在计算每一位显示值时不再需要进行强制转换变量类型,直接通过整数计算得到待显示浮点数的每一位显示值。
为清楚解释本发明的技术方案,下面给出一种本发明的具体应用场景:8位单片机的电压采样和显示,采样电压为12.65V,要求采样后用数码管显示的电压数值精确到小数点后一位。
图4示出了本发明实施例三提供的应用场景中8位单片机中电压的采样电路。
根据采样电路模块41得到计算电压值的计算公式为:Vdd=ad*5*11/255,其中Vdd为电压的变量名,ad为模数转换(AnalogtoDigital,AD)采样值。
通常情况下需要经过步骤a1至a3得到电压显示值:
a1、将计算公式中的整型变量ad强制转换为浮点型。
AD采样值ad为整型,为了确保精度,Vdd的变量类型需要为浮点型,因此ad的变量类型需要强制转换为浮点型。计算公式变换为:
Vdd=(float)ad*5*11/255
其中,float为浮点变量类型。
a2、对计算公式进行浮点数计算,得到待显示的浮点型的电压值Vdd。
a3、将浮点型的电压值Vdd强制转换为整型,计算出每一位显示值。
分别用整型变量Vdd_s、整型变量Vdd_g和整型变量Vdd_x表示需要显示的电压值的十位数、个位数和小数点后一位数。由于Vdd为浮点型,因此需要将Vdd强制转换为整型后再计算每一位的显示值。即:
Vdd_s=((int)Vdd)/10
Vdd_g=((int)Vdd)%10
Vdd_x=((int)(Vdd*10))%10
其中,int为整数变量类型。
可见,通常情况下需要经过两次强制转换变量类型和浮点数运算,才能得到需要显示的电压值。
采用本发明提供的方法,需要经过步骤b1至b4得到电压显示值:
b1、对Vdd的计算公式进行简化处理。
去掉公式Vdd=ad*5*11/255中已知数的共同约数5,简化后的公式为:
Vdd=ad*11/51
其中,ad和Vdd都设置为整型。
b2、对简化后Vdd的计算公式进行乘以10n的放大处理。
根据显示电压值的精度要求为小数点后一位,将Vdd放大10倍,放大处理后的计算公式为:
Vdd=ad*11*10/51
b3、对放大处理后的计算公式进行整数计算。
ad和Vdd都为整型,不需要进行强制转换变量类型和浮点数运算,直接通过整数计算得到Vdd。
b4、对Vdd进行整数计算得到每一位显示值。
分别用整型变量Vdd_s、整型变量Vdd_g和整型变量Vdd_x表示需要显示的电压值的十位数、个位数和小数点后一位数。由于Vdd为整型,因此不需要将Vdd进行强制转换变量类型,直接整数计算得到每一位的显示值。即:
Vdd_s=Vdd/100
Vdd_g=(Vdd%100)/10
Vdd_x=Vdd%100
可见,采用本发明提供的方法,不需要经过两次强制转换变量类型,也不需要进行浮点数运算,直接整数计算即可得到相同精度的待显示的电压值。
本实施例中,通过对计算公式的简化处理,有效减少后续计算步骤的计算量,同时通过对计算公式乘以10n的放大处理,将浮点运算简化为整数运算,从而不需要进行整型变量和浮点型变量之间的强制类型转换,得到相同运算精度的显示值结果,提高了代码的运行效率。
实施例四:
图5示出了本发明实施例四提供的应用于8位单片机的浮点数显示装置的组成结构,为了便于说明,仅示出了与本发明实施例相关的部分。
所述装置包括获取模块51、变换模块52和计算模块53。
获取模块51,用于获取待显示浮点数的计算公式;
变换模块52,用于根据所述待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,所述n为自然数;
计算模块53,用于对所述乘以10n处理后的计算公式进行整数计算,得到所述待显示浮点数的每一位显示值。
本实施例中,对获取到的待显示浮点数的计算公式进行乘以10n的处理,其中n的值由待显示浮点数的显示精度决定。具体地,若待显示浮点数的显示精度要求为精确到小数点后N位,则n的值可取为N。例如,待显示浮点数的显示精度要求为精确到小数点后两位,则n的值为2,变换模块52对计算公式进行乘以102的处理,即将计算公式放大100倍。
所述整数计算指不需要强制转换变量类型和不需要进行浮点数运算;所述强制转换变量类型包括整型变量强制转换为浮点型变量和浮点型变量强制转换为整型变量。本发明实施例提供的应用于8位单片机的浮点数显示装置可以使用在前述对应的方法实施例一中,详情参见上述实施例一的描述,在此不再赘述。
实施例五:
图6示出了本发明实施例五提供的应用于8位单片机的浮点数显示装置的组成示意图,为了便于说明,仅示出了与本发明实施例相关的部分。
所述装置包括获取模块61、简化模块62、变换模块63和计算模块64。
获取模块61,用于获取待显示浮点数的计算公式;
简化模块62,用于对所述计算公式进行简化处理,使所述简化处理后的计算公式中的已知数为互质数;
变换模块63,用于根据所述待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,所述n为自然数;
计算模块64,用于对所述乘以10n处理后的计算公式进行整数差计算,得到所述待显示浮点数的每一位显示值。
与前述实施例四类似,本实施例中,n的值由待显示浮点数的显示精度决定。具体地,若待显示浮点数的显示精度要求为精确到小数点后N位,则n的值可取为N。例如,待显示浮点数的显示精度要求为精确到小数点后3位,则n的值为3,变换模块63对计算公式进行乘以103的处理,即将就按公式放大1000倍。
所述整数计算指不需要强制转换变量类型和不需要进行浮点数运算;所述强制转换变量类型包括整型变量强制转换为浮点型变量和浮点型变量强制转换为整型变量。本发明实施例提供的应用于8位单片机的浮点数显示装置可以使用在前述对应的方法实施例二中,详情参见上述实施例二的描述,在此不再赘述。
实施例六:
图7示出了本发明实施例六提供的应用于8位单片机的浮点数显示装置的组成示意图,为了便于说明,仅示出了与本发明实施例相关的部分。
所述装置包括获取模块71、简化模块72、变换模块73和计算模块74。
获取模块71,用于获取待显示浮点数的计算公式;
简化模块72,用于对所述计算公式进行简化处理,使所述简化处理后的计算公式中的已知数为互质数;
变换模块73,用于根据所述待显示浮点数显示精度的要求,对所述计算公式进行乘以10n处理,所述n为自然数;
计算模块74,用于对所述乘以10n处理后的计算公式进行整数差计算,得到所述待显示浮点数的每一位显示值。
本实施例中,n的取值可参阅前述实施例四或实施例五,此处不做赘述。
具体地,计算模块74包括:
放大计算单元741,用于对所述乘以10n处理后的计算公式直接进行整数计算得到整数值结果;
显示计算单元742,用于对所述整数值结果进行整数计算得到所述待显示浮点数的每一位显示值。
所述整数计算指不需要强制转换变量类型和不需要进行浮点数运算;所述强制转换变量类型包括整型变量强制转换为浮点型变量和浮点型变量强制转换为整型变量。
本发明实施例提供的应用于8位单片机的浮点数显示装置可以使用在前述对应的方法实施例三中,详情参见上述实施例三的描述,在此不再赘述。
值得注意的是,上述装置实施例中,所包括的各个模块和单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块和单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
综上所述,本发明实施例通过对计算公式的简化处理和放大处理,将浮点运算简化为整数运算,从而不需要进行强制转换变量类型和浮点数运算,得到相同运算精度的显示值结果,使得在不增加单片机选型成本和保证运算精度的同时提高代码的运行效率,使产品性能更优。
本领域普通技术人员可以理解,实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。