DS18B位序列码读取程序.docx
- 文档编号:8152733
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:7
- 大小:15.49KB
DS18B位序列码读取程序.docx
《DS18B位序列码读取程序.docx》由会员分享,可在线阅读,更多相关《DS18B位序列码读取程序.docx(7页珍藏版)》请在冰豆网上搜索。
DS18B位序列码读取程序
DS18B20-64位序列码读取程序
/*******************************************************************/
/*
*/
/*51hei单片机开发系统演示程序-DS18B20-64位序列码读取程序
*/
/*
*
*LCD1602显示
*
*
*
*工作芯片:
STC89C516
晶振频率:
11.0592MHz
*
*
*
/*******************************************************************/
/*读取DS18B20的64位序列码并显示在1602液晶上,如果读取正确结果,则在
液晶第一行显示DS18B20OK,第二行显示序列码,如果读取失败,则在液晶上
显示DS18B20ERR0RPLEASECHECK,用户可通过更改18B20接口自己外接。
*/
#include;
#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[]={"
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_();_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;0;i--)
//{
for(i=0;i;>;i;
temp&=0x01;
write_bit(temp);
//
dat>;>;=1;
}
Delay(5);
}
/*******************************************************************/
/*
*/
/*读取64位序列码
*/
/*
*/
/*******************************************************************/
Read_RomCord(void)
{
unsignedcharj;
Init_DS18B20();
WriteOneChar(0x33);//读序列码的操作
for(j=0;j;>;=1;
else{
crc^=0x18;
//CRC=X8+X5+X4+1
crc>;>;=1;
crc|=0x80;
}
crcbuff>;>;=1;
}
}
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]>;9)
{display[1]=display[1]+0x37;}
else{display[1]=display[1]+0x30;}
lcd_pos(H_num);
lcd_wdat(display[1]);
//低位数显示
H_num++;
}
}
/*******************************************************************/
/*
*/
/*蜂鸣器响一声
*/
/*
*/
/*******************************************************************/
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个字符
m=0;
while(cdis2[m]!
='\0')
{
lcd_wdat(cdis2[m]);
//显示字符
m++;
}
}
/*******************************************************************/
/*
*/
/*DS18B20ERROR显示菜单
*/
/*
*/
/*******************************************************************/
voidError_Menu()
{
ucharm;
lcd_init();
//初始化LCD
lcd_pos(0);
//设置显示位置为第一行的第1个字符
m=0;
while(cdis3[m]!
='\0')
{
//显示字符
lcd_wdat(cdis3[m]);
m++;
}
lcd_pos(0x40);
//设置显示位置为第二行第1个字符
m=0;
while(cdis4[m]!
='\0')
{
lcd_wdat(cdis4[m]);
//显示字符
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
{
Init_DS18B20();
beep();
}
while(presence);
}
}
/*******************************************************************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B 序列 读取 程序