粉尘传感器是根据制造商选定通讯协议输出一帧24字节数据,楼主只需望要选取第14字节当做有效数据。楼主必须编程把一帧24字节数据全部完整的接收保存并判断是否正确。然后才能根据需要选取第14字节当做有效数据做后续处理。单片机只懂二进制,十六进制、十进制都是给人看的。一个字节数据范围是0~255。楼主要根据选取的字节预判可能在多大范围变化来确定转换方式,假设该数据<100,可以这样处理:a=0x09/10+'0'; b=0x09%10+'0'; ,用串口发送a和b,上位机就得到ASCII码0 9两个字符。 |
用一个for循环把串口接受到的内容全部存放进字符数组里,单独拿出09那个位的,定义一个整形变量强制转换就好了 |
Hephaestus 发表于 2021-9-6 23:12 这么清楚的描述 还好意思怪别人描述不清楚 我一说别人就懂了 |
yyou588 发表于 2021-9-6 10:48 算了吧,你的描述能力太有限,你把24组数据写出来,指出第14组数据是什么,然后想输出什么样的结果,都具体的说出来。 |
这个确实有点让人摸不着头脑呀,,哎,,,难过 |
yyou588 发表于 2021-9-6 10:48 你的描述中,有很多不明白的地方。 比如,你说的10进制是什么? 09 可以认为是 16进制0x09 也可以认为是10进制 9,他是符合 BCD(十进制)标准的一种格式。 在计算机领域中(包含单片机),10进制的表示有多种,常用的有 8421码(即BCD码)和 余三码 以及 2421码,另外还有不太常用的,5211码,7321码。 同时BCD码 还分全码和半码。 所以,所谓要10进制其实就是转码,那么,问题是你要转哪个码? 然后,你说将第14组数据转为10进制,那么 第14组数据你会拿了么?你能把 第14组数据 保存到 变量 Temp 里的话,你前面一大堆描述就不用了。不能得话,你得描述你现在能做到什么程度。你现在的终点,将会是我们给你想办法的起点。你明白吗? |
Hephaestus 发表于 2021-9-5 23:36 传感器发送24组十六进制的数据 但是要转化成十进制,才能得出真实的数据,但是我只要第14组的数据,其他组的数据不需要,将14组的数据转化为十进制 在通过串口发送给电脑 |
wwh2382 发表于 2021-9-5 22:08 24个组是数 都是随机变换不是固定的 |
你的数据到底是什么,你想发送的十进制数据又是什么? 假设原始数据是00 09 00,你想发送“1”还是发送2304? |
最好是得到传感器的资料,协议解析好,发出的十进制数也要处理,方便应用。24个HEX,取第14个HEX,转换成10进制发。字面的处理,并不难:1、合法的24个字符的帧判断,取出第14个;2、计算这个HEX转换成十进制数的三位数(百位、十位、个位);3、连续发出这三个字符,建议额外增加字符信息,不然接收方也是晕的 |
将24个数放进一个数组,然后想取哪个数随你 |
一个双16进制 0xff 是8位数据,一个字节。 你说的24位数据, 到底是 3个字节数据,还是24个字节? 你要取得第14位数据,到底是第14个字节还是第2字节的第5位的 0或1? 然后,你要让别人告诉你如何只读取 某个东西 至少要把 你用来读取的函数拿出来看吧? 如果是直接在Eeprom 的 直接一个 MOVC 不就出来了?如果是在 Flash 里 可能需要 SPI 可能需要 IIC 都不好说啊。空对空跟你说,都读出来,取第14? |