【单片机笔记】代码中非线性表快速转换成数组的实用方法

很多情况下在电子开发的过程中需要用到非线性表,根据厂家提供的表格用MCU测量ADC数值进行转换得到传感器的测量值,在此记录一下目前一个实用的方法,以下以温度探头传感器的非线性表为例:

厂家提供的是一个PDF表格,如图:

【单片机笔记】代码中非线性表快速转换成数组的实用方法

【单片机笔记】代码中非线性表快速转换成数组的实用方法

很多时候很头疼怎么把这些有效的数据给取出放在代码中使用
1、首先度娘搜索PDF在线转换,提供一个比较好的网址:http://app.xunjiepdf.com/pdf2excel
这里面有PDF转各种格式,为了更好的得到数据,我用PDF转EXCEL表格的形式
上传需要转换的PDF文档,在线转换,得到转换后的EXCEL表格并下载下来如下图:

【单片机笔记】代码中非线性表快速转换成数组的实用方法

打开表格后每个PDF页都转换成了表格形式,文字形式不重要,重要的是数据。如图所示:

【单片机笔记】代码中非线性表快速转换成数组的实用方法

再次我取典型值,(最大值和最小值可以忽略,应个人需求而定)
在表格中典型值后面的一列我把数据扩大100倍,并且把小数点去掉,目的是让数据成为整形,也同时提高精度。MCU中存储浮点数消耗的内存空间很大,并且在后期查找数值表的过程中整形的数据查找效率是要高上很多的。(如果不理解可以恶补一下相关知识)。把需要的数据扩大后复制到一个新建的txt中,这样做的目的是为了去除EXCEL中的格式问题,复制到txt就没有格式了,如果直接把这些数据在EXCEL中赋值是带格式赋值的,也就是赋值的不是数据,而是一堆格式。
需要数据赋值在txt中后,会发现格式还存在一些问题。
如下图

【单片机笔记】代码中非线性表快速转换成数组的实用方法

【单片机笔记】代码中非线性表快速转换成数组的实用方法

【单片机笔记】代码中非线性表快速转换成数组的实用方法

需要数据赋值在txt中后,会发现格式还存在一些问题。,这就需要另一个文档编辑器来辅助一下:Notepad+
这个可以用来编程,当然我更多的使用它是用作查看代码。
操作的方式是Ctrl+H(替换),根据图示的参数来替换(也就是把换行符("\r\n")替换成","),要注意一点是输入法一定要是英文输入法,这样才不会带代码中报错。
一下是替换之后的数据如图:

【单片机笔记】代码中非线性表快速转换成数组的实用方法

【单片机笔记】代码中非线性表快速转换成数组的实用方法

会发现这个全部是一行,(因为我开启了自动换行所以才呈现出多行)。
这下就可以根据自己的习惯手动键入换行了,比如我这里以每行10个数据,完成之后如下图:

【单片机笔记】代码中非线性表快速转换成数组的实用方法

注意最后一个数据后面的","需要去掉!
好了这个数据及格式就弄好了,然后再在代码里面声明一个数组用来存储。如下图所示:【单片机笔记】代码中非线性表快速转换成数组的实用方法

这里注意两点:
1、数据类型的问题,根据数据的大小来确定数据类型,这里数据的范围是0-65535之间,很容易就可以确定是无符号整形(unsigned int)
2、数据存数形式问题,因为这些数据一般是不会做改变的,也就是就使用来读取的,这样的话就可以不用存到RAM里面而存到FLASH里面,RAM的空间是很小的,而FLASH还是比较大的。
以上就是完整的过程。

By Urien 2018年2月1日 11:09:55