一.管脚&芯片&寄存器
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); //跳过ROM
Write_DS18B20(0x44); //进行温度转换
init_ds18b20(); //初始化
Write_DS18B20(0xcc); //跳过ROM
Write_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:读取数据的顺序