📄 18b20.h
字号:
//--------------------------------------------------
//18b20
// 作者:闵运华
// qq:121758163
//--------------------------------------------------
sbit Tab00078 = P2^1;
#define Tab00079 EA = 0
#define Tab00080 EA = 1
extern void Tab000371Tab00038();
extern void Tab0003710Tab00028(void);
void Tab0008118B20();
unsigned char Tab00082(void);
void Tab00083(unsigned char Tab00084);
unsigned int Tab00045(void);
void Tab00085(unsigned char i);
//初始化温度传感器
void Tab0008118B20()
{
unsigned char Tab00086 = 0;
Tab00078 = 1;
Tab00085(100);
Tab00079;
Tab00078 = 0;
Tab00085(40);//延时五百微秒
Tab00078 = 1;
while(Tab00078 && Tab00086 < 100)
{
Tab00086++;
}
Tab00078 = 1;
Tab00080;
Tab00085(10);
if(Tab00086 >= 100)
{
Tab000371Tab00038();
Tab000371Tab00038();
Tab000371Tab00038();
Tab000371Tab00038();
}
Tab00085(250);//延时五百微秒
}
//读一个字节
unsigned char Tab00082(void)
{
unsigned char Tab00088;
unsigned char Tab00089 ;
unsigned char Tab00090;
Tab00089 = 0;
Tab00079;
for(Tab00088 = 0; Tab00088 < 8 ; Tab00088++)
{
Tab00078 = 0;
Tab00089 >>= 1;
Tab00078 = 1;
Tab00090 = Tab00078;
//电位 = 温度传感器脚位;
if(Tab00090)
{
Tab00089 |= 0x80;
}
Tab00078 = 1;
Tab00085(6);//等待六十微秒
}
Tab00080;
return Tab00089;
}
//写一个字节
void Tab00083(unsigned char Tab00084)
{
unsigned char Tab00092;
Tab00079;
for(Tab00092 = 0; Tab00092 < 8; Tab00092++)
{
Tab00078 = 0;
Tab00078 = Tab00084 & 0x01;
Tab00085(6);//等待六十微秒
Tab00078 = 1;
Tab00084 >>= 1;
Tab00085(1);//等待4微秒
}
//延时微秒(6);//等待六十微秒
Tab00080;
}
//读取温度
unsigned int Tab00045(void)
{
unsigned int t;
//unsigned char tt;
Tab0008118B20();
Tab00083(0xCC);// 跳过读序号列号的操作
Tab00083(0x44);// 启动温度转换
//延时1秒();
Tab0003710Tab00028();
Tab0008118B20();
Tab00083(0xCC);// 跳过读序号列号的操作
Tab00083(0xBE);// 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
t = Tab00082();
t |=Tab00082()<<8;
#if 0
// 判断是否是负数
if(t & 0x8000)
{
t = ~t;
t++;
t <<= 4;// 将整数部分移入高八位 低八位的高四位为小数部分
//将温度变成BCD码存放
tt =( t>>8) & 0xff;
t = t & 0xff;
t |= (((tt / 10)<<4) | (tt % 10))<<8;
t = t &0xff00;
t |= 0x8000; //最高位为一表示负数
}
else
{
t <<= 4;// 将整数部分移入高八位 低八位的高四位为小数部分
//将温度变成BCD码存放
tt =( t>>8) & 0xff; //当前温度的高八位
t = t & 0xff;
t |= (((tt / 10)<<4) | (tt % 10))<<8;
tt = t;
t = t &0xff00;
}
//小数部分
tt >>= 6;
tt *=25;
t |= ((tt / 10)<<4) | ((tt % 10)) ;
//tt=t*0.0625;
//t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
#endif
return(t);
}
//延时微秒
void Tab00085(unsigned char i)
{
while(i--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -