版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單片機(jī)課程設(shè)計(jì)</b></p><p> 基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)的設(shè)計(jì)</p><p> 1.芯片DS18B20的說(shuō)明</p><p> 美國(guó)Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820 是世界上第一片支持 "一線總線"接口的溫度傳感器,在其內(nèi)部使用了在板(ON-B0AR
2、D)專(zhuān)利技術(shù)。全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管</p><p> 的集成電路內(nèi)。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶(hù)可輕松地組建傳感器網(wǎng)絡(luò),為測(cè)量系統(tǒng)的構(gòu)建引入全新概念?,F(xiàn)在,新一代的DS18B20 體積更小、更經(jīng)濟(jì)、更靈活。使你可以充分發(fā)揮“一線總線”的優(yōu)點(diǎn)。</p><p> DS18B20 的主要特性</p><p> 1.1芯片DS18B20的
3、特點(diǎn)</p><p> ?。?)適應(yīng)電壓范圍更寬,電壓范圍:3.0~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電</p><p> ?。?)獨(dú)特的單線接口方式,DS18B20 在與微處理器連接時(shí)僅需要一條口線即可實(shí)現(xiàn)微處理與DS18B20 的雙向通訊</p><p> ?。?)DS18B20 支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20 可以并聯(lián)在唯一的三線上,實(shí)現(xiàn)組網(wǎng)多點(diǎn)測(cè)溫
4、</p><p> ?。?)DS18B20 在使用中不需要任何外圍元件,全部傳感元件及轉(zhuǎn)換電路集成在形如一只三極管的集成電路內(nèi)</p><p> ?。?)溫范圍-55℃~+125℃,在-10~+85℃時(shí)精度為±0.5℃</p><p> ?。?)可編程的分辨率為9~12 位,對(duì)應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0625℃,可以實(shí)現(xiàn)
5、高精度測(cè)溫。</p><p> ?。?)在9位分辨率最多在93.75ms把溫度轉(zhuǎn)換成數(shù)字,12 位分辨率是最多可在750ms內(nèi)將溫度轉(zhuǎn)換成數(shù)字,速度更快。</p><p> ?。?)溫度測(cè)試結(jié)果直接轉(zhuǎn)換成數(shù)字溫度信號(hào),以“一線總線”串行傳輸給CPU,同事科傳送SRC檢驗(yàn)碼,菊友極強(qiáng)的抗干擾校正能力。</p><p> ?。?)負(fù)壓特性:電源極性接反時(shí)芯片不會(huì)因發(fā)熱而
6、燒毀,但不會(huì)正常工作。</p><p> 2. 液晶顯示器LM016L的說(shuō)明</p><p><b> 接口信號(hào)說(shuō)明:</b></p><p><b> 下表為控制命令表:</b></p><p> 液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙
7、,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖一是016L的內(nèi)部顯址。</p><p><b> 圖一</b></p><p><b> 液晶顯示簡(jiǎn)介</b></p><p><b> ?、僖壕э@示原理</b></p><p> 液晶
8、顯示的原理是利用液晶的物理特性,通過(guò)電壓對(duì)其顯示區(qū)域進(jìn)行控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直接驅(qū)動(dòng)、易于實(shí)現(xiàn)全彩色顯示的特點(diǎn),目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動(dòng)通信工具等眾多領(lǐng)域。</p><p><b> ?、谝壕э@示器的分類(lèi)</b></p><p> 液晶顯示的分類(lèi)方法有很多種,通常可按其顯示
9、方式分為段式、字符式、點(diǎn)陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動(dòng)方式來(lái)分,可以分為靜態(tài)驅(qū)動(dòng)(Static)、單純矩陣驅(qū)動(dòng)(Simple Matrix)和主動(dòng)矩陣驅(qū)動(dòng)(Active Matrix)三種。</p><p><b> ?、圩址娘@示</b></p><p> 用LCD顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋€(gè)字符由6×8或8&
10、#215;8點(diǎn)陣組成,既要找到和顯示屏幕上某幾個(gè)位置對(duì)應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“0”的不亮。這樣一來(lái)就組成某個(gè)字符。但由于內(nèi)帶字符發(fā)生器的控制器來(lái)說(shuō),顯示字符就比較簡(jiǎn)單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開(kāi)始顯示的行列號(hào)及每行的列數(shù)找出顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對(duì)應(yīng)的代碼即可。 </p>
11、;<p> 3. 總體電路流程圖</p><p><b> 4. 總體電路設(shè)計(jì)</b></p><p> LCD與AT89C51的連接,(如圖一所示)將LCD的D0~D7引腳分別與單片機(jī)的P0.1~P0.7相連,使LCD能接受來(lái)自單片機(jī)的信號(hào)。</p><p><b> 電路如圖二所示</b><
12、/p><p> 如圖可見(jiàn),電路主要是由AT89C51芯片和LM016L和蜂鳴器構(gòu)成了主要電路。開(kāi)關(guān)的控制,可調(diào)整溫度的范圍。</p><p><b> 5.系統(tǒng)程序設(shè)計(jì)</b></p><p><b> 程序清單 :</b></p><p> #include <AT89X51.H>
13、;</p><p> #include <intrins.h></p><p> #include<absacc.h></p><p> #define uint unsigned int</p><p> #define unchar unsigned char</p><p> u
14、nchar templ,temph,i,y,z,n;</p><p> unchar a,b;//LCD的變量</p><p> unchar sign=0;//標(biāo)志變量</p><p> bit k;//判斷正負(fù)變量</p><p> sbit dq=P3^5;</p><p> sbit rs=P2^
15、0;//LCD顯示的定義取值</p><p> sbit rw=P2^1;</p><p> sbit e=P2^2;</p><p> sbit bf=P0^7;</p><p> sbit DQ=P2^5;</p><p><b> //鍵盤(pán)定義</b></p><
16、;p> sbit read=P3^0;</p><p> sbit incH=P3^2;</p><p> sbit desH=P3^3;</p><p> sbit reset=P3^4;</p><p><b> //蜂鳴器</b></p><p> sbit BUZZER=
17、P2^6;</p><p> float t4,t5,t6,t7,tt;//溫度轉(zhuǎn)換的變量</p><p><b> uint tp;</b></p><p> unchar temperature,Htemp,Ltemp;</p><p> unchar D1,D2,D3;</p><p&g
18、t; uint D4,D5,D6,D9,D7,D8;</p><p> unchar code dis1[]={"0123456789"};</p><p> unchar code dis2[]={"temp:"};</p><p> unchar code dis3[]={"WARN"};&l
19、t;/p><p> unchar code dis4[]={"Htemp:"};</p><p> unchar code dis5[]={"working"};</p><p> unchar code dis6[]={"Ltemp:"};</p><p> bit flag
20、_1820_1;</p><p> bit flag_1820_2;</p><p> void delay_ms(unsigned char time);</p><p> void ledshow(void);</p><p> void keypress(void);</p><p> void ini
21、t(void);</p><p> void gettemp();</p><p> void init1820(void);</p><p> void write1820(unchar);</p><p> unsigned char read1820(void);</p><p> void delay
22、_us(unchar);</p><p> void delay3(unchar);</p><p><b> /* 延時(shí)*/</b></p><p> void delay(uint t)</p><p><b> {uint i;</b></p><p> w
23、hile(t--)</p><p> { for(i=0;i<125;i++)</p><p><b> {}</b></p><p><b> }</b></p><p><b> }</b></p><p><b> //L
24、CD顯示函數(shù)</b></p><p> void delay1(unchar time)</p><p> {unchar n;</p><p><b> n=0;</b></p><p> while(n<time)</p><p><b> {n++;}
25、</b></p><p><b> return;</b></p><p><b> }</b></p><p> void delay3(unchar x)</p><p> { for(y=x;y>0;y--)</p><p> for(z=
26、x;z>0;z--);</p><p><b> }</b></p><p> unchar testBF()</p><p> { bit result;</p><p> rs=0;rw=1;e=1;</p><p> _nop_();_nop_();_nop_();_nop
27、_();</p><p> result=bf;e=0;</p><p> return result;</p><p><b> }</b></p><p> void writecmd(unchar ZL)</p><p> { while(testBF()==1);</p&g
28、t;<p> rs=0;rw=0;e=0;</p><p> _nop_();_nop_();</p><p> P0=ZL;e=1;</p><p> _nop_();_nop_();_nop_();_nop_();</p><p><b> e=0;</b></p><p&
29、gt;<b> }</b></p><p> void pos(unchar pos)</p><p> {writecmd(pos|0x80);</p><p><b> }</b></p><p> void writedate(unchar date)</p><
30、;p> {while(testBF()==1);</p><p> rs=1;rw=0;e=0;</p><p> _nop_();_nop_();</p><p> P0=date;e=1;</p><p> _nop_();_nop_();_nop_();_nop_();</p><p><b
31、> e=0;</b></p><p><b> }</b></p><p> void init()</p><p> {delay3(20);</p><p> writecmd(0x38);</p><p> delay3(30);</p><
32、;p> writecmd(0x0d);</p><p> delay3(30);</p><p> writecmd(0x06);</p><p> delay3(30);</p><p> writecmd(0x01);</p><p> delay3(30);</p><p&g
33、t;<b> }</b></p><p><b> //鍵盤(pán)程序</b></p><p><b> //主程序</b></p><p> void main(void)</p><p><b> {</b></p><p>
34、; TMOD=0x01;</p><p> TH0=50000/256;</p><p> TL0=50000%256;</p><p> Htemp=124;Ltemp=-24;</p><p><b> P3=0xFF;</b></p><p><b> init();
35、</b></p><p> if(sign==0)</p><p><b> {</b></p><p> EA=1;TR0=1;ET0=1;</p><p> EX0=0; //關(guān)閉外部中斷0</p><p> EX1=0; //關(guān)閉外部中斷1 </p
36、><p><b> while(1)</b></p><p><b> {</b></p><p> if(read==0)</p><p><b> {</b></p><p> delay3(2000);</p><p>
37、; if(read==0)</p><p><b> {</b></p><p><b> sign++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b&g
38、t; }</b></p><p><b> }</b></p><p> if(sign==1)</p><p><b> {</b></p><p> BUZZER=1; //關(guān)閉蜂鳴器</p><p> EX0=1; //開(kāi)啟外部中斷0
39、</p><p> EX1=1; //開(kāi)啟外部中斷1</p><p><b> init();</b></p><p><b> pos(0);</b></p><p> for(i=0;i<6;) </p><p> { writedate(dis4[
40、i]);i++;</p><p><b> }</b></p><p> D6=Htemp%10;</p><p> D7=Htemp%100/10;</p><p> D8=Htemp/100;</p><p><b> pos(0x6);</b></p&g
41、t;<p> writedate(dis1[D8]);</p><p> writedate(dis1[D7]);</p><p><b> }</b></p><p> if(sign==2)</p><p><b> {</b></p><p>
42、 BUZZER=1; //關(guān)閉蜂鳴器</p><p> EX0=1; //開(kāi)啟外部中斷0</p><p> EX1=1; //開(kāi)啟外部中斷1</p><p><b> init();</b></p><p><b> pos(0);</b></p><
43、p> for(i=0;i<6;) </p><p> { writedate(dis6[i]);i++;}</p><p> D6=Htemp%10;</p><p> D7=Htemp%100/10;</p><p> D8=Htemp/100;</p><p><b> pos(
44、0x6);</b></p><p> writedate(dis1[D8]);</p><p> writedate(dis1[D7]);</p><p> writedate(dis1[D6]);</p><p><b> }</b></p><p> if(sign&g
45、t;2)</p><p> { sign=0;}</p><p><b> }</b></p><p><b> //中斷程序</b></p><p> void int0(void) interrupt 0</p><p><b> {</
46、b></p><p> EX0=0; //關(guān)外部中斷0</p><p> if(desH==0&&sign==1)</p><p><b> {</b></p><p><b> Htemp--;</b></p><p> if(Ht
47、emp<Ltemp)</p><p> Htemp=Ltemp;</p><p><b> }</b></p><p> else if(desH==0&&sign==2)</p><p><b> {</b></p><p><b>
48、 Ltemp--;</b></p><p><b> }</b></p><p><b> }</b></p><p> /*****外部中斷1服務(wù)程序*****/</p><p> void int1(void) interrupt 2</p><p>
49、;<b> {</b></p><p> EX1=0; //關(guān)外部中斷1</p><p> if(incH==0&&sign==1)</p><p><b> {</b></p><p><b> Htemp++;</b></p>
50、<p><b> }</b></p><p> else if(incH==0&&sign==2)</p><p><b> {</b></p><p><b> Ltemp++;</b></p><p> if(Ltemp>Hte
51、mp)</p><p> Ltemp=Htemp;</p><p><b> } </b></p><p><b> }</b></p><p> //定時(shí)器T0服務(wù)程序</p><p> void isr_t0(void) interrupt 1</p&g
52、t;<p> {TH0=50000/256;</p><p> TL0=50000%256;</p><p> TMOD=0x10;</p><p> TH1=50000/256;</p><p> TL1=50000%256;</p><p> gettemp();</p>
53、<p> delay(50);</p><p> if (tp<Htemp)</p><p> { BUZZER=1;</p><p> pos(0x04);</p><p> for(i=0;i<7;)</p><p><b> {</b></p>
54、;<p> writedate(dis5[i]);</p><p><b> i++;</b></p><p><b> }</b></p><p> pos(0x40);</p><p> for(i=0;i<5;)</p><p> {wr
55、itedate(dis2[i]);</p><p><b> i++;}</b></p><p> D1=(unchar)(tp%10);</p><p> D2=(unchar)(tp%100/10);</p><p> D3=(unchar)(tp/100);</p><p> D4
56、=(uint)(tt*10);</p><p> D5=((uint)(tt*100))%10;</p><p><b> if(k==1)</b></p><p> {pos(0x46);</p><p> writedate('-');}</p><p><b&g
57、t; else</b></p><p> {pos(0x46);</p><p> writedate();}</p><p> pos(0x47);</p><p> writedate(dis1[D3]);</p><p> writedate(dis1[D2]);</p>&
58、lt;p> writedate(dis1[D1]);</p><p> writedate('.');</p><p> writedate(dis1[D4]);</p><p> writedate(dis1[D5]);</p><p> writedate(0xdf);</p><p&g
59、t; writedate('C');</p><p><b> }</b></p><p><b> else</b></p><p> { init();</p><p> pos(0x04);</p><p> for(i=0;i<4
60、;)</p><p><b> {</b></p><p> writedate(dis3[i]);</p><p><b> i++;}</b></p><p><b> BUZZER=0;</b></p><p><b> }&l
61、t;/b></p><p><b> }</b></p><p> //DS18B20讀取溫度</p><p> void gettemp()</p><p><b> { </b></p><p> init1820();</p><p
62、> write1820(0xcc);</p><p> write1820(0x44);</p><p> init1820();</p><p> write1820(0xcc);</p><p> write1820(0xbe);</p><p> templ=read1820();//低8位(其
63、中的第四位是小數(shù)點(diǎn)后的)</p><p> temph=read1820();//高8位(其中前五位是符號(hào)值)</p><p> z=temph;//把符號(hào)位留下判斷正負(fù)</p><p> k=(bit)(z>>7);</p><p> if(k==1) //負(fù)數(shù)就取反加一</p><p>
64、; { templ=~templ;</p><p> templ=templ+1;</p><p> temph=~temph;</p><p><b> }</b></p><p><b> else</b></p><p> {templ=templ;&l
65、t;/p><p> temph=temph;}</p><p><b> n=templ;</b></p><p><b> y=n&0x01;</b></p><p> t7=y*0.0625;</p><p><b> n>>=1;&l
66、t;/b></p><p> y=n&0x01;//小數(shù)點(diǎn)最后的數(shù)</p><p> t4=y* 0.125;</p><p><b> n>>=1;</b></p><p><b> y=n&0x01;</b></p><p>
67、t5=y* 0.25;</p><p><b> n>>=1;</b></p><p><b> y=n&0x01;</b></p><p><b> t6=y*0.5;</b></p><p> tt=t4+t5+t6+t7;</p>
68、<p> init1820();</p><p> tp=temph*256+templ;</p><p> temperature=tp;</p><p><b> tp=tp>>4;</b></p><p><b> }</b></p><p
69、><b> //1820初始化</b></p><p> void init1820()</p><p><b> {</b></p><p> DQ = 1; _nop_();</p><p> DQ = 0; </p><p> delay_u
70、s(125); //延時(shí)510us,</p><p> delay_us(125);</p><p> DQ = 1; </p><p> delay_us(15); </p><p> while(DQ) </p><p> { _nop_(); }</p><p&
71、gt; delay_us(60); </p><p> DQ = 1; </p><p><b> }</b></p><p> //******write********</p><p> void write1820(unchar a)</p><p><b>
72、 {</b></p><p><b> unchar i;</b></p><p> for(i=0;i<8;i++)</p><p> {if(a & 0x01) //低位在前;</p><p> {DQ = 0; </p><p> _nop_();
73、_nop_();_nop_();</p><p> DQ = 1; } </p><p><b> else</b></p><p> DQ = 0; </p><p> _nop_();_nop_();_nop_(); </p><p> delay_us(30); &l
74、t;/p><p> DQ = 1; </p><p> _nop_(); </p><p><b> a >>= 1;</b></p><p><b> }</b></p><p><b> }</b></p&
75、gt;<p> //*******read************</p><p> unsigned char read1820(void)</p><p><b> {</b></p><p> unsigned char i;</p><p> unsigned char tmp=0;<
76、;/p><p> DQ = 1; _nop_(); </p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p> tmp >>= 1; </p><p> DQ = 0; </p><
77、p> _nop_(); </p><p> DQ = 1; </p><p> delay_us(2); </p><p><b> _nop_();</b></p><p> if(DQ) </p><p> tmp |= 0x80;</p&
78、gt;<p> delay_us(30); </p><p> DQ = 1; _nop_(); </p><p><b> }</b></p><p> return tmp; }</p><p> void delay_us(unchar a)</p><p>
79、;<b> {</b></p><p> while(--a);</p><p><b> }</b></p><p> void delay_ms(unchar a)</p><p><b> {</b></p><p> unchar i
80、,j;</p><p> for(i=0;i<a;i++)</p><p> for(j=0;j<200;j++)</p><p><b> {</b></p><p><b> _nop_();</b></p><p><b> _nop_(
81、);</b></p><p><b> }</b></p><p> } </p><p><b> 6.總結(jié)</b></p><p> 1)在編寫(xiě)程序的過(guò)程中,遇到一些C語(yǔ)言的語(yǔ)法問(wèn)題,需要查找資料或者咨詢(xún)同學(xué)才能完成。</p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 傳感器課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 課程設(shè)計(jì)---數(shù)字溫度計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 課程設(shè)計(jì)---數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)的課程設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (2)
- 數(shù)字溫度計(jì)課程設(shè)計(jì) (3)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論