這里是一些常用的頭文件和零部件配置。很好用的,大家可以試試。
0.png (65.8 KB, 下載次數: 78)
下載附件
2017-5-13 03:51 上傳
單片機源程序如下:
- #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, 下載次數: 20)
2017-5-12 23:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|