版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 電子信息工程實驗教學中心</p><p> 《電子技術課程設計》設計報告</p><p> 完成日期:2014年6月22號</p><p> 設計題目數(shù)字式溫度計的設計</p><p> 年級專業(yè)學 號姓 名成 績</p><p> 2011電子信息工程</p>&
2、lt;p> 2011電子信息工程2</p><p> 2011電子信息工程</p><p> 評語:</p><p><b> 目錄</b></p><p><b> 目錄1</b></p><p><b> ⒈原理分析1</b><
3、/p><p><b> ⒉方案選擇2</b></p><p> ?、?電路原理圖繪制及仿真(Mutilsim)3</p><p> ?、?PCB圖(protel)繪制5</p><p><b> 5.綜合調(diào)試6</b></p><p> 6.課程設計體會11<
4、;/p><p> 原理分析 (小組所有成員共同完成)</p><p> DS18B20是一種數(shù)字溫度傳感器,它把溫度轉換成數(shù)字量以后存貯在自身內(nèi)部,和單片機通過連接一個I/O口連接,單片機把數(shù)據(jù)讀出,然后在數(shù)碼管或者液晶屏上顯示。</p><p> 按照系統(tǒng)設計的功能和要求,確定系統(tǒng)由3個模塊組成:主控制器,測溫電路和顯示電路。</
5、p><p> 1)主控模塊AT89C52是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含4K的可反復擦寫的FLASH只讀存儲器和128 BYTES的隨機存取數(shù)據(jù)存儲器,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口。AT89C52可以按照常規(guī)方法進行編程,也可以在線編程。器件采用ATMEL公司的高密度、非易失性存儲技術生產(chǎn),兼容標準MCS-
6、51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的Flash存儲器可有效地降低開發(fā)成本。</p><p> 圖1 AT89C52引腳圖</p><p> 2)DS18B20是美國DALLAS半導體公司近年推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測溫度,
7、并可根據(jù)實際要求通過簡單的編程實現(xiàn)9-12位的數(shù)字值讀數(shù)方式,無需外加測量電路及A/D轉換器,簡化了電路;而且從DS18B20讀出或寫入信息僅需一根口線,大大降低了單片機的硬件資源占用。基于DS18B20的單片機溫度控制器具有電路簡單、可靠性高的優(yōu)點。 </p><p> 圖2 DS18B20內(nèi)部構圖</p><p><b> 性能特點</b>
8、;</p><p> ●獨特的單線接口僅需要一個端口引腳進行通信;</p><p> ●多個DS18B20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;</p><p><b> ●無須外部器件;</b></p><p> ●可通過數(shù)據(jù)線供電,電壓范圍為3.0~5.5V;</p><p>&l
9、t;b> ●零待機功耗;</b></p><p> ●溫度以9或12位數(shù)字;</p><p> ●用戶可定義報警設置;</p><p> ●報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;</p><p> ●負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作。</p>
10、<p> 3)顯示電路采用4位共陽LED數(shù)碼管,從P1口輸出段碼,列掃描用P3.0~P3.3來實現(xiàn),列驅動用9012三極管。</p><p> 方案選擇 (小組所有成員共同完成)</p><p> 圖3 方案設計框圖</p><p> 系統(tǒng)電路由電源電路、溫度信號產(chǎn)生電路、單片機控制電路和液
11、晶顯示電路等四部分組成。由兩節(jié)1.5V干電池為系統(tǒng)電路提供工作電壓。溫度信號產(chǎn)生電路采用DS18B20單總線系統(tǒng)電路,實時檢測環(huán)境溫度,并在內(nèi)部處理后產(chǎn)生數(shù)字溫度信號,輸出到單片機進行顯示處理。單片機控制電路由單片機最小系統(tǒng)電路組成,用于實時檢測并處理數(shù)字溫度信號,輸出數(shù)碼管控制命令,進而控制共陰極數(shù)碼管實時顯示當前的溫度值。本電路方案結構簡單,技術成熟,具有功能擴展空間特點。</p><p> 本數(shù)字式溫度計
12、對溫度進行實時測量并顯示,其主要功能介紹:</p><p> (1)實時測量溫度,采用DS18B20傳感器。</p><p> ?。?)采集測溫范圍為-50~+120 ℃.</p><p> ?。?)溫度精度在0.1 ℃;誤差±0.2℃以內(nèi).</p><p> ?。?)顯示模塊,采用4個LED數(shù)碼管顯示.</p>&
13、lt;p> ?。?)供電采用電池供電方式。</p><p> 至此,設計目的已全部實現(xiàn)。</p><p> ?、?電路原理圖繪制及仿真(Mutilsim) (譚海燕)</p><p><b> 1)元件型號</b></p><p> 圖4 元件清單<
14、/p><p> 2)電路原理圖及仿真結果</p><p> 圖 5 電路原理圖</p><p> 圖6 仿真結果</p><p> ?、?PCB圖(protel)繪制 (鄭冰倩)</p><p><b>
15、 1)PCB設計步驟</b></p><p> ?。?)繪制電路原理圖 </p><p> 首先將所有元件都從庫中取出來,放置在圖紙上,并且調(diào)整好位置。使用連線工具將元件連接起來,設置元件屬性。使用Tool/Annotate菜單對元件進行編號,使用電氣檢查(ERC),使用Edit/Export to Spread 菜單建立元件列表。使用Design/Create
16、Netlist 菜單建立網(wǎng)絡表,畫電路板圖。 ? </p><p><b> ?。?)繪制PCB圖</b></p><p> 使用向導,定義一個寬90mm、高70mm的單面PCB板,根據(jù)溫度計的原理圖,設計數(shù)顯溫度計的PCB圖。將原理圖的網(wǎng)絡表調(diào)入設計的單面板中,進行布局,啟動自動拉伸元 件,然后進行人工布局,布局一定要合理使線走的最短,最省。進性布線規(guī)則設定(銅
17、膜線線寬設為15mil,地線和電源線寬設為 30mil線間距設為15mil)然后進行布線,盡量使過線減少,走跨線的少,不能出現(xiàn)高亮線。</p><p><b> 2)設計原則</b></p><p> (1)注意發(fā)熱元件應該遠離熱敏元件。</p><p> 盡可能按照原理圖的元件安排對元件進行布局,信號從左邊進入、從右邊輸出,從上邊輸入、
18、從下邊輸出。 按照電路流程,安排各個功能電路單元的位置,使信號流通更加順暢和保持方向一致。</p><p> ?。?)元件放置的順序 首先放置與結構緊密配合的固定位置的元件,如電源插座、指示燈、開關和連接插件等。 再放置特殊元件,例如發(fā)熱元件、變壓器、集成電路等。 最后放置小元件,例如電阻、電容、二極管等。</p><p> ?。?)元件離電路板邊緣的距離,所有元件均應該放置在離板邊緣 3
19、mm 以內(nèi)的位置。</p><p> ?。?)銅膜線的不拐彎處應為圓角或斜角,而直角或尖角在高頻電路和布線密度高的情況下會影響電氣性能。當雙面板布線時,兩面的導線應該相互垂直、斜交或彎曲走線,避免相互平行,以減少寄生電容。</p><p> ?。?)元件布置要合理分區(qū)。元件在電路板上排列的位置要充分考慮抗電磁干擾問題。原則之一就是各個元件之間的銅膜線要盡量的短,在布局上,要把模擬電路、數(shù)字
20、電路和產(chǎn)生大噪聲的電路(繼電器、大電流開關等)合理分開,使它們相互之間的信號耦合最小。 </p><p> ?。?)屏蔽與接地:銅膜線的公共地線應該盡可能放在電路板的邊緣部分。在電路板上應該盡可能多地保留銅箔做地線,這樣可以使屏蔽能力增強。另外地線的形狀最好作成環(huán)路或網(wǎng)格狀。多層電路板由于采用內(nèi)層做電源和地線專用層,因而可以起到更好的屏蔽作用效果。</p><p><b> 3
21、)PCB圖</b></p><p> 圖7 PCB圖</p><p> 5.綜合調(diào)試 (胡星樺)</p><p><b> 1)軟件部分</b></p><p> 圖8 程序流程圖<
22、;/p><p> 主程序主要分為4大部分:初始化、讀取溫度、處理溫度、顯示溫度。</p><p><b> 初始化子程序:</b></p><p><b> 程序</b></p><p> #include<reg52.h></p><p> #includ
23、e<intrins.h></p><p> #define uint unsigned int</p><p> #define uchar unsigned char</p><p> sbit SEG1=P2^0; //段碼位1</p><p> sbit SEG2=P2^2; //段碼位2 &l
24、t;/p><p> sbit SEG3=P2^4; //段碼位3</p><p> sbit SEG4=P2^6; //段碼位4</p><p> sbit DQ1=P1^7; //傳感器1</p><p> uchar ng; //負號標志</p><p> ucha
25、r code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58,0xFF};//共陰數(shù)碼碼表</p><p> /* 0 1 2 3 4 5 6 7 8 9 C 無*/</p><p> uchar code df_Table[]= </p
26、><p><b> {</b></p><p> 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9</p><p> }; //溫度小數(shù)位對照表</p><p> uchar CurrentT = 0; //當前讀取的溫度整數(shù)部分</p><p
27、> uchar Temp_Value[]={0x00,0x00}; //從DS18B20讀取的溫度值</p><p> uchar Display_Digit[]={0,0,0,0};//待顯示的各溫度數(shù)位</p><p> bit DS18B20_IS_OK = 1; //傳感器正常</p><p><b> //延時&l
28、t;/b></p><p> //************************************************************************/</p><p> // 函數(shù): LCD_Delay()</p><p> // 描述: 延時t ms函數(shù)</p><p><b> //
29、參數(shù): t </b></p><p><b> // 返回: 無</b></p><p> // 備注: 12MHZ t=1延時時間約1ms</p><p> // 版本: 2011/01/01 First version</p><p> //****************
30、********************************************************/</p><p> void Delay_ms(unsigned int t)//延時1ms</p><p><b> {</b></p><p> unsigned int i,j;</p><p>
31、 for(i=0;i<t;i++)</p><p> for(j=0;j<120;j++)</p><p><b> ;</b></p><p><b> }</b></p><p> void Delay(uint x)</p><p><b&g
32、t; {</b></p><p> while(--x);</p><p><b> }</b></p><p> /*DS18B20的復位脈沖 主機通過拉低單總線至少480us以產(chǎn)生復位脈沖</p><p> 然后主機釋放單總線并進入接收模式 此時單總線電平被拉高</p><p
33、> DS18B20檢測到上升沿后 延時15~60us,拉低總線60~240us產(chǎn)生應答脈沖 */</p><p> uchar Init_DS18B20()</p><p><b> {</b></p><p> uchar status;</p><p> DQ1 = 1; //D
34、S18B20置高電平</p><p> Delay(8); //延時</p><p> DQ1 = 0; //DS18B20置低電平</p><p> Delay(90); //延時480us以上</p><p> DQ1 = 1; //DS18B20置高電平</p><p> Delay(8);
35、 //延時</p><p> status = DQ1;//讀狀態(tài)</p><p> Delay(100); //延時</p><p> DQ1 = 1; //DS18B20置高電平</p><p> return status;//返回狀態(tài)</p><p><b> }</b>
36、;</p><p> uchar ReadOneByte()</p><p><b> {</b></p><p> uchar i,dat=0;</p><p> DQ1 = 1;//DS18B20置高電平</p><p> _nop_();//延時</p><p&
37、gt; for(i=0;i<8;i++)</p><p><b> {</b></p><p> DQ1 = 0;//DS18B20置低電平</p><p> dat >>= 1;//右移數(shù)據(jù)</p><p> DQ1 = 1;//DS18B20置高電平</p><p>
38、; _nop_();//延時</p><p> _nop_();//延時</p><p><b> if(DQ1)</b></p><p> dat |= 0X80;</p><p> Delay(30);//延時</p><p> DQ1 = 1;//DS18B20置高電平</
39、p><p><b> }</b></p><p> return (dat); </p><p><b> }</b></p><p> void Read_Temperature()</p><p> { EA=0;//關中斷</p><p&g
40、t; if(Init_DS18B20()==1)</p><p> DS18B20_IS_OK=0;</p><p><b> else</b></p><p><b> { </b></p><p> WriteOneByte(0xcc); //跳過序列號</p>&
41、lt;p> WriteOneByte(0x44); //啟動溫度轉換</p><p> Init_DS18B20();</p><p> WriteOneByte(0xcc);//跳過序列號</p><p> WriteOneByte(0xbe);//讀取溫度寄存器</p><p> Temp_Value[0] = ReadO
42、neByte(); //溫度低8位</p><p> Temp_Value[1] = ReadOneByte();//溫度高8位</p><p> DS18B20_IS_OK=1;</p><p><b> }</b></p><p> EA=1;//開中斷</p><p><b&
43、gt; }</b></p><p> void Display_Temperature()</p><p><b> {</b></p><p> // uchar i;</p><p> uchar t = 150;//延時</p><p> ng =
44、0; //與負值標志</p><p> if((Temp_Value[1]&0xf8)==0xf8) //判斷是否為負</p><p><b> {</b></p><p> Temp_Value[1] = ~Temp_Value[1];//取反</p><p> Temp_Va
45、lue[0] = ~Temp_Value[0]+1;//取反</p><p> if(Temp_Value[0]==0x00)</p><p> Temp_Value[1]++;</p><p> ng = 1;//負號</p><p><b> }</b></p><p&g
46、t; else{ng = 0;}</p><p> Display_Digit[0] = df_Table[Temp_Value[0]&0x0f]; //查表得溫度小數(shù)部分</p><p> CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4); //溫度整數(shù)部
47、分</p><p> Display_Digit[3] = CurrentT/100; //百</p><p> Display_Digit[2] = CurrentT%100/10; //十</p><p> Display_Digit[1] = CurrentT%10; //個</p><p><b> }
48、</b></p><p> void DIS_SEG(void)</p><p><b> {</b></p><p> if(ng==1){P0=0x40;}else{P0=tab[Display_Digit[3]];} // 數(shù)碼管顯示負數(shù) 或正的百位</p><p> SEG1=0;
49、//片選百位數(shù)碼管 </p><p> Delay_ms(3); //延時3ms</p><p> SEG1=1;//關閉百位數(shù)碼管</p><p> P0=tab[Display_Digit[2]]; //溫度十位 </p><p> SEG2=0;//片選十位數(shù)碼管</p>&
50、lt;p> Delay_ms(3); //延時3ms</p><p> SEG2=1; //關閉十位數(shù)碼管</p><p> P0=(tab[Display_Digit[1]]+0x80); //溫度個位和小數(shù)點</p><p> SEG3=0;//片選個位數(shù)碼管</p><p> Delay_ms(3);
51、 //延時3ms</p><p> SEG3=1; //關閉個位數(shù)碼管</p><p> P0=tab[Display_Digit[0]]; //小數(shù)位</p><p> SEG4=0;//片選小數(shù)位數(shù)碼管</p><p> Delay_ms(3); //延時3ms</p><p>
52、SEG4=1; //關閉小數(shù)位數(shù)碼管</p><p><b> }</b></p><p> void main(void)</p><p> { uchar i,j;</p><p> Read_Temperature(); //初始化DQ1</p><p> Delay_m
53、s(1000); //延時1s</p><p> Read_Temperature(); //讀溫度</p><p> //------------------------------------</p><p> Read_Temperature(); //讀溫度</p><p> if(DS18B2
54、0_IS_OK) </p><p> Display_Temperature(); //顯示溫度處理</p><p> //------------------------------------</p><p><b> while(1)</b></p><p> { //--------
55、----在SEG上顯示溫度--------------------</p><p> for(j=0;j<25;j++){DIS_SEG();}</p><p> //--------------------溫度-----------------------</p><p><b> i++;</b></p><
56、p> if(i>5){Read_Temperature(); //讀溫度</p><p> if(DS18B20_IS_OK){Display_Temperature();} //溫度數(shù)據(jù)處理</p><p><b> i=0;</b></p><p> }//避免頻繁采集溫度<
57、;/p><p><b> }</b></p><p><b> }</b></p><p><b> 硬件調(diào)試結果</b></p><p> 圖9 硬件調(diào)試圖</p><p><b> 6.課程設計體會&
58、#160;</b></p><p> 本次的課程設計使我們進一步鞏固了書本上的知識,做到了學以致用。這是我們第二次自己動手設計的電路,通過系統(tǒng)仿真軟件protues和編譯軟件keil,使我們進一步了解了單片機的設計制作過程,其中最為困難的是軟件部分,即編程部分,我們上網(wǎng)找了好多資料,雖然經(jīng)過自己的修改,但還是有很多功能不能實現(xiàn),如溫度上下限設置。由于protues并不是很熟練,在使用的過程中有很多原
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設計--數(shù)字式溫度計
- 數(shù)字式溫度計課程論文
- 數(shù)字式溫度計的設計課程設計
- 數(shù)字儀表綜合課程設計---數(shù)字式計時溫度計
- 51單片機課程設計--簡單數(shù)字式溫度計
- 課程設計---數(shù)字溫度計
- 數(shù)字溫度計課程設計
- 數(shù)字溫度計課程設計
- 數(shù)字溫度計課程設計
- 數(shù)字溫度計課程設計
- 數(shù)字溫度計課程設計
- 課程設計-數(shù)字溫度計
- 基于ds18b20數(shù)字式溫度計課程設計
- 課程設計---數(shù)字溫度計設計
- 數(shù)字溫度計論文數(shù)字溫度計設計論文
- 單片機原理及應用課程設計---數(shù)字式溫度計的設計
- 數(shù)字溫度計課程設計 (2)
- 數(shù)字溫度計課程設計 (2)
- 數(shù)字溫度計課程設計 (2)
- 數(shù)字溫度計的課程設計
評論
0/150
提交評論