dht21部分获取8位二进制数COM获取一个8位二进制数voidCOMvoidu8ifori0i8iU8FLAG2whiledhtU8FLAG_delay35U8temp0ifdhtU8temp1U8FLAG2whiledhtU8FLAG超时则跳出for循环ifU8FLAG1break判断数据位是0还是1如果高电平高过预定0高电平值则数据位为1U8comdata1U8comdataU8temprof温湿度读取子程序以下变量均为全局变量温度高8位U8T_data_H温度低8位U8T_data_L
f湿度高8位U8RH_data_H湿度低8位U8RH_data_L校验8位U8checkdata
voidRHvoidi
tc0DHT_DATA_CRL0dht0_delay20000DHT_DATA_CRL0xff2040us后判断从机响应信号whiledht1c100向下运行ifdhtU8FLAG2主机拉低500us主机设为输入(电平由上拉电阻拉高)在
判断从机是否有低电平响应信号如不响应则跳出,响应则
whiledhtU8FLAG判断从机是否发出80us的低电平响应信号是否结束U8FLAG2whiledhtU8FLAG判断从机是否发出80us的高电平,如发出则进入数据接收状态COM数据接收状态U8RH_data_H_tempU8comdataCOMU8RH_data_L_tempU8comdataCOMU8T_data_H_tempU8comdataCOMU8T_data_L_tempU8comdataCOMU8checkdata_tempU8comdata
数据校验U8tempU8T_data_H_tempU8T_data_L_tempU8RH_data_H_tempU8RH_data_L_tempifU8tempU8checkdata_temp
fif1U8RH_data_HU8RH_data_H_tempU8RH_data_LU8RH_data_L_tempU8T_data_HU8T_data_H_tempU8T_data_LU8T_data_L_tempU8checkdataU8checkdata_temp
华丽的mai
函数分割线voidmai
变量定义u8rru8hhu8ttu8ccu8llu8zu8si4u8wu5u8liu6u8li
g0
i
trhdatas湿度数据十位i
trhdatag湿度数据个位i
ttdatasi
ttdatagi
ti0
初始化safeguard_i
iti
itDHT_DATA_CRL0xff
f_acsr0x01_adcr0x08ad_start1ad_start0
ad转换8分频设置通道pb0a
0作为ad输入设置分频和通道
_emi0关总中断_adf0清除ad中断标志位_eadi1开ad中断使能_emi1开总中断while1RHADtra
sifko0k1elseifky0k0ad转换开始查询键盘
把获得的数据转换成屏幕可以显示的数字(根据屏幕的编码表)r