一.管脚&芯片&寄存器
1.芯片
2.了解封装以及引脚的用法
3.相关寄存器
报警功能
二,如何使能DS18B20芯片
1.初始化芯片&比赛提供的驱动代码
比赛提供的底层驱动代码
/* # 单总线代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础,根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求,进行代码调试和修改。
*///
void Delay_OneWire(unsigned int t)
{unsigned char i;while(t--){for(i=0;i<12;i++);}
}//
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;} Delay_OneWire(5);}return dat;
}//
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ; Delay_OneWire(5);return initflag;
}
2.执行ROM指令
仅使用单个DS18B20芯片可以跳过ROM指令,跳过ROM的指令是0xCC
功能指令
3.执行DS18B02功能指令
写在onewire.c 文件里面 在.h文件中声明 再在main函数里面引入.h文件
//读取温度函数 返回值:温度高低两个字节
//函数功能:完成温度转换 并返回转换后的温度
float rd_temperature (void)
{unsigned char low,high; //返回温度的高低八位init_ds18b20(); //初始化Write_DS18B20(0xcc); //跳过ROMWrite_DS18B20(0x44); //进行温度转换init_ds18b20(); //初始化Write_DS18B20(0xcc); //跳过ROMWrite_DS18B20(0xbe); //读取温度low = Read_DS18B20(); //读取低位high = Read_DS18B20(); //读取高位return ((high<<8)|low) /16.0;}
在main.c文件中
float t;
t = rd_temperature(); //让温度一直读取//强制类型转换显示数据
Seg_Buf[0] = (unsigned cahr)t / 10 % 10; //个位
Seg_Buf[1] = (unsigned cahr)t % 10; //十位
Seg_Buf[2] = (unsigned cahr)(t * 10) % 10; //小数点位//为了避免一上电显示85的初始值,在上电之前先读取数值 延时750ms再显示
void Delay750ms() //@12.000MHz
{unsigned char i, j, k;i = 35;j = 51;k = 182;do{do{while (--k);} while (--j);} while (--i);
}void main()
{t = rd_temperature();Delay750ms();
}
延时函数在stc中可生成,将nop删除即可
PS:读取数据的顺序