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

DHT11.c程序疑问,U8T_data_H10%10 + '0' 这的+“0”是什么意思,第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码值

易车讯 近日,我们从哈弗官方获悉,赤兔DHT将于12月27日上市,新车在外观内饰上与燃油版车型基本保持一致,采用了哈弗家族式的设计语言,动力方面,车辆将基于柠檬混动DHT平台打造。

外观方面,赤兔DHT版本沿袭燃油版风格,整体设计时尚,在车尾部分,轿跑式的设计应该是赤兔的亮点所在,并且还采用了贯穿式的尾灯设计。车身尺寸方面,新车的长宽高分别为4470mm/1898mm/1625mm,轴距为2700mm。

内饰方面,DHT版本也沿袭了燃油版本的设计,采用了简洁的风格,仅在悬浮式中控屏幕下方设置了空调的控制按键,亮色饰条点缀更加年轻,车辆还配备了液晶仪表、水晶挡把、电子手刹和自动驻车等科技配备。

动力方面,该车将基于柠檬混动DHT架构打造,搭载GW4G15H 15L发动机,最大功率为74kW,匹配的是DHT100混动变速箱,系统综合最大功率为140kW,电池方面,该架构的HEV电池包为18kWh。

sbit DQ1= P3^7 ; //车内探头

sbit DQ2= P1^1 ; //车外探头

sbit AC_CTRL = P2^2; //AC空调控制端。1为开启

/------------------------------------------------

定义区

------------------------------------------------/

xdata signed int Memory_buf2[5]={0,0,0,0,0};//xdata 前2分钟记忆值:车外湿度,车外温度,车内湿度,车内温度,电压

xdata signed int Memory_buf1[5]={0,0,0,0,0};//xdata 前1分钟记忆值:车外湿度,车外温度,车内湿度,车内温度,电压

unsigned int U16RH_data1,U16T_data1, U16RH_data2,U16T_data2,Voltage;

bit Minus_Flag1,Minus_Flag2,TIMEshow; //定义温度符号位 时间闪烁的:

/

串行总线 收发信号检测,数据读取 车内探头

/

unsigned char COM1(void)

{unsigned char i,U8temp,U8comdata,U8FLAG;

for(i=0;i<8;i++)

{

U8FLAG=2;

while((!DQ1)&&U8FLAG++);

delay40us();

U8temp=0;

if(DQ1)U8temp=1; //延时40us后 如果仍为高电平则数据为1 否则为0

U8FLAG=2;

while((DQ1)&&U8FLAG++);

if(U8FLAG==1)break;

U8comdata<<=1; U8comdata|=U8temp; //整合数据

}

return(U8comdata);

}

/------------------------------------------------

读取温、湿度 车内探头

------------------------------------------------/

void RH1(void)

{

unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8temp,U8FLAG;

unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

DQ1=0; delay100us(5); //主机拉低总线 至少500us

DQ1=1; delay40us(); //总线由上拉电阻拉高 主机延时20us-40us

if(!DQ1) //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行

{

U8FLAG=2;

while((!DQ1)&&U8FLAG++); //判断从机是否发出 80us 的低电平响应信号是否结束

U8FLAG=2;

while((DQ1)&&U8FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

//数据接收状态

U8RH_data_H_temp=COM1(); //读湿度高8位

U8RH_data_L_temp=COM1(); //读湿度低8位

U8T_data_H_temp =COM1(); //读温度高8位

U8T_data_L_temp =COM1(); //读温度低8位

U8checkdata_temp=COM1(); //读校验数据

DQ1=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;

if(U8T_data_H&0x80) //如果温度高8位首位为1 则为负温度

{Minus_Flag1=1;U8T_data_H = U8T_data_H-0x80;}

else

{Minus_Flag1=0;U8T_data_H = U8T_data_H;}

U16RH_data1=(U8RH_data_H256)|U8RH_data_L;

U16T_data1 = (U8T_data_H256)|U8T_data_L;

}

}

}

}

这是我正在用的程序的一部分,用的是1T的单片机,给你参考一下吧。晶体是12M的,别的地方你基本可以不改,主要注意好延时的时间一定要参照备注

org 0000h

sjmp main

_mDelay:

; SOURCE LINE # 9

;---- Variable 'Delay040' assigned to Register 'R6/R7' ----

; { unsigned int i;

; SOURCE LINE # 10

; for(;Delay>0;Delay--)

; SOURCE LINE # 11

C0001:

SETB C

MOV A,R7

SUBB A,#00H

MOV A,R6

SUBB A,#00H

JC C0007

; {for(i=0;i<10000;i++);}//200ms

; SOURCE LINE # 12

;---- Variable 'i041' assigned to Register 'R4/R5' ----

CLR A

MOV R5,A

MOV R4,A

C0004:

INC R5

CJNE R5,#00H,C0013

INC R4

C0013:

CJNE R4,#027H,C0004

CJNE R5,#010H,C0004

C0003:

MOV A,R7

DEC R7

JNZ C0001

DEC R6

C0014:

SJMP C0001

; }

; SOURCE LINE # 13

