51单片机系列温度采集LCD162显示温度系统C程序

51单片机系列温度采集LCD162显示温度系统C程序,第1张

这是我自己用过的DS18B20的程序,有什么问题可以百度橡陆祥HI我,我这个是把温度显示到电脑上了,如果你要显示到LCD上的话可以在里面梁搏加一悉伍些子程序。

#include<reg52.h>

#include<stdio.h>

#define uint unsigned int

#define uchar unsigned char

sbit ds=P1^0

bit flag

uchar count_t0

float f_temp

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=122y>0y--)

}

void init() // 串口初始化

{

TMOD=0x21

SCON=0x50

TH0=0x4c

TL0=0x00

TH1=0xf3

TL1=0xf3

EA=1

ET0=1

TR0=1

TR1=1

}

void timer0() interrupt 1

{

TH0=0x4c

TL0=0x00

if(++count_t0>=20)

{

count_t0=0

flag=1

}

}

void dsreset()

{

uint i

ds=0

i=103

while(i>0)

i--

ds=1

i=4

while(i>0)

i--

}

bit read_bit()

{

uint i

bit dat

ds=0i++

ds=1i++i++

dat=ds

i=8

while(i>0)

i--

return dat

}

uchar read_byte()

{

uchar i,j,dat

dat=0

for(i=1i<=8i++)

{

j=read_bit()

dat=(j<<7)|(dat>>1)

}

return dat

}

void write_byte(uchar dat)

{

uint i

uchar j

bit testb

for(j=1j<=8j++)

{

testb=dat&0x01

dat=dat>>1

if(testb)

{

ds=0

i++i++

ds=1

i=8

while(i>0)

i--

}

else

{

ds=0

i=8

while(i>0)

i--

ds=1

i++i++

}

}

}

void begin_change()

{

dsreset()

delay(1)

write_byte(0xcc)

write_byte(0x44)

}

float get_temp()

{

uchar a,b

uint temp

float f_temp

dsreset()

delay(1)

write_byte(0xcc)

write_byte(0xbe)

a=read_byte()

b=read_byte()

temp=b

temp<<=8

temp=temp|a

f_temp=temp*0.0625

temp=f_temp*10+0.5

f_temp=f_temp+0.05

return f_temp

}

void main()

{

init()

while(1)

{

if(flag==1)

{

flag=0

begin_change()

TI=1

printf("The tempeature is %f\n",get_temp())

while(!TI)

TI=0

}

}

}

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

*

文件名

温度采集DS18B20.c

*

描述

:

该文件实现了用温度物州传感器件DS18B20对温度的采集,并在数码管上显示出来。

*

创建人

东流,2009年4月10日

*

版本号

2.0

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

#include<reg52.h>

#define

uchar

unsigned

char

#define

uint

unsigned

int

#define

jump_ROM

0xCC

#define

start

0x44

#define

read_EEROM

0xBE

sbit

DQ

=

P2^3

//DS18B20数据口

unsigned

char

TMPH,TMPL

uchar

code

table[10]

=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}

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

*

名碰蚂亏称

:

delay()

*

功能

:

延时,延时时间大概为140US。

*

输入

:

*

输出

:

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

void

delay_1()

{

int

i,j

for(i=0

i<=10

i++)

for(j=0

j<=2

j++)

}

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

*

名称

:

delay()

*

功能

:

延时函笑神数

*

输入

:

*

输出

:

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

void

delay(uint

N)

{

int

i

for(i=0

i<N

i++)

}

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

*

名称

:

Delay_1ms()

*

功能

:

延时子程序,延时时间为

1ms

*

x

*

输入

:

x

(延时一毫秒的个数)

*

输出

:

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

void

Delay_1ms(uint

i)//1ms延时

{

uchar

x,j

for(j=0j<ij++)

for(x=0x<=148x++)

}

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

*

名称

:

Reset()

*

功能

:

复位DS18B20

*

输入

:

*

输出

:

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

uchar

Reset(void)

{

uchar

deceive_ready

DQ

=

0

delay(29)

DQ

=

1

delay(3)

deceive_ready

=

DQ

delay(25)

return(deceive_ready)

}

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

*

名称

:

read_bit()

*

功能

:

从DS18B20读一个位值

*

输入

:

*

输出

:

从DS18B20读出的一个位值

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

uchar

read_bit(void)

{

uchar

i

DQ

=

0

DQ

=

1

for(i=0

i<3

i++)

return(DQ)

}

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

*

名称

:

write_bit()

*

功能

:

向DS18B20写一位

*

输入

:

bitval(要对DS18B20写入的位值)

*

输出

:

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

void

write_bit(uchar

bitval)

{

DQ=0if(bitval==1)

DQ=1

delay(5)

DQ=1

}

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

*

名称

:

read_byte()

*

功能

:

从DS18B20读一个字节

*

输入

:

*

输出

:

从DS18B20读到的值

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

uchar

read_byte(void)

{

uchar

i,m,receive_data

m

=

1

receive_data

=

0

for(i=0

i<8

i++)

{

if(read_bit())

{

receive_data

=

receive_data

+

(m

<<

i)

}

delay(6)

}

return(receive_data)

}

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

*

名称

:

write_byte()

*

功能

:

向DS18B20写一个字节

*

输入

:

val(要对DS18B20写入的命令值)

*

输出

:

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

void

write_byte(uchar

val)

{

uchar

i,temp

for(i=0

i<8

i++)

{

temp

=

val

>>

i

temp

=

temp

&

0x01

write_bit(temp)

delay(5)

}

}

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

*

名称

:

Main()

*

功能

:

函数

*

输入

:

*

输出

:

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

void

main()

{

float

tt

uint

temp

P2

=

0x00

while(1)

{

Reset()

write_byte(jump_ROM)

write_byte(start)

Reset()

write_byte(jump_ROM)

write_byte(read_EEROM)

TMPL

=

read_byte()

TMPH

=

read_byte()

temp

=

TMPL

/

16

+

TMPH

*

16

P0

=

table[temp/10%10]

P2

=

6

Delay_1ms(5)

P0

=

table[temp%10]

P2

=

7

Delay_1ms(5)

}

}

一、DS18B20.c文件(用LCD1602显示的 I_N为DS18B20数据IO)

/*

模块名称:温度模块(DS18B20)

模块功能:DS18B20的功能子函数

*/

/********************************************预处理命令*******************************************/

#include"ds18b20.h"

/*

函数名:DS_WriBteAndRead(bit x,unit8 val)

函数功能:向DS18B20内部寄存器写入或读取数据

输入: x,val

输出:DS_WriteAndRead

*/

unit8 DS_WriteAndRead(bit x,unit8 val)

{

unit8 i=0,Red=0

for(i=8i>0i--)

{

if(x) //读陵派数据

{

I_N=0

I_N=1

Red>>=1

if(I_N)Red|=0x80

}

else //写数据

{

I_N=1

I_N=0

I_N=val&0x01

val>>=1

}

delay_us(4)

}

if(x)

return(Red)//返回数据

else

return 0

}

/*

函数尺激贺名:DS_Reset()

函数功能:DS18B20初始化设置

输入:无

输出:无

*/

void DS_Reset()

{

I_N=1

I_N=0

delay_us(50)

I_N=1

delay_us(30)

DS_WriteAndRead(0,0xcc)//跳过搜索

}

/*

函数名: DS_Data_Handle()

函数功能:铅慧数据处理

输入:无

输出:无

*/

void DS_Data_Handle()

{

unit_16 Ra=0,Rb=0,Temp=0

DS_Reset()//复位

DS_WriteAndRead(0,0x44)//启动温度转换

DS_Reset()//复位

delay_us(100)

DS_WriteAndRead(0,0xbe)//读暂存器中的数据

Ra=DS_WriteAndRead(1,0xbe)

Rb=DS_WriteAndRead(1,0xbe)

Temp=Rb

Temp<<=8

Temp|=Ra

Temp=Temp*0.625+0.5//数值转换

LCD_Write_Data(0,0xc5)

LCD_Write_Data(1,(Temp/100)+48)

LCD_Write_Data(1,(Temp/10%10)+48)

LCD_Write_Data(1,46)

LCD_Write_Data(1,(Temp%10)+48)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8203580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存