#include<reg51.h> #define Disdata P0 #define weima P1 sbit dq=P3^4; unsigned flag; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; void delay(unsigned int useconds) {unsigned int s; for(s=0;s<useconds;s++); } /********復(fù)位函數(shù)*********/ unsigned char ow_reset(void) {unsigned char presence; dq=0; delay(73); dq=1; delay(12); presence=dq; delay(70); return(presence); } /********寫1位值*********/ void write_bit(unsigned char bitval) {dq=0; if(bitval==1) dq=1; delay(15); dq=1; } /********寫入字節(jié)函數(shù)*********/ void write_byte(unsigned char val) {unsigned char i; unsigned char temp; for(i=0;i<8;i++) {temp=val>>i; temp&=0x01; write_bit(temp); } delay(25); } /********位讀取函數(shù)*********/ unsigned char read_bit(void) {unsigned char i; dq=0; dq=1; for(i=0;i<10;i++); return(dq); } /********字節(jié)讀取函數(shù)*********/ unsigned char read_byte(void) {unsigned char i; unsigned char value=0; for(i=0;i<8;i++) {if (read_bit()) value|=0x01<<i; delay(120); } return(value);
} /********讀暫存器*********/ void read_scratchpad(void) {unsigned char j=0,pad[10]; write_byte(0xBE); for(j=0;j<9;j++) pad[j]=read_byte(); }
/********讀取溫度函數(shù)*********/ float read_temperature(void) {unsigned char get[10]; unsigned char temp_lsb,temp_msb; unsigned char k; float t; ow_reset(); write_byte(0xCC); write_byte(0x44); delay(60); ow_reset(); write_byte(0xCC); write_byte(0xBE); for(k=0;k<9;k++) get[k]=read_byte(); temp_msb=get[1]; temp_lsb=get[0]; if(temp_msb>=0x08) {temp_lsb=(~temp_lsb)+1; temp_msb&=0x07; temp_msb=(~temp_msb)+1; t=(-1)*(temp_msb*16+temp_lsb*0.0625); } else {t=temp_msb*16+temp_lsb*0.0625; } return t; }
|