資源簡介
DS18B20 多點溫度測量 用proteus仿真 課程設計 單片機 51。我設計的是3個溫度器,程序課改成8個溫度。只需在仿真圖上加上即可

代碼片段和文件信息
//頭文件包含
#include?
#include?
#include?“DS18B20.H“
//引腳定義
sbit? DQ?=?P2^7; //數據線端口
//DS18B20序列號通過調用GetROMSequence()函數在P1口讀出(讀8次)
const?unsigned?char?code?ROMData1[8]?=?{0x28?0x33?0xC5?0xB8?0x00?0x00?0x00?0xD7}; //U1
const?unsigned?char?code?ROMData2[8]?=?{0x28?0x30?0xC5?0xB8?0x00?0x00?0x00?0x8E}; //U2
const?unsigned?char?code?ROMData3[8]?=?{0x28?0x31?0xC5?0xB8?0x00?0x00?0x00?0xB9}; //U3
//const?unsigned?char?code?ROMData4[8]?=?{0x28?0x32?0xC5?0xB8?0x00?0x00?0x00?0xE0}; //U4
//const?unsigned?char?code?ROMData5[8]?=?{0x28?0x34?0xC5?0xB8?0x00?0x00?0x00?0x52}; //U5
//const?unsigned?char?code?ROMData6[8]?=?{0x28?0x35?0xC5?0xB8?0x00?0x00?0x00?0x65}; //U6
//const?unsigned?char?code?ROMData7[8]?=?{0x28?0x36?0xC5?0xB8?0x00?0x00?0x00?0x3C}; //U7
//const?unsigned?char?code?ROMData8[8]?=?{0x28?0x37?0xC5?0xB8?0x00?0x00?0x00?0x0B}; //U8
//延時16us子函數
void?Delay16us()
{
unsigned?char?a;
for?(a?=?0;?a?4;?a++);
}
//延時60us子函數
void?Delay60us()
{
unsigned?char?a;
for?(a?=?0;?a?18;?a++);
}
//延時480us子函數
void?Delay480us()
{
unsigned?char?a;
for?(a?=?0;?a?158;?a++);
}
//延時240us子函數
void?Delay240us()
{
unsigned?char?a;
for?(a?=?0;?a?78;?a++);
}
//延時500ms子函數
void?Delay500ms()
{
unsigned?char?a?b?c;
for?(a?=?0;?a?250;?a++)
for?(b?=?0;?b?3;?b++)
for?(c?=?0;?c?220;?c++);
}
//芯片初始化
void?Initialization()
{
while(1)
{
DQ?=?0;
Delay480us();? //延時480us
DQ?=?1;
Delay60us(); //延時60us
if(!DQ)?? //收到ds18b20的應答信號
{
DQ?=?1;
Delay240us(); //延時240us
break;
}
}
}
//寫一個字節(從低位開始寫)
void?WriteByte(unsigned?char?btData)
{
unsigned?char?i?btBuffer;
for?(i?=?0;?i?8;?i++)
{
btBuffer?=?btData?>>?i;
if?(btBuffer?&?1)
{
DQ?=?0;
_nop_();
_nop_();
DQ?=?1;
Delay60us();
}
else
{
DQ?=?0;
Delay60us();
DQ?=?1;
}
}
}
//讀一個字節(從低位開始讀)
unsigned?char?ReadByte()
{
unsigned?char?i?btDest;
for?(i?=?0;?i?8;?i++)
{
btDest?>>=?1;
DQ?=?0;
_nop_();
_nop_();
DQ?=?1;
Delay16us();
if?(DQ)?btDest?|=?0x80;?
Delay60us();
}
return?btDest;
}
//序列號匹配
void?MatchROM(const?unsigned?char?*pMatchData)
{
unsigned?char?i;
Initialization();
WriteByte(MATCH_ROM);
for?(i?=?0;?i?8;?i++)?WriteByte(*(pMatchData?+?i));
}
//得到64位ROM序列(在P1口顯示必須與Proteus聯調且在單步調試下才能得到)
/*void?GetROMSequence()
{
unsigned?char?i;
Initialization();
WriteByte(READ_ROM);
for?(i?=?0;?i?8;?i++)
P1?=?ReadByte();
}*/
//讀取溫度值
bit?ReadTemperature(TEMPDATA?*?pTempData)
{
unsigned?int?iTempDataH;
unsigned?char?btDot?iTempDataL;
static?unsigned?char?i?=?0;
pTempData->btNegative?=?0; //為0溫度為正
i++;
if?(i?==?4)?i?=?1;
Initialization();
WriteByte(SKIP_ROM); //跳過ROM匹配
WriteByte(TEMP_SWITCH); //啟動轉換
Delay500ms();?? //調用一次就行
Delay500
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????457??2009-05-30?19:05??設計1\Keil\Include\1602.H
?????文件???????1692??2009-10-31?11:10??設計1\Keil\Include\DS18B20.H
?????文件???????2385??2014-12-02?21:43??設計1\Keil\Keil.Opt
?????文件???????2325??2014-12-02?21:43??設計1\Keil\Keil.Uv2
????.......??????2358??2009-11-22?16:11??設計1\Keil\Keil_Opt.Bak
????.......??????2192??2009-10-31?11:10??設計1\Keil\Keil_Uv2.Bak
?????文件????????849??2014-12-02?21:43??設計1\Keil\LST\1602驅動.lst
?????文件????????864??2014-12-02?21:43??設計1\Keil\LST\DS18B20驅動.lst
?????文件??????11760??2009-11-22?16:02??設計1\Keil\LST\STARTUP.lst
?????文件????????839??2014-12-02?21:43??設計1\Keil\LST\主函數.lst
?????文件??????20837??2014-12-02?21:43??設計1\Keil\LST\多點溫度測量.m51
?????文件???????1380??2009-07-25?15:01??設計1\Keil\Source\1602驅動.C
?????文件???????4509??2014-12-02?21:27??設計1\Keil\Source\DS18B20驅動.c
?????文件???????5115??2002-04-16?15:32??設計1\Keil\Source\STARTUP.A51
?????文件????????540??2014-12-02?21:43??設計1\Keil\Source\主函數.c
?????文件???????6470??2014-12-02?21:43??設計1\Keil\Target\1602驅動.obj
?????文件??????11335??2014-12-02?21:43??設計1\Keil\Target\DS18B20驅動.obj
?????文件????????126??2014-12-02?21:43??設計1\Keil\Target\DS18B20驅動.__i
?????文件????????826??2009-11-22?16:02??設計1\Keil\Target\STARTUP.obj
?????文件???????4616??2014-12-02?21:43??設計1\Keil\Target\主函數.obj
?????文件??????20226??2014-12-02?21:43??設計1\Keil\Target\多點溫度測量
?????文件???????3091??2014-12-02?21:43??設計1\Keil\Target\多點溫度測量.hex
?????文件????????164??2014-12-02?21:43??設計1\Keil\Target\多點溫度測量.lnp
?????文件???????3010??2014-12-02?21:43??設計1\Keil\Target\多點溫度測量.plg
?????文件?????124343??2009-10-19?10:17??設計1\Last?Loaded?多點溫度測量.DBK
?????文件?????119919??2014-12-02?21:30??設計1\多點溫度測量.DSN
?????文件???????3030??2014-12-09?10:45??設計1\多點溫度測量.PWI
?????目錄??????????0??2014-12-02?21:01??設計1\Keil\Include
?????目錄??????????0??2014-12-02?21:43??設計1\Keil\LST
?????目錄??????????0??2014-12-02?21:01??設計1\Keil\Source
............此處省略6個文件信息
- 上一篇:50MHz逐步分頻器VHDL代碼
- 下一篇:EDA實驗??勺冇嫈灯?設計程序,已通過
評論
共有 條評論