DHT11.c程序疑问,U8T_data_H⼀10%10 + ✀0✀ 这的+“0”是什么意思

void RH(void){ unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp; //主机拉低18ms P2_0=0; Delay2(180); P2_0=1; //总线由上拉电阻拉高 主机延时20us Delay2_10us(); Delay2_10us(); Delay2_10us(); Delay2_10us(); //主机设为输入 判断从机响应信号 P2_0=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!P2_0) //T ! { U8FLAG=2; //判断从机是否发出 80us 的低电平响应信号是否结束 while((!P2_0)&&U8FLAG++); U8FLAG=2; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((P2_0)&&U8FLAG++); //数据接收状态 U8RH_data_H_temp= COM(); U8RH_data_L_temp= COM(); U8T_data_H_temp=COM(); U8T_data_L_temp=COM(); U8checkdata_temp=COM(); P2_0=1; //数据校验 U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) { U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp;}}}问题来了为何在调用的时候 DATA[44] = U8T_data_H/10%10 + ✀0✀; //温度十位 DATA[45] = U8T_data_H%10 + ✀0✀; //温度个位+“0”是什么意思?为何写入数据的时候后面要+"0"?
2026年09月25日 17:23
有1个网友回答
网友(1):

是‘0’,不是"0",意思是取数字0的ASCII码值0x30
因为U8T_data_H是表示湿度整数部分,是实际值,比如湿度为89%,U8T_data_H的值即为0x59,拆分为个十位即8和9,就是说U8T_data_H/10%10=8,U8T_data_H%10=9。但是如果要显示出来就要转为ASCII码,否则就会显示ASCII里第八和第九个字符就是退格和制表符,也可能显示不支持则为乱码。而ASCII里数字0~9的码位应该是0x30~0x39,所以要得某数字ASCII值只要把数字值加0x30即可,比如上面DATA[44] = U8T_data_H/10%10 + '0' = 0x08 + 0x30 = 0x38,DATA[45] = U8T_data_H%10 + '0' = 0x09 + 0x30 = 0x39,就是8和9的ASCII码值