您的位置:首页 > 其它

ds18b20温度传感器主程序

2017-02-11 16:48 369 查看
#include<reg52.h>
#include<intrins.h>
#include "./delay/delay.h"
#include <stdio.h>
#include "./display/display.h"

sbit ds= P2^3;
bit ack = 0;
#define SUCC 1
#define ERR 0

void ds18b20_init()
{
//P0 = 0x00;
ds = 0;
delay_us(200);
delay_us(200);
ds = 1;
delay_us(30);
if(ds == 0)
{
ack = SUCC;
}
else
{
ack = ERR;
}
delay_us(200);
}
void ds18b20_write_byte(unsigned char byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = byte & 0x01;
byte >>= 1;
delay_us(30);
}
delay_us(30);
ds = 1;
}

bit ds18b20_read_bit()
{
bit tmp;
ds = 1;
ds = 0;
_nop_();
_nop_();
ds = 1;
tmp = ds;
delay_us(30);

return tmp;
}

unsigned char ds18b20_read_byte()
{
unsigned char i,j,k = 0;
for(i = 0;i < 8;i++)
{
j = ds18b20_read_bit();
k = (j << 7) | (k >> 1);//j <<= 7;k >>= 1;k += j;
}
return k;
}

void main()
{
unsigned char a;
unsigned int b,temp;
float temp_f;
unsigned char disbuf[20];

LCD_Init();
while(1)
{
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0x44);
delay_us(20);
ds18b20_init();
ds18b20_write_byte(0xcc);
ds18b20_write_byte(0xbe);
a = ds18b20_read_byte();
b = ds18b20_read_byte();
temp = (b << 8) + a;
temp_f = (float)temp * 0.0625;
sprintf(disbuf,"temp is %7.3f",temp_f);
LCD_Write_String(0,0,disbuf);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: