DS18B20 51单片机冰箱测温程序IC解密
IC解密冰箱测温程序,经测试,可以用
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
//小板接线
// sbit lcdrs=P2^4; //液晶接口
// sbit rw=P2^5; //液晶接口
// sbit lcden=P2^6; //液晶接口
sbit quanwe=P2^0;
sbit baiwe=P2^1;
sbit shiwe=P2^2;
sbit gewe=P2^3;
sbit Beep=P3^0;
sbit DS=P3^2; //温度传感器接口
sbit K1=P3^6; //16脚
sbit K2=P3^7; //17脚
sbit K3=P3^4; //14脚
sbit K4=P3^5; //15脚
uchar K1num;
uchar code smgdu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
bit flag;
uchar Thflag=1;
uchar con;
uchar Th;
uint temp;
//延迟函数
void delayus(uint t) // 延迟10微秒函数
{
while(t--);
}
void delayms(uint z) //延迟1毫秒函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//DS18B20温度函数
void DSreset(void) //复位
{
DS=1; //总线高电平
delayus(6); //延迟66us
DS=0; //拉低总线
delayus(65); //保持480-960us
DS=1; //释放总线
delayus(14);
if(DS==0) //检测到从件发出应答信号
flag=1;
else
flag=0; //未检测到从件发出应答信号
delayus(20);
}
bit DSread_bit( ) //读位函数,主机把总线由高拉低1微秒,释放,15微秒内检测并读取总线电平。
{
bit Dat;
DS=0; //拉低总线
_nop_( ); //延1微秒
_nop_( );
DS=1; //释放总线
_nop_( );
Dat=DS; //读取总线电平
delayus(10);
return Dat; //返出读取值
}
uchar DSreadByte( ) //读取8位并组装1字节函数
{
uchar i, j,k;
k=0; //K赋初值0
for(i=0; i<8; i++)
{
j=DSread_bit( );
k=(j<<7)|(k>>1); //j左移7位与上k,8次后组成1字节
}
return k;
}
void DSwrite_byte(uchar dat) //写1字节函数
{
uchar i;
for(i=1;i<=8;i++)
{
DS=0; //拉低总线
_nop_( ); //延1微秒
DS=dat&0x01; //总线电平等于需写入dat的未位,写1则DS=1,写0则DS=0
delayus(6);
DS=1; //释放总线,准备写入dat的未第2位。
dat=dat>>1; //dat右移,未2位移至未位。
}
delayus(6);
}

芯片解密