C0007:

RET

; END OF _mDelay

; void main()

main:

USING 0

; SOURCE LINE # 14

; {

; SOURCE LINE # 15

C0008:

; unsigned int x;

; while(1) /while语句,后面括号里1,表示无终止执行循环语句/

; SOURCE LINE # 17

; {

; SOURCE LINE # 18

; P1=0xFF;//P1口作为输入口省 /把0xFF这个数赋值给P1这个变量/

; SOURCE LINE # 19

MOV P1,#0FFH

; x=P1&&0x0F; /P1&&0x0F的运算结果是1,再把1赋值给x /

; SOURCE LINE # 20

MOV A,P1

MOV R6,#00H

JZ C0010

MOV R7,#01H

SJMP C0011

C0010:

MOV R7,#00H

C0011:

;---- Variable 'x142' assigned to Register 'R2/R3' ----

MOV R3,AR7

MOV R2,AR6

; P1=0x00; /把0赋值给P1,这时P1的值就变成0啦/

; SOURCE LINE # 21

CLR A

MOV P1,A

; //P0=0xFF;//P0口的特殊之处就是需要先初始化然后再读入正确的值

; P1_7=1; /电磁阀2开启/

; SOURCE LINE # 23

SETB P1^7

; P1_6=0; /电磁阀1关闭/

; SOURCE LINE # 24

CLR P1^6

; mDelay(x+1); /调用mDelay这个函数,相当于把这边括号里的x+1代入到上面mDelay函数里的Delay变量/

; SOURCE LINE # 25

MOV A,R3

ADD A,#01H

MOV R7,A

CLR A

ADDC A,R2

MOV R6,A

LCALL _mDelay

; P1_7=0; /电磁阀2关闭/

; SOURCE LINE # 26

CLR P1^7

; mDelay(16-x); /又一次调用mDelay函数/

; SOURCE LINE # 27

CLR C

MOV A,#010H

SUBB A,R3

MOV R7,A

CLR A

SUBB A,R2

MOV R6,A

LCALL _mDelay

; P1_6=1; /电磁阀1开启/

; SOURCE LINE # 28

SETB P1^6

; mDelay(16); /再一次调用mDelay函数/

; SOURCE LINE # 29

MOV R7,#010H

MOV R6,#00H

LCALL _mDelay

; P1_7=1; /电磁阀2开启/

; SOURCE LINE # 30

SETB P1^7

; P1_6=0; /电磁阀1关闭/

; SOURCE LINE # 31

CLR P1^6

; }

; SOURCE LINE # 32

SJMP C0008

; END OF main

END

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

typedef unsigned char unint8; //unint8 代替undigned char 提高可移植性

typedef unsigned char unint16;

unsigned char str1[]={" "};

unsigned char str2[]={" "};

unsigned char code dis1[] = {" Xh RH: "}; //定义数组

unsigned char code dis2[] = {" DO T: "};

sbit buz=P1^0;

sbit TRH = P1^7;//温湿度传感器DHT11数据接入

sbit LCD_RS = P1^1;

sbit LCD_RW = P1^2;

sbit LCD_EN = P1^3;

unint8 TH_data,TL_data,RH_data,RL_data,CK_data;

unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;

unint8 com_data,untemp,temp;

unint8 respond;

void initcom()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

REN=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

}

void send(unsigned char temp)

{

//send biao zi

SBUF=temp;

while(!TI);

TI=0;

}

void sendwd()

{

//send wen du

uint w_d ;

w_d=TH_data+128;

SBUF=w_d;

while(!TI);

TI=0;

}

void sendsd()

{

//send shi du

SBUF=RH_data;

while(!TI);

TI=0;

}

//

void delayNOP() //延时

{

_nop_();

_nop_();

_nop_();

_nop_();

}

//

//

// 毫秒级延时子程序

//

void delay_ms(unsigned int ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i< 150; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

//

//

//5us级延时程序

//

void delay_us()

{

unint8 i;

i--;

i--;

i--;

i--;

i--;

i--;

}

//

//

// 测试LCD忙碌状态

//lcd_busy()为1时,忙,等待。lcd_busy()为0时,闲,可写指令与数据。

//

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

delayNOP();

result = (bit)(P0&0x80);

LCD_EN = 0;

return(result);

}

//

//

// 写入指令数据到LCD

//

void lcd_wcmd(unsigned char cmd)

