这里是一些常用的头文件和零部件配置。很好用的,大家可以试试。
单片机源程序如下:
- #include <STC12C5A60S2.H>
- #include "ds18b20.h"
- #include "delay.h"
- sbit IO_18B20 = P3^5; //DS18B20通信引脚
- unsigned int temp;
- float f;
- bit Get18B20Ack()
- {
- bit ack;
- EA = 0;
- IO_18B20 = 0;
- delay_us(500); //500us复位脉冲
- IO_18B20 = 1;
- delay_us(60); //延时60us
- ack = IO_18B20; //读取存在脉冲
- while(!IO_18B20);//等待脉冲结束
- EA = 1;
- return ack;
- }
- void Write18B20(unsigned char dat)
- {
- unsigned char mask;
- EA = 0;
- for(mask=0x01; mask!= 0; mask<<=1) //低位在先,依次移出8个bit
- {
- IO_18B20 = 0;
- delay_us(2); //产生2us低电平脉冲
- if((mask&dat) == 0) //输出bit值
- IO_18B20 = 0;
- else
- IO_18B20 = 1;
- delay_us(60); //延时60us后拉高通信引脚
- IO_18B20 = 1;
- }
- EA = 1;
- }
- unsigned char Read18B20()
- {
- unsigned char dat;
- unsigned char mask;
- EA = 0;
- for(mask=0x01; mask!=0; mask<<=1) //低位在先,依次采集8位bit
- {
- IO_18B20 = 0;
- delay_us(2); //2us低电平脉冲
- IO_18B20 = 1; //结束低电平脉冲,等待18B02输出数据
- delay_us(3); //延时
- if(!IO_18B20)
- dat &= ~mask;
- else
- dat |= mask;
- delay_us(60);
- }
- EA = 1;
- return dat;
- }
- bit Start18B20()
- {
- bit ack;
- ack = Get18B20Ack(); //执行总线复位,并获取应答
- if(ack == 0)
- {
- Write18B20(0xCC); //跳过ROM操作
- Write18B20(0x44); //启动一次温度转换
- }
- return ~ack;
- }
- unsigned int Get18B20Temp()
- {
- bit ack;
- unsigned char LSB, MSB; //定义16bit温度值的低字节
- Start18B20(); //每次读取都要设置18b20模式
- delay_ms(750); //温度转换启动后,等待它转换完毕
-
- ack = Get18B20Ack();
-
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
DS18B20.zip
(36.1 KB, 下载次数: 18)
|