DS18B位序列码读取程序Word格式文档下载.docx
《DS18B位序列码读取程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DS18B位序列码读取程序Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
*/
#include;
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P2^2;
//定义DS18B20端口DQ
sbitBEEP=P2^3;
//蜂鸣器驱动线
bitpresence;
sbitLCD_RS=P3^5;
sbitLCD_RW=P3^6;
sbitLCD_EN=P3^4;
ucharcodecdis1[]={&
quot;
DS18B20OK
&
};
ucharcodecdis2[]={&
ucharcodecdis3[]={&
DS18B20ERR0R&
ucharcodecdis4[]={&
PLEASECHECK&
unsignedchardatadisplay[2]={0x00,0x00};
unsignedchardataRomCode[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsignedcharTemp;
unsignedcharcrc;
voidbeep();
#definedelayNOP();
{_nop_();
_nop_();
voiddelay1(intms)
{
unsignedchary;
while(ms--)
for(y=0;
y;
0;
i--)
//{
//read_bit();
//
DQ=0;
//给脉冲信号
dat>
;
>
=1;
DQ=1;
for(i=0;
i;
i--)
for(i=0;
i;
temp&
=0x01;
write_bit(temp);
dat>
=1;
}
Delay(5);
}
/*读取64位序列码
Read_RomCord(void)
unsignedcharj;
Init_DS18B20();
WriteOneChar(0x33);
//读序列码的操作
for(j=0;
j;
else{
crc^=0x18;
//CRC=X8+X5+X4+1
crc>
crc|=0x80;
crcbuff>
returncrc;
/*数据转换与显示
Disp_RomCode()
ucharj;
ucharH_num=0x40;
//LCD第二行初始位置
for(j=0;
j;
4);
if(display[0]>
9)
{display[0]=display[0]+0x37;
}
else{display[0]=display[0]+0x30;
lcd_pos(H_num);
lcd_wdat(display[0]);
//高位数显示
H_num++;
display[1]=(Temp&
0x0f);
if(display[1]>
{display[1]=display[1]+0x37;
else{display[1]=display[1]+0x30;
lcd_wdat(display[1]);
//低位数显示
/*蜂鸣器响一声
voidbeep()
{
unsignedchary;
for(y=0;
y<
100;
y++)
Delay(60);
BEEP=!
BEEP;
//BEEP取反
BEEP=1;
//关闭蜂鸣器
Delay(40000);
/*DS18B20OK显示菜单
voidOk_Menu()
ucharm;
lcd_init();
//初始化LCD
lcd_pos(0);
//设置显示位置为第一行的第1个字符
m=0;
while(cdis1[m]!
='
\0'
)
//显示字符
lcd_wdat(cdis1[m]);
m++;
lcd_pos(0x40);
//设置显示位置为第二行第1个字符
while(cdis2[m]!
lcd_wdat(cdis2[m]);
/*DS18B20ERROR显示菜单
voidError_Menu()
while(cdis3[m]!
lcd_wdat(cdis3[m]);
while(cdis4[m]!
lcd_wdat(cdis4[m]);
/*主函数
voidmain()
P0=0xff;
P2=0xff;
while
(1)
Ok_Menu();
Read_RomCord();
//读取64位序列码
CRC8();
//CRC效验
if(crc==0)
//CRC效验正确
Disp_RomCode();
//显示64位序列码
beep();
while(!
presence)
Init_DS18B20();
delay1(1000);
Error_Menu();
do
while(presence);