{

while(lcd_busy());

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

P0 = cmd;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

//

//

//写显示数据到LCD

//RS=高电平,RW=低电平,E=高脉冲,D0-D7=数据。

//

void lcd_wdata(unsigned char dat)

{

while(lcd_busy());

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

delayNOP();

LCD_EN = 1;

delayNOP();

LCD_EN = 0;

}

//

//

//LCD初始化设定

//

void lcd_init()

{

delay_ms(15);

lcd_wcmd(0x38); //162显示,57点阵,8位数据

delay_ms(5);

lcd_wcmd(0x38);

delay_ms(5);

lcd_wcmd(0x38);

delay_ms(5);

lcd_wcmd(0x0c); //显示开,关光标

delay_ms(5);

lcd_wcmd(0x06); //移动光标

delay_ms(5);

//lcd_wcmd(0x01); //清除LCD的显示内容,如果屏幕过暗,可将这俩句删除

//delay_ms(5);

}

//

//

//设定LCD显示位置

//

void lcd_dis_pos(unsigned char pos)

{

lcd_wcmd(pos | 0x80); //数据指针=80+地址变量

}

//

//

//收发信号检测,数据读取

//

char receive()

{

unint8 i;

com_data=0;

for(i=0;i<=7;i++)

{

respond=2;

while((!TRH)&&respond++);

delay_us();

delay_us();

delay_us();

if(TRH)

{

temp=1;

respond=2;

while((TRH)&&respond++);

}

else

temp=0;

com_data<<=1;

com_data|=temp;

}

return(com_data);

}

//

//

//湿度读取子程序

//温度高8位== TL_data

//温度低8位== TH_data

//湿度高8位== RH_data

//湿度低8位== RH_data

//校验 8位 == CK_data

//调用的程序有 delay();, Delay_5us();,RECEIVE();

//

void read_TRH()

{

//主机拉低18ms

TRH=0;

delay_ms(18);

TRH=1;

//DATA总线由上拉电阻拉高 主机延时20us

delay_us();

delay_us();

delay_us();

delay_us();

//delay_us();

//delay_us();delay_us();delay_us();delay_us();

//主机设为输入 判断从机响应信号

TRH=1;

//判断DHT11是否有低电平响应信号 如不响应则跳出,响应则向下运行

if(!TRH)

{

respond=2;

//判断DHT11发出 80us 的低电平响应信号是否结束

while((!TRH)&& respond++);

respond=2;

//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态

while(TRH && respond++);

//数据接收状态

RH_temp = receive();

RL_temp = receive();

TH_temp = receive();

TL_temp = receive();

CK_temp = receive();

TRH=1;

//数据校验

untemp=(RH_temp+RL_temp+TH_temp+TL_temp);

if(untemp==CK_temp)

{

RH_data = RH_temp;

RL_data = RL_temp;

TH_data = TH_temp;

TL_data = TL_temp;

CK_data = CK_temp;

}

}

//湿度整数部分

str1[0] = (char)(0X30+RH_data/10);

str1[1] = (char)(0X30+RH_data%10);

str1[2] = 0x2e; //小数点

//湿度小数部分

str1[3] = (char)(0X30+RL_data/10);

str1[5] = 0X25; //"%"

str1[6] = 0X52; //"R"

str1[7] = 0X48; //"H"

//温度整数部分

str2[0] = (char)(0X30+TH_data/10);

str2[1] = (char)(0X30+TH_data%10);

str2[2] = 0x2e; //小数点

//温度小数部分

str2[3] = (char)(0X30+TL_data/10);

str2[5] = 0X27; //"'"

str2[6] = 0X43; //"C"

}

//

//冬天适宜温湿度 夏天适宜温湿度

//湿度:30%--80% 30%--60%

//温度:18℃--25℃ 23℃--28℃

//

void baoj()//报警函数

{

if(RH_data>=80) //湿度上限80%

{

buz=0;

delay_ms(200);

buz=1;

delay_ms(10);

}

else if(RH_data<=30) //湿度下限30%

{

buz=0;

delay_ms(200);

buz=1;

delay_ms(10);

}

else if(TH_data>=25) //温度上限25℃

{

buz=0;

delay_ms(200);

buz=1;

delay_ms(10);

}

else if(TH_data<=18) //温度下限18℃

{

buz=0;

delay_ms(200);

buz=1;

delay_ms(10);

}

else

{

buz=1;

}

}

//

//主函数

//TH,TL,RH,RL分别代表温湿度的整数和小数部分

//

void main()

{

lcd_init();

initcom();

delay_us();

while(1)

{

unsigned char i,n=0x40,m;

read_TRH();

//写字符

for(i=0;i<=7;i++)

{

lcd_dis_pos(i); //显示字符

lcd_wdata(dis1[i]);

lcd_dis_pos(n+i); //显示字符

lcd_wdata(dis2[i]);

}

//写湿度数据

m=0x08;

for(i=0;i<=7;i++)

{

lcd_dis_pos(m);

lcd_wdata(str1[i]);

m++;

}

//写温度数据

m=0x48;

for(i=0;i<=7;i++)

{

lcd_dis_pos(m);

lcd_wdata(str2[i]);

m++;

}

//延时

delay_ms(500);

baoj();//报警

send(0xff);//wsd flags

//delay_ms(10);

sendwd();

//delay_ms(10);

sendsd();

//delay_ms(10);

}

}

以上就是关于DHT11.c程序疑问,U8T_data_H/10%10 + '0' 这的+“0”是什么意思全部的内容,包括:DHT11.c程序疑问,U8T_data_H/10%10 + '0' 这的+“0”是什么意思、哈弗赤兔DHT将于12月27日上市 搭载混动系统、52单片机万年历把18b20换成dht11 程序怎么改等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9509321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存