📄 18b20.h
字号:
//--------------------------------------------------
//18b20
// 作者:闵运华
// qq:121758163
//--------------------------------------------------
sbit 温度传感器脚位 = P2^1;
#define 禁止全局中断 EA = 0
#define 使能全局中断 EA = 1
extern void 延时1秒();
extern void 延时10毫秒(void);
void 初始化18B20();
unsigned char 从温度传器读一个字节(void);
void 向温度传感器里写一个字节(unsigned char 数值);
unsigned int 读取温度(void);
void 延时微秒(unsigned char i);
//初始化温度传感器
void 初始化18B20()
{
unsigned char 等待次数 = 0;
温度传感器脚位 = 高;
延时微秒(100);
禁止全局中断;
温度传感器脚位 = 低;
延时微秒(40);//延时五百微秒
温度传感器脚位 = 高;
while(温度传感器脚位 && 等待次数 < 100)
{
等待次数++;
}
温度传感器脚位 = 高;
使能全局中断;
延时微秒(10);
if(等待次数 >= 100)
{
延时1秒();
延时1秒();
延时1秒();
延时1秒();
}
延时微秒(250);//延时五百微秒
}
//读一个字节
unsigned char 从温度传器读一个字节(void)
{
unsigned char 字节位数;
unsigned char 返回值 ;
unsigned char 电位;
返回值 = 0;
禁止全局中断;
for(字节位数 = 0; 字节位数 小于 8 ; 字节位数++)
{
温度传感器脚位 = 低;
返回值 >>= 1;
温度传感器脚位 = 高;
电位 = 温度传感器脚位;
//电位 = 温度传感器脚位;
if(电位)
{
返回值 |= 0x80;
}
温度传感器脚位 = 高;
延时微秒(6);//等待六十微秒
}
使能全局中断;
return 返回值;
}
//写一个字节
void 向温度传感器里写一个字节(unsigned char 数值)
{
unsigned char 重复次数;
禁止全局中断;
for(重复次数 = 0; 重复次数 < 8; 重复次数++)
{
温度传感器脚位 = 低;
温度传感器脚位 = 数值 & 0x01;
延时微秒(6);//等待六十微秒
温度传感器脚位 = 高;
数值 >>= 1;
延时微秒(1);//等待4微秒
}
//延时微秒(6);//等待六十微秒
使能全局中断;
}
//读取温度
unsigned int 读取温度(void)
{
unsigned int t;
//unsigned char tt;
初始化18B20();
向温度传感器里写一个字节(0xCC);// 跳过读序号列号的操作
向温度传感器里写一个字节(0x44);// 启动温度转换
//延时1秒();
延时10毫秒();
初始化18B20();
向温度传感器里写一个字节(0xCC);// 跳过读序号列号的操作
向温度传感器里写一个字节(0xBE);// 读取温度寄存器等(共可读9个寄存器) 前两个就是温度
t = 从温度传器读一个字节();
t |=从温度传器读一个字节()<<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 延时微秒(unsigned char i)
{
while(i--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -