DS18B20接单片机每隔一段时间输出温度怎么做,求详细程序?

DS18B20接单片机每隔一段时间输出温度怎么做,求详细程序?,第1张

我不知道你I/O怎么接的,也不知道你用的是什么型号的单片机。给你一个大致的程序,用8051给你写了一下,晶振频率是11.0592MHZ。如果用STM32什么的再问我。这是30s一采集显示的程序

unsigned char I=0,J=0

void Init_Time()

{

TMOD=0X01

TH0=0XEE

TL0=0X00

EA=ET0=TR0=1

}

void main()

{

Init_Time()

while(1)

}

void Time0() interrupt 1

{

I++

if(I==200)

{

I=0

J++

if(J==30)

{

J=0

//DS18B20()//你的温度传感器程序

//LCD()//你的温度显示程序

}

}

TH0=0XEE

TL0=0X00

}

给你提一个小建议,但是不会帮你写程序,我看你把温度放到了数组,你可以通过判断数组来开启报警啊,例如:

if()

{

-----------

}

利用if语句判断温度的各位和十位,如果相等就开启蜂鸣器,就这么简单!

//mega8 7.3728MHz gcc编译通过,_delay_us(us) _delay_ms(ms)调用库函数

//初始化把dq设置为输出

#define ds18b20_dq PC5

#define set_ds18b20_dq_ddr() DDRC|=1<<ds18b20_dq

#define set_ds18b20_dq() PORTC|=1<<ds18b20_dq

#define clr_ds18b20_dq() PORTC&=~(1<<ds18b20_dq)

#define clr_ds18b20_dq_ddr() DDRC&=~(1<<ds18b20_dq)

#define in_ds18b20_dq() PINC&(1<<ds18b20_dq)

#define ds18b20_read_rom 0x33

#define ds18b20_match_rom 0x55

#define ds18b20_skip_rom 0xcc

#define ds18b20_search_rom 0xf0

#define ds18b20_alarm_search_rom 0xec

#define ds18b20_write_ram 0x4e

#define ds18b20_read_ram 0xbe

#define ds18b20_copy_ram 0x48

#define ds18b20_convert_tem0x44

#define ds18b20_eecall_eeprom 0xb8

#define ds18b20_read_power_supply 0xb4

void reset_ds18b20(void)

{

clr_ds18b20_dq()

_delay_us(198)//100us

_delay_us(198)//100us

_delay_us(198)//100us

_delay_us(198)//100us

set_ds18b20_dq()

_delay_us(38)//20us

}

void ack_ds18b20(void)

{

while(in_ds18b20_dq())

while(!(in_ds18b20_dq()))

_delay_us(38)//20us

}

uchar read_ds18b20(void)

{

uchar data=0

uchar i=0

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

{

data>>=1

clr_ds18b20_dq()

_delay_us(1)//1us

set_ds18b20_dq()

_delay_us(2)//2us

if(in_ds18b20_dq()) data|=0x80

_delay_us(118)//60us

}

return(data)

}

void write_ds18b20(uchar data)

{

uchar i=0

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

{

if(data&0x01){

clr_ds18b20_dq()

_delay_us(14)//8us

set_ds18b20_dq()

_delay_us(108)//55us

}

else

{

clr_ds18b20_dq()

_delay_us(108)//55us

set_ds18b20_dq()

_delay_us(14)//8us

}

data>>=1

}

}

void convert_ds18b20(void)

{

reset_ds18b20()

ack_ds18b20()

_delay_ms(1)

write_ds18b20(ds18b20_skip_rom)

write_ds18b20(ds18b20_convert_tem)

}

void read_temperature(void)

{

reset_ds18b20()

ack_ds18b20()

_delay_ms(1)

write_ds18b20(ds18b20_skip_rom)

write_ds18b20(ds18b20_read_ram)

temperature_low=read_ds18b20()

temperature_high=read_ds18b20()

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存