DS18B单片机多路温度传感器Word文件下载.docx
- 文档编号:8632798
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:13
- 大小:230.14KB
DS18B单片机多路温度传感器Word文件下载.docx
《DS18B单片机多路温度传感器Word文件下载.docx》由会员分享,可在线阅读,更多相关《DS18B单片机多路温度传感器Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
uchards18b20_romD[8]={0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28}。
RTCrpUDGiT
ucharcodeLCDData[]="
0123456789"
。
ucharcodedot_tab[]="
0112334456678899"
ucharfirst_line[16]="
A:
000.0B:
000.0"
//LCD第一行显示缓存数组5PCzVD7HxA
ucharsecond_line[16]="
C:
000.0D:
//LCD第二行显示缓存数组jLBHrnAILg
//************************************
//延时程序
voiddelay(unsignedintN>
{
unsignedinti。
for(i=0。
i<
N。
i++>
}
//************************************
//LCD1602测忙
voidcheck_busy(void>
while(1>
{
P1=0xff。
E=0。
_nop_(>
RS=0。
RW=1。
E=1。
if((P1&
0x80>
==0>
break。
}
//LCD1602写命令
voidwrite_command(uchartempdata>
E=0。
RW=0。
P1=tempdata。
check_busy(>
//LCD1602写数据
voidwrite_data(uchartempdata>
RS=1。
//初始化LCD1602
voidinit_lcd1602(>
write_command(0x01>
//清除屏幕
write_command(0x38>
//功能设定<
8位,2行,5*7点阵式)
write_command(0x0c>
//显示器ON,光标OFF,闪烁OFF
write_command(0x06>
//地址加1
//初始化ds18b20
bitresetpulse(void>
DQ=0。
delay(40>
//延时500us
DQ=1。
delay(4>
//延时60us
return(DQ>
//读取P1.0的状态
voidds18b20_init(void>
if(!
resetpulse(>
>
//收到ds18b20的应答信号
{
DQ=1。
delay(40>
//延时240us
break。
}
else
resetpulse(>
//否则再发复位信号
//读ds18b20一位
ucharread_bit(void>
DQ=0。
_nop_(>
DQ=1。
delay(2>
return(DQ>
//读ds18b20一个字节
ucharread_byte(void>
uchari,m,receive_data。
m=1。
receive_data=0。
for(i=0。
8。
if(read_bit(>
{
receive_data=receive_data+(m<
<
i>
}
delay(7>
return(receive_data>
//向ds18b20写一位
voidwrite_bit(ucharbitval>
if(bitval==1>
delay(5>
//向DS18B20写一个字节命令
voidwrite_byte(ucharval>
uchari,temp。
{
temp=val>
i。
temp=temp&
0x01。
write_bit(temp>
delay(5>
//*************************************
//64位的ROM序列号匹配
bitmatch_rom(uchar*rom>
uchari。
ds18b20_init(>
write_byte(0x55>
for(i=8。
0。
i-->
write_byte(*(rom+i-1>
return1。
//从ds18b20中读出64位序列号
/*uchar*read_rom(void>
ucharrom[8],i。
write_byte(0x33>
rom[i-1]=read_byte(>
return&
rom[0]。
}*/
//将64位序列号显示在LCD上显示出来
/*voidprint_char(uchara>
if(a>
=0&
&
a<
=9>
write_data(a+0x30>
elseif(a>
=0x0a&
=0x0f>
write_data(a+0x37>
}*/
//温度转换,将从ds18b20中读出来的温度值
//转化成十进制的温度值,并存放显示缓存
voidconvert_T(uchartemp_data_h,uchartemp_data_l>
xHAQX74J0X
uchartemp。
if((temp_data_h&
0xf0>
==0xf0>
//如果温度寄存器里的高位为1,
{//则温度为负
temp_data_l=~temp_data_l。
//负温度将补码转成二进制,
if(temp_data_l==0xff>
//取反再加1
temp_data_l=temp_data_l+0x01。
temp_data_h=~temp_data_h。
temp_data_h=temp_data_h+0x01。
else
LCD_0=dot_tab[temp_data_l&
0x0f]。
//查表得小数位的值
temp=((temp_data_l&
4>
|((temp_data_h&
0x0f>
LDAYtRyKfE
LCD_3='
-'
//显示"
-"
号
LCD_2=LCDData[(temp%100>
/10]。
//查表得负温度温度十位
LCD_1=LCDData[(temp%100>
%10]。
//查表得负温度个位
else//温度为正
{
LCD_0=dot_tab[temp_data_l&
Zzz6ZB2Ltk
LCD_3=LCDData[temp/100]。
//查表得温度百位
//查表得温度十位
//查表得温度个位
}
voiddisplay(void>
write_command(0x80>
16。
write_data(first_line[i]>
write_command(0xc0>
write_data(second_line[i]>
voidmain(void>
{
uchartemp_data_l,temp_data_h。
/*uchar*ds18b20_rom。
*/
init_lcd1602(>
/*while(1>
ds18b20_rom=read_rom(>
//读序列号
ds18b20_romA[i]=*ds18b20_rom。
ds18b20_rom++。
write_command(0x80>
//显示序列号
print_char(ds18b20_romA[i]/16>
print_char(ds18b20_romA[i]%16>
}*/
ds18b20_init(>
write_byte(0xcc>
write_byte(0x44>
//启动温度转换
delay(700>
match_rom(ds18b20_romA>
//匹配第一路
write_byte(0xbe>
//读温度
temp_data_l=read_byte(>
//温度低8位
temp_data_h=read_byte(>
//温度高8位
convert_T(temp_data_h,temp_data_l>
first_line[2]=LCD_3。
//温度转换后的各位
first_line[3]=LCD_2。
//分别存入显示缓存数组中
first_line[4]=LCD_1。
first_line[6]=LCD_0。
match_rom(ds18b20_romB>
//匹配第二路
first_line[10]=LCD_3。
//温度转换后的各位
first_line[11]=LCD_2。
first_line[12]=LCD_1。
first_line[14]=LCD_0。
display(>
match_rom(ds18b20_romC>
//匹配第三路
temp_data_l=read_byte(>
second_line[2]=LCD_3。
second_line[3]=LCD_2。
second_line[4]=LCD_1。
second_line[6]=LCD_0。
match_rom(ds18b20_romD>
//匹配第四路
second_line[10]=LCD_3。
//温度转换后的各位
second_line[11]=LCD_2。
second_line[12]=LCD_1。
second_line[14]=LCD_0。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B 单片机 温度传感器