解释下列这串代码void WriteOneChar(uchar dat1) { uchar i=0; for(i=8; i>0; i--) { DQ= 0; DQ= dat1&0x01; delay_18B20(5); DQ = 1; dat1>>=1; } } void ReadTemperature() { uchar a,b; float tt; delay_18B20(80); Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0x44); Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0xBE); a=ReadOneChar(); b=ReadOneChar(); Temp1=b; Temp1<<=8; Temp1=Temp1|a; tt=Temp1*0.0625; Temp1=tt*10; } void DS_read_temperature() { Init_DS18B20(); WriteOneChar(0xcc); WriteOneChar(0x44); Init_DS18B20(); WriteOneChar(0xcc); WriteOneChar(0xbe); temp_value[1]=ReadOneChar(); temp_value[0]=ReadOneChar(); } void display_temperature() { uchar flag=0; if((temp_value[0]&0xf8)==0xf8) { flag=1; temp_value[0]=~temp_value[0]; temp_value[1]=~temp_value[1]+1; if(temp_value[1]==0x00) temp_value[0]++; } current=((temp_value[0]&0x07)<<4)|((temp_value[1]&0xf0)>>4); display_digit[0]=current/100; display_digit[1]=current%100/10; display_digit[2]=current%10; buffer_line2[12]=display_digit[0]+'0'; buffer_line2[13]=display_digit[1]+'0'; buffer_line2[14]=display_digit[2]+'0'; LCD_display(0x40,buffer_line2); LCD_write_command(0x80+0x4f); LCD_write_data(0x00); }
时间: 2024-04-19 21:23:27 浏览: 133
DS18B20和串口通信的那点事儿
这段代码包含了几个函数,用于实现DS18B20温度传感器的读取和显示。
- `WriteOneChar`函数用于向DS18B20温度传感器写入一个字节的数据。在函数中,通过循环8次,依次向传感器发送数据的每一位。具体的步骤包括:
- 使用一个循环,循环8次,每次处理一个数据位。
- 将DQ引脚设置为低电平,用于发送写命令。
- 将DQ引脚设置为dat1的最低位的值,用于发送数据位。
- 延时一段时间(约5微秒)。
- 将DQ引脚设置为高电平,用于结束数据位的发送。
- 将dat1右移一位,准备发送下一个数据位。
- `ReadTemperature`函数用于读取DS18B20温度传感器的温度值。在函数中,先进行一些延时和初始化操作,然后发送读取温度的命令,并读取返回的两个字节数据。最后,根据读取到的数据计算出温度值,并存储到变量Temp1中。
- `DS_read_temperature`函数用于读取DS18B20温度传感器的温度值,并将结果存储到temp_value数组中。函数内部调用了`Init_DS18B20`、`WriteOneChar`和`ReadOneChar`等函数来完成读取的过程。
- `display_temperature`函数用于显示温度值。函数中首先根据读取到的温度值进行一些处理,包括判断正负号、计算整数部分和小数部分。然后将温度值显示在LCD屏幕上。
需要注意的是,代码中使用了一些未定义的变量和函数,如DQ、delay_18B20、Init_DS18B20等。这些变量和函数可能是用户自定义的或来自其他地方的定义。在理解代码功能时,需要对这些变量和函数进行适当的替换或定义。同时,还需要确保正确地连接和配置DS18B20温度传感器以及相应的引脚和LCD屏幕。
阅读全文