資源簡(jiǎn)介
。與傳統(tǒng)的溫度計(jì)相比,這里設(shè)計(jì)的數(shù)字溫度計(jì)具有讀數(shù)方便,測(cè)溫范圍廣,測(cè)溫精確,數(shù)字顯示,適用范圍寬等特點(diǎn)。選用AT89C52單片機(jī)作為主控制器件,DSl8B20作為測(cè)溫傳感器通過4位共陰極LED數(shù)碼管串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示。通過DSl8B20直接讀取被測(cè)溫度值,進(jìn)行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在0℃~100℃最大線性偏差小于0.1℃。該器件可直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。另外,該溫度計(jì)還能直接采用測(cè)溫器件測(cè)量溫度,從而簡(jiǎn)化數(shù)據(jù)傳輸與處理過程。

代碼片段和文件信息
#include?“reg51.h“
char?disp[11]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x40};
char?disp_dot[11]={0xbf0x860xdb0xcf0xe60xed0xfd0x870xff0xef0xc0};
sbit?DQ?=?P1^3;???//定義通信端口?
//晶振12MHz??
void?delay_18B20(unsigned?int?i)
{
while(i--);
}
//初始化函數(shù)
Init_DS18B20(void)?
{
?unsigned?char?x=0;
?DQ?=?1;??????????//DQ復(fù)位
?delay_18B20(8);??//稍做延時(shí)
?DQ?=?0;??????????//單片機(jī)將DQ拉低
?delay_18B20(80);?//精確延時(shí)?大于?480us
?DQ?=?1;??????????//拉高總線
?delay_18B20(14);
?x=DQ;????????????//稍做延時(shí)后?如果x=0則初始化成功?x=1則初始化失敗
?delay_18B20(20);
}
//讀一個(gè)字節(jié)??
ReadOneChar(void)
{
unsigned?char?i=0;
unsigned?char?dat?=?0;
for?(i=8;i>0;i--)
?{
??DQ?=?0;?//?給脈沖信號(hào)
??dat>>=1;
??DQ?=?1;?//?給脈沖信號(hào)
??if(DQ)
??dat|=0x80;
??delay_18B20(4);
?}
? return(dat);
}
//寫一個(gè)字節(jié)??
WriteOneChar(unsigned?char?dat)
{
?unsigned?char?i=0;
?for?(i=8;?i>0;?i--)
?{
??DQ?=?0;
??DQ?=?dat&0x01;
??delay_18B20(5);
??DQ?=?1;
??dat>>=1;
?}
}
//讀取溫度
ReadTemperature(void)
{
unsigned?char?a=0;
unsigned?char?b=0;
unsigned?int??t=0;
Init_DS18B20();
WriteOneChar(0xCC);?//?跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0x44);?//?啟動(dòng)溫度轉(zhuǎn)換
delay_18B20(100);
Init_DS18B20();
WriteOneChar(0xCC);?//跳過讀序號(hào)列號(hào)的操作
WriteOneChar(0xBE);?//讀取溫度寄存器等(共可讀9個(gè)寄存器)?前兩個(gè)就是溫度
a=ReadOneChar();
b=ReadOneChar();
//傳感器返回值除16得實(shí)際溫度值
//為了得到2位小數(shù)位,先乘100,再除16,考慮整型數(shù)據(jù)長(zhǎng)度,
//技巧處理后先乘25,再除4,除4用右移實(shí)現(xiàn)
t?=?(b*256+a)*25;
return(?t?>>?2??);
}
main()
{
unsigned?int?tmp;
unsigned?char?counter;
while(1)
{
//溫度測(cè)量頻率沒有必要太高,太高反而影響數(shù)碼顯示
//所以用計(jì)數(shù)器加以控制
if(counter--?==?0)
{
tmp?=?ReadTemperature();?
counter?=?20;
}
P2?=?0xff;
P0?=?0x39;//“C“
P2?=?0xfb;
delay_18B20(1000);
P2?=?0xff;
P0?=?disp[tmp%10];
P2?=?0xf7;
delay_18B20(1000);
P2?=?0xff;
P0?=?disp[tmp/10%10];
P2?=?0xef;
delay_18B20(1000);
P2?=?0xff;
P0?=?disp_dot[tmp/100%10];
P2?=?0xdf;
delay_18B20(1000);
P2?=?0xff;
P0?=?disp[tmp/1000%10];
P2?=?0xbf;
delay_18B20(1000);
}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????167890??2007-04-11?20:21??clock.DSN
?????文件????????939??2010-07-02?17:43??clock.PWI
?????文件?????167887??2007-04-11?20:18??Last?Loaded?clock.DBK
?????文件?????530432??2010-07-04?16:52??課程設(shè)計(jì)報(bào)告.doc
?????文件???????5519??2007-04-11?20:15??KEILC51\temperature
?????文件???????2269??2007-04-11?20:15??KEILC51\temperature.c
?????文件???????1895??2007-04-11?20:15??KEILC51\temperature.hex
?????文件?????????39??2007-04-11?20:15??KEILC51\temperature.lnp
?????文件???????5777??2007-04-11?20:15??KEILC51\temperature.LST
?????文件???????8914??2007-04-11?20:15??KEILC51\temperature.M51
?????文件???????6150??2007-04-11?20:15??KEILC51\temperature.OBJ
?????文件????????850??2007-04-11?20:20??KEILC51\temperature.Opt
?????文件????????774??2007-04-11?20:20??KEILC51\temperature.plg
?????文件???????1963??2007-04-11?20:20??KEILC51\temperature.Uv2
?????文件???????1027??2007-04-11?19:49??KEILC51\temperature_Opt.Bak
?????文件???????1964??2007-04-11?19:49??KEILC51\temperature_Uv2.Bak
?????目錄??????????0??2010-07-04?16:53??KEILC51
-----------?---------??----------?-----??----
???????????????904289????????????????????17
評(píng)論
共有 條評(píng)論