51單片機(jī)-溫度傳感器DS18B20
void DS18B20_Reset(){
DQ = 1; //開始的時(shí)候是高脈沖
DQ=0; //然后是低脈沖
i=103;
while(i>0)i--; //低脈沖需要延遲一會兒
DQ=1; //數(shù)據(jù)線拉高
i=4;
while(i>0)i--; //延時(shí)等待,若初始化成功則在15"60ms內(nèi)產(chǎn)生一個由
if(DQ == 0){ //DS18B20返回的低電平
while(DQ == 0);
// bell = 0;
}
else
bell = 1;
}
uchar DS18B20_Read(void)
{
uchar i = 0;
uchar Value = 0;
for(i = 0; i < 8; i ++)
{
DQ = 1;
DQ = 0;
delay(1);
DQ = 1;
delay(1);
if(DQ)
{
Value |= 0x01 << i;
}
delay(17);
DQ = 1;
nop();
}
return Value;
}
void DS18B20_Write(uchar Value){
for(i = 0; i < 8; i++){
DQ = 1;
DQ = 0;
delay(5);
DQ = Value & 0x01;
delay(20);
DQ = 1;
Value >>= 1;
delay(2);
}
}
uchar DS18B20_Temp_Read(){
uchar temp_h,temp_l,temp;
DS18B20_Reset(); //復(fù)位
DS18B20_Write(0x0cc); //跳過ROM,只有一個所以跳過
DS18B20_Write(0x44); //開始溫度轉(zhuǎn)換
DS18B20_Reset(); //復(fù)位
DS18B20_Write(0x0cc); //跳過ROM
DS18B20_Write(0x0be); //讀暫存器
temp_l = DS18B20_Read(); //讀出溫度低8位
temp_h = DS18B20_Read(); //讀出溫度高8位
temp_l >>= 4; //去掉4位小數(shù)位
temp_h <<= 4; //去掉4位符號位
temp = temp_h | temp_l;
temp = temp & 0x7f; //最高位是符號位
return temp;
}
void main(){
uchar temp;
Init_Lcd();
while(1){
temp = DS18B20_Temp_Read();
if(temp > 25) //如果溫度大于25報(bào)警
bell = 0;
else
bell = 1;
Display_Lcd(0,0,T);
Display_Lcd(0,1,E);
Display_Lcd(0,2,M);
Display_Lcd(0,3,P);
Display_Lcd(0,4,:);
Display_Lcd(0,5,Time_Data[temp/100]);
Display_Lcd(0,6,Time_Data[temp%100/10]);
Display_Lcd(0,7,Time_Data[temp%10]);
}
關(guān)鍵詞:
51單片機(jī)溫度傳感器DS18B2
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論