173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机拼接

htxw 2023-03-15 资讯中心 28 ℃

C51字符拼接成字符串并转成int

可以使用sscanf,就像sprintf将整型数转换成字符串输出一样,逆运算(KEILC 中scanf和printf确定了通过单片机串行口完成输入输出模式,除非做了修改,一般实际中不用)。

给你个例子:

unsigned char string[5]={"1234"};

unsigned int n;

sscanf(string,"%u",n); //string是字符串,%u是格式控制串,u是无符号十进制数,n是变量n的地址。

printf ("%d\n",n); //可在KEIL C 开发环境中输出观察

你可以把上面这部分代码放到KEIL C中的HELLO.C程序中观察验证一下。

用keil(单片机C开发工具)实现字符拼接

#includereg52.h

sbit key = P1^0;//按键

void delay(unsigned int time)

{

unsigned int i,j;

for(i=0; itime; i++)

for(j=0; j1000; j++)

{;}

}

void mian()

{

unsigned int temp =0x00;

while(1)

{

if(key == 0)

{

delay(20);//适当延时,消除按键抖动,自己看实际情况修改时间

if(key == 0)

temp = ~temp;

}

P2 = temp;

}

}

我再追问下,还是sht11,高8位和低8位的拼接,有点没看懂

temp_h、temp_l是char型的数据,占用一个字节,仅有8bit

要把它们拼接在一起至少需要两个字节,而int在51单片机里面就占用两个字节,对应16bit

再说一下十六进制和二进制表示

0x3a 或 3aH 是十六进制表示,前者是C语言环境表示方法,后者是汇编语言环境

0x3a 等效于二进制的 0011 1010,二进制每一位数据十分清楚,可是对于16bit以上的数据看起来就不太方便了,所以下面只用十六进制表示

对于“高8位temp_h=0x02,即00000010,低8位,即00110100”

那么完整的数据 或者 拼接后的数据 即为 0000 0010 0011 0100 (即为十六进制的 0x0234)

从char型的0x02,0x34到0x0234确实可以用

ff=temp_h*256+temp_l;

但是单片机做乘法效率太低,移位运算只需要一条指令即可

所以也可以用

num=temp_h; //先把高位数据temp_h(8bit)写入

num=8; //然后把temp_h左移8位,即把temp_h放到了num的第16-9bit

num+=temp_l; //最后再把temp_l的8bit补到num的第8-1bit

于是num便从 0x0000 - 0x0002 - 0x0200 - 0x0234

注:左移时默认右侧补零(与之相对的是循环左移,是把的左侧移出的放到末尾)

正如,知道一个2位数字的十位和个位(如56),自然可以用5*10+6 表示,也可以

先用num=5;

然后左移1位,num=50;

最后再加上低位 num=50+6.

温度的14位和湿度的12位是传感器及其AD的精度决定的,但是51的整形数据格式要么是8位的无符号char形,要么16位的int形,或者32位的long形

显然8位不够,32位太多,16位是最佳的...

用16bit的int形数据来表示14位的温度数据,其高两位必然是0;用来表示12位的湿度数据的话高4位也必然是0,但不能说是多余的

说个可能不太恰当的例子,用8位数字表示你的工资,可能你的工资只有5位数有效数字,那么在电脑存储的时候最高3位必然是000,只是我们更习惯从首位不为零的数字开始读而已...

C语言2个文件怎么拼接

你可以把

void Delay(unsigned int t) { while(--t); } 代替函数原型放入头文件。不写在led.c 里。

led.h:

#ifndef __led_h__

#define __led_h__

#includereg52.h

#includeintrins.h

void Delay(unsigned int t) { while(--t); }

#endif

led.c: ( 把你上面的照抄,直到主程序结束处)

#include "led.h"

sbit LED0=P1^0;

...

void main (void)

{

。。。。

Delay(10000);

//主循环中添加其他需要一直工作的程序

。。。。。

}

编译链接 led.c

单片机拼接的介绍就聊到这里吧,感谢您花时间阅读,谢谢。

本文标签:单片机拼接

<