温度传感器

来源:互联网 发布:淘宝卖家版 编辑:程序博客网 时间:2024/04/29 08:25
#include<reg52.h>#include<intrins.h>#include "./delay/delay.h"#include "./1602.h"#include <stdio.h>sbit ds= P3^7;bit ack = 0;#define SUCC 1#define ERR 0void ds18b20_init(){    //P0 = 0x00;    ds = 0;    delay_us(200);    delay_us(200);    ds = 1;    delay_us(30);    if(ds == 0)      {        ack = SUCC;        //P0 = 0x01;    }    else      {        ack = ERR;        //P0 = 0x00;    }     delay_us(200);}void ds18b20_write_byte(unsigned char byte){    unsigned char i;    for(i=0;i<8;i++)    {        ds = 0;        _nop_();        _nop_();        ds = byte & 0x01;        byte >>= 1;        delay_us(30);           ds = 1;    }        delay_us(30);}bit ds_read_bit(){    bit tmp;    ds = 1;    ds = 0;    _nop_();    _nop_();    ds = 1;    tmp = ds;    delay_us(30);    return tmp;}unsigned char ds_read_byte(){    unsigned char i,j,k = 0;    for(i = 0;i < 8;i++)    {        j = ds_read_bit();        k = (j << 7) | (k >> 1);    }    return k;}void main(){    unsigned char a;    unsigned int temp,b;    float temp_f;    unsigned char disbuf[20];      LCD_Init();    while(1)    {        ds18b20_init();        ds18b20_write_byte(0xcc);        ds18b20_write_byte(0x44);        delay_ms(20);        ds18b20_init();        ds18b20_write_byte(0xcc);        ds18b20_write_byte(0xbe);        a = ds_read_byte();        b = ds_read_byte();        temp = (b << 8) + a;        temp_f = (float)temp * 0.0625;        sprintf(disbuf,"temp is %7.3f",temp_f);         //delay_ms(20);        LCD_Write_String(0,0,disbuf);    }}
0 0