转基于DS18B20数字温度计C语言程序设计Word文档格式.docx

上传人:b****7 文档编号:22165326 上传时间:2023-02-02 格式:DOCX 页数:11 大小:19.86KB
下载 相关 举报
转基于DS18B20数字温度计C语言程序设计Word文档格式.docx_第1页
第1页 / 共11页
转基于DS18B20数字温度计C语言程序设计Word文档格式.docx_第2页
第2页 / 共11页
转基于DS18B20数字温度计C语言程序设计Word文档格式.docx_第3页
第3页 / 共11页
转基于DS18B20数字温度计C语言程序设计Word文档格式.docx_第4页
第4页 / 共11页
转基于DS18B20数字温度计C语言程序设计Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

转基于DS18B20数字温度计C语言程序设计Word文档格式.docx

《转基于DS18B20数字温度计C语言程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《转基于DS18B20数字温度计C语言程序设计Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

转基于DS18B20数字温度计C语言程序设计Word文档格式.docx

voiddelay(uint);

//延时函数

voidDS18B20_init(void);

//DS18B20初始化

voidget_temper(void);

//读取温度程序

voidDS18B20_write(ucharin_data);

//DS18B20写数据函数

ucharDS18B20_read(void);

////读取数据程序

ucharhtd(uchara);

//进制转换函数

voiddisplay(void);

//显示函数

uchartemp;

//温度寄存器

bitDS18B20;

//18B20存在标志,1---存在0---不存在

uchartab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//字段转换表

voidmain(void) 

 

uinta;

while

(1) 

get_temper();

//测量温度

for(a=0;

a<

200;

a++);

//显示,兼有延时的作用

display();

/****************************DS18B20读取温度函数**************************/

/*函数原型:

voidget_temper(void)

/*函数功能:

DS18B20读取温度

/*输入参数:

/*输出参数:

/*调用模块:

/*建立时间:

2005/11/14

/*作者:

站长

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

voidget_temper(void) 

uchark,T_sign,T_L,T_H;

DS18B20_init();

if(DS18B20)//判断DS1820是否存在?

若DS18B20不存在则返回

DS18B20_write(0xcc);

//跳过ROM匹配

DS18B20_write(0x44);

//发出温度转换命令

//跳过ROM匹配

DS18B20_write(0xbe);

//发出读温度命令

T_L=DS18B20_read();

//数据读出

T_H=DS18B20_read();

k=T_H&

0xf8;

if(k==0xf8) 

T_sign=1;

//温度是负数

else 

T_sign=0;

//温度是正数

T_H=T_H&

0x07;

temp=(T_H*256+T_L)*0.0625;

//温度转换常数

/****************************DS18B20写数据函数**************************/

voidDS18B20_write(ucharin_data)

DS18B20写数据

要发送写入的数据

_cror_()

voidDS18B20_write(ucharin_data)//写DS18B20的子程序(有具体的时序要求)

uchari,out_data,k;

out_data=in_data;

for(i=1;

i<

9;

i++)//串行发送数据

DQ=0;

DQ=1;

_nop_();

k=out_data&

0x01;

if(k==0x01)//判断数据写1

else//写0

delay(4);

//延时62us

out_data=_cror_(out_data,1);

//循环右移1位

/**************************DS18B20读函数**************************/

voidDS18B20_read()

DS18B20读数据

读到的一字节内容

delay()

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

ucharDS18B20_read() 

uchari,in_data,k;

in_data=0;

k=DQ;

//读DQ端

if(k==1)//读到的数据是1

in_data=in_data|0x01;

in_data=in_data|0x00;

delay(3);

//延时51us

in_data=_cror_(in_data,1);

//循环左移1位

return(in_data);

/**************************DS18B20初始化函数**************************/

voidDS18B20_init(void)

DS18B20初始化

voidDS18B20_init(void) 

uchara;

//主机发出复位低脉冲

delay(44);

//延时540US

0x36&

&

DQ==1;

a++) 

{//等待DS18B20回应

a++;

a--;

if(DQ) 

DS18B20=0;

//18B20不存在

DS18B20=1;

//18B20存在

delay(120);

//复位成功!

延时240US

/**************************数码管显示函数**************************/

voiddisplay(void)

数码管显示

voiddisplay(void) 

{

PS1=1;

P0=0x01;

PS1=0;

PS2=1;

P0=tab[htd(temp)>

>

4];

//转换成十进制输出

PS2=0;

 

delay(200);

PS1=1;

P0=0x02;

P0=tab[htd(temp)&

0x0f];

P_L=~DS18B20;

/*********************原显示函数***********************************

voiddisplay(void)

{

P0=tab[htd(temp)>

delay(200);

P0=tab[htd(temp)&

P_L=~DS18B20;

}

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

/**************************十六进制转十进制函数**************************/

ucharhtd(uchara)

十六进制转十进制

要转换的数据

转换后的数据

ucharhtd(uchara) 

ucharb,c;

b=a%10;

c=b;

a=a/10;

c=c|b<

<

4;

returnc;

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

delay(unsignedintdelay_time)

延时函数

delay_time(输入要延时的时间)

2005/10/21

voiddelay(unsignedintdelay_time)//延时子程序

{for(;

delay_time>

0;

delay_time--) 

{} 

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

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1