根据51单片机读取18B20序列号代码.docx

上传人:b****6 文档编号:12143160 上传时间:2023-06-04 格式:DOCX 页数:10 大小:15.49KB
下载 相关 举报
根据51单片机读取18B20序列号代码.docx_第1页
第1页 / 共10页
根据51单片机读取18B20序列号代码.docx_第2页
第2页 / 共10页
根据51单片机读取18B20序列号代码.docx_第3页
第3页 / 共10页
根据51单片机读取18B20序列号代码.docx_第4页
第4页 / 共10页
根据51单片机读取18B20序列号代码.docx_第5页
第5页 / 共10页
根据51单片机读取18B20序列号代码.docx_第6页
第6页 / 共10页
根据51单片机读取18B20序列号代码.docx_第7页
第7页 / 共10页
根据51单片机读取18B20序列号代码.docx_第8页
第8页 / 共10页
根据51单片机读取18B20序列号代码.docx_第9页
第9页 / 共10页
根据51单片机读取18B20序列号代码.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

根据51单片机读取18B20序列号代码.docx

《根据51单片机读取18B20序列号代码.docx》由会员分享,可在线阅读,更多相关《根据51单片机读取18B20序列号代码.docx(10页珍藏版)》请在冰点文库上搜索。

根据51单片机读取18B20序列号代码.docx

根据51单片机读取18B20序列号代码

//主函数

#include"ds18b20.h"

#include"lcd12864.h"

#include"delay.h"

 

voidmain()

{

init_lcd();

dis_readnumber();//显示序列号

delay(1000);

while

(1)

{

change_ds18b20();

display_lcd12864(value);

}

}

 

//读取序列号

//温度传感器设置模块

#include"ds18b20.h"

#include"delay.h"

uintvalue;

//sbitDQ=P2^0;

 

voiddelay_us(uchart)//微妙延时

{

while(t--);

}

voidinit_ds18b20()//数据初始化

{

DQ=1;

delay_us(4);

DQ=0;

delay_us(80);

DQ=1;

delay_us(200);

}

voidwrite_ds18b20(uchardat)//写数据

{

uchari;

for(i=0;i<8;i++)

{

DQ=0;

DQ=dat&0x01;

delay_us(15);

DQ=1;

dat=dat>>1;

}

delay_us(10);

}

ucharread_ds18b20()//读数据

{

uchari=0,readat=0;

for(i=0;i<8;i++)

{

DQ=0;

readat=readat>>1;//八位全部都是0,向右移一位后,仍然全是0

DQ=1;

if(DQ)//如果DQ为1,readat进行或运算,如果为0,则子语句不执行,直接for循环此时采集的数据是0

readat=readat|0x80;//此时最高位为1,然后再进行for循环最高位成为第七位,依次往复

delay_us(10);

}

returnreadat;

}

/***************************************************************************/

 

/*********************************************************************************/

ucharchange_ds18b20()

{

uchartl,th;

init_ds18b20();//初始化

write_ds18b20(0xcc);//跳过rom

write_ds18b20(0x44);//启动ds18b20进行温度转换,结果存入9字节ram中

init_ds18b20();//?

缺少不可执行

write_ds18b20(0xcc);

write_ds18b20(0xbe);//启动读暂存器。

读内部ram中9字节温度数据

tl=read_ds18b20();

th=read_ds18b20();

value=th;

value=value<<8;

value=value|tl;

value=value*(0.0625*10);

returnvalue;

}

 

//温度传感器设置模块头文件

#ifndef__DS18B20_H__

#define__DS18B20_H__

 

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitDQ=P3^7;

 

externuintvalue;

voiddelay_us(uchart);//微妙延时

voidinit_ds18b20();//数据初始化

voidwrite_ds18b20(uchardat);//写数据

ucharread_ds18b20();//读数据

ucharchange_ds18b20();

 

#endif

 

//显示模块

//液晶12864显示模块

#include"lcd12864.h"

#include"ds18b20.h"

#include"delay.h"

//sbitlcdrs=P2^5;引脚的定义

//sbitlcdrw=P2^6;

//sbitlcden=P2^7;

ucharwendu[]={"温度测点"};

ucharsave_number[8];

 

voidwrite_com(ucharcom)

{

lcdrs=0;//写指令

P2=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

 

voidwrite_dat(uchardat)

{

lcdrs=1;//写数据

P2=dat;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidinit_lcd()

{

lcden=0;

lcdrw=0;

write_com(0x30);//基本指令操作

delay(5);

write_com(0x0c);//开显示,关光标

delay(5);

write_com(0x01);//清屏

delay(5);

}

/*************************************************************/

//

//显示温度

//

/**************************************************************/

voiddisplay_lcd12864(uintvalue)

{

uchari;

write_com(0x80);

for(i=0;i<8;i++)

{

write_dat(wendu[i]);

delay(3);

}

write_dat(0x41);

write_dat(0x3a);

write_dat(value/100+0x30);

write_dat(value%100/10+0x30);

write_dat(0x2e);

write_dat(value%10+0x30);

}

/***********************************************************/

//

//读序列号

//

/************************************************************/

voiddis_readnumber()

{

uchari,temp;

init_ds18b20();

write_ds18b20(0x33);//读rom即rom中的编码

for(i=0;i<8;i++)

{

save_number[i]=read_ds18b20();//保存序列号

}

write_com(0x88);

for(i=0;i<8;i++)

{

temp=save_number[i]>>4;

if(temp<10)

{

write_dat(0x30+temp);

}

else

{

write_dat(0x37+temp);

}

temp=save_number[i]&0x0f;

if(temp<10)

{

write_dat(0x30+temp);

}

else

{

write_dat(0x37+temp);

}

}

}

//显示模块头文件

#ifndef__LCD12864_H__

#define__LCD12864_H__

 

#include

#defineuintunsignedint

#defineucharunsignedchar

//sbitlcdrs=P2^5;

//sbitlcdrw=P2^6;

//sbitlcden=P2^7;

sbitlcdrs=P0^0;

sbitlcdrw=P0^1;

sbitlcden=P0^2;

 

externucharsave_number[];

externvoidwrite_com(ucharcom);

externvoidwrite_dat(uchardat);

externvoidinit_lcd();

externvoiddisplay_lcd12864(uintvalue);

externvoiddis_readnumber();

#endif

 

//延时函数

/***********延时函数****ms***********/

#include"delay.h"

voiddelay(uintx)

{

uinti,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

 

//延时函数头文件

#ifndef__DELAY_H__

#define__DELAY_H__

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(uintx);

#endif

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2