版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 電子線路CAD課程設(shè)計(jì)報(bào)告</p><p> 題 目: 環(huán)境溫度監(jiān)測(cè)系統(tǒng) </p><p> 系 部: 物理與信息工程系 </p><p> 班 級(jí): 2008級(jí)通信 4 班 </p><p> 學(xué) 號(hào):
2、 </p><p> 姓 名: </p><p> 指導(dǎo)老師: </p><p> 時(shí) 間:2010年12月20日—2010年12月26日</p><p><b> 目 錄</b></p><p&g
3、t; 一、 課程設(shè)計(jì)的要求- 1 -</p><p> 二、 電路分析- 1 -</p><p> 2.1 題目- 1 -</p><p> 2.2 原理- 2 -</p><p> 2.3 元件- 2 -</p><p> 三、 電路圖繪制- 3 -</p><p>
4、 3.1 繪制過(guò)程中出現(xiàn)的問(wèn)題- 3 -</p><p> 3.2 解決方法- 3 -</p><p> 3.3 最終電路圖- 3 -</p><p> 四、 PCB繪制- 4 -</p><p> 4.1 電路圖導(dǎo)入PCB時(shí)出現(xiàn)的問(wèn)題及解決方法- 4 -</p><p> 4.2 繪制PCB時(shí)需要
5、注意的地方- 4 -</p><p> 4.2.1 布局設(shè)計(jì)原則- 4 -</p><p> 4.2.2 布局設(shè)計(jì)的工藝要求- 4 -</p><p> 4.2.3 布線原則- 5 -</p><p> 4.2.4 布線的工藝要求- 6 -</p><p> 4.3 最終PCB圖- 7 -<
6、/p><p> 五、 熱轉(zhuǎn)印制版法- 7 -</p><p> 5.1 介紹- 7 -</p><p> 5.2 制作流程- 7 -</p><p> 5.3 制作材料及要求介紹- 8 -</p><p> 5.4 一些注意事項(xiàng)- 8 -</p><p> 六、 電路焊接與調(diào)試
7、- 9 -</p><p> 6.1 焊接- 9 -</p><p> 6.2 調(diào)試- 9 -</p><p> 6.3 調(diào)試過(guò)程中的問(wèn)題及解決方法- 9 -</p><p> 6.4 實(shí)物效果- 9 -</p><p> 七、 總 結(jié)- 10 -</p><p> 參
8、考文獻(xiàn)- 10 -</p><p><b> 課程設(shè)計(jì)的要求</b></p><p> 1.練習(xí)一般(較復(fù)雜)原理圖繪制及其PCB繪制;2.會(huì)制作點(diǎn)解電容、繼電器等的電氣圖形符號(hào)庫(kù)與對(duì)應(yīng)的封裝庫(kù);3.學(xué)習(xí)用電腦打印PCB圖的方法;4.學(xué)習(xí)熱轉(zhuǎn)印的方法制作印制電路板;5.學(xué)習(xí)使用FeCl3溶液腐蝕電路板;6.學(xué)習(xí)使用高速電鉆給印制電路板打孔的方法;7.
9、會(huì)使用酒精松香溶液保護(hù)印制電路板免氧化的方法;8.練習(xí)焊接技術(shù)。</p><p><b> 電路分析</b></p><p><b> 2.1 題目</b></p><p> 給定電路圖如下圖1所示:</p><p><b> 圖 1</b></p>&
10、lt;p><b> 2.2 原理 </b></p><p> 實(shí)驗(yàn)原理:通過(guò)由DS18B20監(jiān)測(cè)到的數(shù)據(jù),直接送到單片機(jī)P3.3,交給單片機(jī)處理數(shù)據(jù),然后通過(guò)單片機(jī)AT89S51的P0.0~P0.7經(jīng)過(guò)排阻驅(qū)動(dòng)LCD1602將數(shù)據(jù)在液晶上顯示出來(lái),把單片機(jī)AT89S51的P2.0~P2.2分別作為液晶的RS、RW、E。程序如下(附P11)</p><p>&
11、lt;b> 2.3 元件</b></p><p> 原件清單如下圖2所示:</p><p><b> 圖 2</b></p><p><b> 電路圖繪制</b></p><p> 3.1 繪制過(guò)程中出現(xiàn)的問(wèn)題</p><p> 1. 連電氣線時(shí)
12、誤用了畫(huà)線工具</p><p> 2. 放置網(wǎng)絡(luò)標(biāo)簽時(shí)誤用成放置文本工具</p><p> 3. 網(wǎng)絡(luò)標(biāo)簽放置時(shí)沒(méi)放到有電氣連接處</p><p> 4. 節(jié)點(diǎn)沒(méi)自動(dòng)放置</p><p> 5. 電解電容放反了</p><p><b> 3.2 解決方法</b></p>&
13、lt;p> 1. 將所畫(huà)的線刪掉,再選擇放置電氣線,重新放置。</p><p> 2. 將所放置的文本刪掉,點(diǎn)擊放置網(wǎng)絡(luò)便簽快捷按鈕,改名后放到有電氣連接處。</p><p> 3. 移動(dòng)網(wǎng)絡(luò)便簽,使其連接到電器線上。</p><p> 4. 點(diǎn)擊放置節(jié)點(diǎn)快捷按鈕,在需要放置節(jié)點(diǎn)的地方放置節(jié)點(diǎn)。</p><p> 5. 左鍵點(diǎn)
14、擊電解電容不放,按空格鍵使其旋轉(zhuǎn)到合適。</p><p><b> 3.3 最終電路圖</b></p><p><b> 圖 3</b></p><p><b> PCB繪制</b></p><p> 4.1 電路圖導(dǎo)入PCB時(shí)出現(xiàn)的問(wèn)題及解決方法</p>
15、<p><b> 1.沒(méi)有封裝</b></p><p><b> 解決方法:</b></p><p> 可在系統(tǒng)自帶的封裝庫(kù)里查找,看是否有使用的封裝,有則直接使用,沒(méi)有就自己見(jiàn)一個(gè)封裝庫(kù),畫(huà)出相應(yīng)的封裝。</p><p><b> 2.找不到引腳</b></p>&
16、lt;p><b> 解決方法:</b></p><p> 找不到引腳一般是沒(méi)封裝或者電氣線沒(méi)連接好,查看是否有元件沒(méi)有封裝,或運(yùn)行電器規(guī)則檢查,有錯(cuò)誤就改正。</p><p> 4.2 繪制PCB時(shí)需要注意的地方</p><p> 4.2.1 布局設(shè)計(jì)原則</p><p> 距板邊距離應(yīng)大于 5mm。&l
17、t;/p><p> 先放置與結(jié)構(gòu)關(guān)系密切的元件,如接插件、開(kāi)關(guān)、電源插座等。</p><p> 優(yōu)先擺放電路功能塊的核心元件及體積較大的元器件,再以核心元件為中心擺放周圍路元器件。</p><p> 功率大的元件擺放在利于散熱的位置上,如采用風(fēng)扇散熱,放在空氣的主流通道上;若采用傳導(dǎo)散熱,應(yīng)放在靠近機(jī)箱導(dǎo)槽的位置。</p><p> 質(zhì)量
18、較大的元器件應(yīng)避免放在板的中心,應(yīng)靠近板在機(jī)箱中的固定邊放置。</p><p> 有高頻連線的元件盡可能靠近,以減少高頻信號(hào)的分布參數(shù)和電磁干擾。</p><p> 輸入、輸出元件盡量遠(yuǎn)離。</p><p> 可調(diào)元件的布局應(yīng)便于調(diào)節(jié)。如跳線、可變電容、電位器等。</p><p> 布局應(yīng)均勻、整齊、緊湊。</p>&l
19、t;p> 去耦電容應(yīng)在電源輸入端就近放置。</p><p> 4.2.2 布局設(shè)計(jì)的工藝要求</p><p> PCB的尺寸、邊框和布線區(qū)。</p><p> PCB的尺寸應(yīng)嚴(yán)格遵守結(jié)構(gòu)的要求。</p><p> 布線區(qū)距離板邊緣應(yīng)大于5mm。</p><p> PCB的機(jī)械定位孔。</p>
20、;<p> 機(jī)械定位孔的尺寸要求如圖:</p><p><b> 圖 4</b></p><p><b> 元件放置的方向性。</b></p><p> 元件放置方向考慮布線,裝配,焊接和維修的要求后,盡量統(tǒng)一。在PCB上的元件盡量要求有統(tǒng)一的方向,有正負(fù)極型的元件也要有統(tǒng)一的方向。 </p&g
21、t;<p> 考慮實(shí)際工作環(huán)境及本身發(fā)熱等,元器件放置應(yīng)考慮散熱方面的因素。大功率 MOSFET 等元件下面可以通過(guò)敷銅來(lái)散熱,而且在這些元件的周圍盡量不要放熱敏感元件。如果功率特別大,熱量特別高,可以加散熱片進(jìn)行散熱。</p><p> PCB布局對(duì)電信號(hào)的考慮。</p><p> 高速的元件(和外界接口的)應(yīng)盡量靠近連接器。</p><p>
22、 數(shù)字電路與模擬電路應(yīng)盡量分開(kāi),最好是用地隔開(kāi)。</p><p> 元件與定位孔的間距。</p><p> 定位孔到附近通腳焊盤(pán)的距離不小于7.62 mm。</p><p> 定位孔到表貼器件邊緣的距離不小于 5.08mm。</p><p> 對(duì)于貼片元件,從定位孔圓心到貼片元件外框的最小半徑距離為5.08mm。</p>
23、<p> 4.2.3 布線原則</p><p><b> 1. 注意事項(xiàng)</b></p><p> 線應(yīng)避免銳角、直角。采用45°走線。</p><p> 相鄰層信號(hào)線為正交方向。</p><p><b> 高頻信號(hào)盡可能短。</b></p><
24、;p> 輸入、輸出信號(hào)盡量避免相鄰平行走線,最好在線間加地線,以防反饋耦合。</p><p> 雙面板電源線、地線的走向最好與數(shù)據(jù)流向一致,以增強(qiáng)抗噪聲能力。</p><p> 數(shù)字地、模擬地要分開(kāi),對(duì)低頻電路,地應(yīng)盡量采用單點(diǎn)并聯(lián)接地;高頻電路宜采用多點(diǎn)串聯(lián)接地。對(duì)于數(shù)字電路,地線應(yīng)閉合成環(huán)路,以提高抗噪聲能力。</p><p> 對(duì)于時(shí)鐘線和高頻信
25、號(hào)線要根據(jù)其特性阻抗要求考慮線寬,做到阻抗匹配。</p><p> 整塊線路板布線、打孔要均勻,避免出現(xiàn)明顯的疏密不均的情況。當(dāng)印制板的外層信號(hào)有大片空白區(qū)域時(shí),應(yīng)加輔助線使板面金屬線分布基本平衡。</p><p><b> 具體布線原則</b></p><p><b> 信號(hào)線布線</b></p>&
26、lt;p><b> 時(shí)鐘的布線</b></p><p> 時(shí)鐘線作為對(duì)EMC 影響最大的因素之一。在時(shí)鐘線應(yīng)少打過(guò)孔,盡量避免和其它信號(hào)線并行走線,且應(yīng)遠(yuǎn)離一般信號(hào)線,避免對(duì)信號(hào)線的干擾。 同時(shí)應(yīng)避開(kāi)板上的電源部分,以防止電源和時(shí)鐘互相干擾。當(dāng)一塊電路板上用到多個(gè)不同頻率的時(shí)鐘時(shí),兩根不同頻率的時(shí)鐘線不可并行走線。時(shí)鐘線還應(yīng)盡量避免靠近輸出接口,防止高頻時(shí)鐘耦合到輸出線上并沿線發(fā)射
27、出去。如果板上有專門(mén)的時(shí)鐘發(fā)生芯片,其下方不可走線,應(yīng)在其下方鋪銅,必要時(shí)還可以對(duì)其專門(mén)割地。對(duì)于很多芯片都有參考的晶體振蕩器,這些晶振下方也不應(yīng)走線,要鋪銅隔離。同時(shí)可將晶振外殼接地。</p><p> 相同屬性的一組總線,應(yīng)盡量并排走線,做到盡量等長(zhǎng)。</p><p><b> 覆銅的添加</b></p><p> 多層板內(nèi)層敷銅,要
28、用負(fù)片。外層敷銅如要完全添實(shí),不應(yīng)有一絲空隙,最好用網(wǎng)格形式敷銅,其網(wǎng)格最小不得小于0.6mm ×0.6mm,建議使用0.76mm×0.76mm的網(wǎng)格敷銅。</p><p> 4.2.4 布線的工藝要求</p><p><b> 線寬</b></p><p> 一般情況下,信號(hào)線寬為0.3mm,電源線寬為0.77mm或
29、1.27mm;線與線之間和線與焊盤(pán)之間的距離大于等于0.33mm,實(shí)際應(yīng)用中,條件允許時(shí)應(yīng)考慮加大距離;布線密度較高時(shí),可考慮(但不建議)采用IC腳間走兩根線,線的寬度為0.254mm,線間距不小于0.254mm;特殊情況下,當(dāng)器件管腳較密,寬度較窄時(shí),可按適當(dāng)減小線寬和線間距。</p><p><b> 焊盤(pán)</b></p><p> 盤(pán)的直徑比孔的直徑要大于0
30、.6mm;例如,直插式電阻、電容和集成電路等,采用盤(pán)/孔尺寸 1.6mm/0.8mm,插座、插針和二極管等,采用1.8mm/1.0mm。實(shí)際應(yīng)用中,應(yīng)根據(jù)實(shí)際元件的尺寸來(lái)定,有條件時(shí),可適當(dāng)加大焊盤(pán)尺寸;PCB板上設(shè)計(jì)的元件安裝孔徑應(yīng)比元件管腳的實(shí)際尺寸大0.2~0.4mm左右。</p><p><b> 過(guò)孔</b></p><p> 過(guò)孔盤(pán)/孔尺寸一般為1.2
31、7mm/0.7mm;當(dāng)布線密度較高時(shí),過(guò)孔尺寸可適當(dāng)減小,但不宜過(guò)小,可考慮采用1.0mm/0.6mm。</p><p> 焊盤(pán)、線、過(guò)孔的間距要求</p><p> 焊盤(pán)和過(guò)孔間距:≥ 0.3mm</p><p> 焊盤(pán)和焊盤(pán)間距:≥ 0.3mm</p><p> 焊盤(pán)和導(dǎo)線間距:≥ 0.3mm</p><p&g
32、t; 線和線間距:≥ 0.3mm</p><p><b> 密度較高時(shí):</b></p><p> 焊盤(pán)和過(guò)孔間距:≥0.254mm</p><p> 焊盤(pán)和焊盤(pán)間距:≥0.254mm</p><p> 焊盤(pán)和導(dǎo)線間距:≥0.254mm</p><p> 線和線間距:≥0.254mm&
33、lt;/p><p> 4.3 最終PCB圖</p><p><b> 圖 5</b></p><p><b> 熱轉(zhuǎn)印制版法</b></p><p><b> 5.1 介紹</b></p><p> 熱轉(zhuǎn)印制版是通過(guò)將PCB板圖打印在熱轉(zhuǎn)印紙上,然
34、后通過(guò)將帶有PCB板的圖固定在覆銅板上,通過(guò)熱加熱法將紙上碳墨擴(kuò)散到覆銅板上然后通過(guò)三氯化鐵與銅的反應(yīng)來(lái)腐蝕掉多余部分。</p><p> Cu+2FeCl3=CuCl2+2FeCl2</p><p><b> 5.2 制作流程</b></p><p> 制作流程如圖6所示:</p><p><b>
35、圖 6</b></p><p> 5.3 制作材料及要求介紹</p><p> 1、打印PCB板圖的紙用熱轉(zhuǎn)印紙,打印一般要重墨打印。</p><p> 2、加熱一般可用專門(mén)的熱轉(zhuǎn)印機(jī)加熱到160℃,也可用熨斗燙,時(shí)間長(zhǎng)短看實(shí)際情況。</p><p> 3、腐蝕銅用FeCl3溶液腐蝕,可加適當(dāng)?shù)臏厮Ч谩?lt;/p
36、><p> 4、助焊一般可用酒精和松香配置一定濃度的溶液來(lái)涂抹在腐蝕,鉆孔好的覆銅板上。</p><p> 5.4 一些注意事項(xiàng)</p><p> 1. 固定PCB板圖的時(shí)候一定要固定緊,以防止轉(zhuǎn)印時(shí)圖紙挪動(dòng)。如果是用的熨斗熱轉(zhuǎn)印,一定要讓板均勻受熱。</p><p> 2. 在腐蝕時(shí)可以適當(dāng)攪動(dòng)FeCl3溶液,或者加點(diǎn)熱水腐蝕會(huì)更快。當(dāng)
37、腐蝕好后,就不要再腐蝕了,如果再腐蝕,有可能會(huì)腐蝕掉全部的銅。所以,腐蝕好后就馬上取出來(lái)。</p><p> 3. 鉆孔時(shí),用新鉆頭比用斷了的鉆頭效果好很多,不會(huì)鉆松孔周圍的銅層。鉆頭可以離板近一點(diǎn),對(duì)準(zhǔn)后輕輕壓下即可。</p><p> 4. 涂酒精松香溶液時(shí),不要涂太多,只要全部覆蓋住就可以了,涂多了放元件時(shí)可能要先捅穿孔才能放元件。</p><p><
38、;b> 電路焊接與調(diào)試</b></p><p><b> 6.1 焊接</b></p><p> 1. 將所有的元件都擺放到桌子上,分出不同高低的元件。先焊接矮元件,再焊接更高的元件,最后焊接最高的元件。</p><p> 2. 焊接元件前先用萬(wàn)用表測(cè)試一下元件的參數(shù),再到原理圖上找到相應(yīng)的元件標(biāo)號(hào),再在PCB圖上找到
39、相應(yīng)的位置,并焊接上。</p><p> 3. 注意焊接時(shí),電烙鐵的正確使用。</p><p><b> 6.2 調(diào)試</b></p><p> 1. 首先用萬(wàn)用表測(cè)試電源輸入端的電阻,如果太小則電路焊接有問(wèn)題,不能加電測(cè)試,要檢查電路板。</p><p> 2. 用萬(wàn)用表測(cè)試電阻值合適,則可以加電測(cè)試,如果沒(méi)有
40、想象的效果,則繼續(xù)檢查電路板,PCB圖或者原理圖,直到出現(xiàn)想象中的效果。</p><p> 6.3 調(diào)試過(guò)程中的問(wèn)題及解決方法</p><p> 1. 電路直接沒(méi)任何反應(yīng)</p><p><b> 解決方法:</b></p><p> 用萬(wàn)用表測(cè)每一條線路是否連通,是否有短路的線路。甚至檢查PCB圖,原理圖。&l
41、t;/p><p><b> 2. 電容爆了</b></p><p><b> 解決方法:</b></p><p> 看電容是否接反了,沒(méi)有再換個(gè)耐壓值更高的電容。</p><p><b> 3. 三極管接反了</b></p><p><b>
42、; 解決方法:</b></p><p> 將三極管取下來(lái),測(cè)試其三個(gè)管腳的極性,再正確焊接上。</p><p><b> 6.4 實(shí)物效果</b></p><p><b> 圖 7 </b></p><p><b> 圖 8</b></p>
43、<p><b> 總 結(jié)</b></p><p> 1. 這次實(shí)訓(xùn),讓我了解了制作電路板的整個(gè)過(guò)程:首先畫(huà)原理圖,通過(guò)原理圖繪制PCB圖,再把PCB圖轉(zhuǎn)印到轉(zhuǎn)印紙上,再用轉(zhuǎn)印機(jī)或者熨斗將轉(zhuǎn)印紙上的圖轉(zhuǎn)印覆銅板上,再將覆銅板放到腐蝕液中腐蝕,腐蝕后再刷洗打孔,再涂上酒精松香溶液就可以焊接了,最后檢查和調(diào)試成功,制作過(guò)程就完成了。</p><p>
44、2. 這次實(shí)訓(xùn)讓我知道了,復(fù)雜的事情都是一步一步來(lái)完成的。要細(xì)心,踏踏實(shí)實(shí)地做好每一步,中間的一個(gè)環(huán)節(jié)有問(wèn)題都會(huì)影響后面的結(jié)果。所以,希望學(xué)校能多次開(kāi)展這樣的實(shí)訓(xùn),提高我們的制版的能力。</p><p> 3. 這次實(shí)訓(xùn)也讓我從分認(rèn)識(shí)到自己的空想與實(shí)踐的差別,認(rèn)識(shí)莫眼高手低,莫閉門(mén)造車,知識(shí)都在不斷更新和流動(dòng)之中,而扎實(shí)的基礎(chǔ)是一切創(chuàng)造的源泉,只有從本質(zhì)上理解了原理,才能更好的于疑途尋求柳暗花明,實(shí)現(xiàn)在科學(xué)界的
45、美好暢游和尋得創(chuàng)造的快樂(lè)。</p><p> 4. 最后提醒一下自己,以后在畫(huà)電路圖之前一點(diǎn)要看懂老師給的電路圖,這是后面工作的基礎(chǔ)。更何況老師給的電路圖有時(shí)候也會(huì)有錯(cuò)誤。只有看懂電路圖了,才知道哪里能修改哪里不能修改,哪里需要修改哪里不需要修改。</p><p><b> 附程序如下:</b></p><p> //DS18B20溫度檢
46、測(cè)及其液晶顯示</p><p> #include<reg51.h> //包含單片機(jī)寄存器的頭文件</p><p> #include<intrins.h> //包含_nop_()函數(shù)定義的頭文件</p><p> unsigned char code digit[10]={"0123456789"};
47、 //定義字符數(shù)組顯示數(shù)字</p><p> unsigned char code Str[]={"Test by DS18B20"}; //說(shuō)明顯示的是溫度</p><p> unsigned char code Error[]={"Error!Check!"}; //說(shuō)明沒(méi)有檢測(cè)到DS18B20</p><
48、p> unsigned char code Temp[]={"Temp:"}; //說(shuō)明顯示的是溫度</p><p> unsigned char code Cent[]={"Cent"}; //溫度單位</p><p> /********************************
49、***********************************************</p><p> 以下是對(duì)液晶模塊的操作程序</p><p> *******************************************************************************/</p><p> sbit RS=P2^
50、0; //寄存器選擇位,將RS位定義為P2.0引腳</p><p> sbit RW=P2^1; //讀寫(xiě)選擇位,將RW位定義為P2.1引腳</p><p> sbit E=P2^2; //使能信號(hào)位,將E位定義為P2.2引腳</p><p> sbit BF=P0^7; //忙
51、碌標(biāo)志位,,將BF位定義為P0.7引腳</p><p> /*****************************************************</p><p> 函數(shù)功能:延時(shí)1ms</p><p> (3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是1毫秒</p><p>
52、; ***************************************************/</p><p> void delay1ms()</p><p><b> {</b></p><p> unsigned char i,j;</p><p> for(i=0;i<4;i++)
53、</p><p> for(j=0;j<33;j++)</p><p><b> ; </b></p><p><b> }</b></p><p> /*****************************************************</p>
54、<p> 函數(shù)功能:延時(shí)若干毫秒</p><p><b> 入口參數(shù):n</b></p><p> ***************************************************/</p><p> void delaynms(unsigned char n)</p><p>
55、<b> {</b></p><p> unsigned char i;</p><p> for(i=0;i<n;i++)</p><p> delay1ms();</p><p><b> }</b></p><p> /****************
56、*************************************</p><p> 函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)</p><p> 返回值:result。result=1,忙碌;result=0,不忙</p><p> ***************************************************/</p>
57、<p> bit BusyTest(void)</p><p><b> {</b></p><p> bit result;</p><p> RS=0; //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)</p><p><b> RW=1;</b></
58、p><p> E=1; //E=1,才允許讀寫(xiě)</p><p> _nop_(); //空操作</p><p><b> _nop_();</b></p><p><b> _nop_(); </b></p><p> _nop_(); //空操作
59、四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> result=BF; //將忙碌標(biāo)志電平賦給result</p><p> E=0; //將E恢復(fù)低電平</p><p> return result;</p><p><b> }</b></p><p> /****
60、*************************************************</p><p> 函數(shù)功能:將模式設(shè)置指令或顯示地址寫(xiě)入液晶模塊</p><p> 入口參數(shù):dictate</p><p> ***************************************************/</p><
61、;p> void WriteInstruction (unsigned char dictate)</p><p><b> { </b></p><p> while(BusyTest()==1); //如果忙就等待</p><p> RS=0; //根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí)
62、,可以寫(xiě)入指令</p><p><b> RW=0; </b></p><p> E=0; //E置低電平(根據(jù)表8-6,寫(xiě)指令時(shí),E為高脈沖,</p><p> // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"</p><p><b> _
63、nop_();</b></p><p> _nop_(); //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> P0=dictate; //將數(shù)據(jù)送入P0口,即寫(xiě)入指令或地址</p><p><b> _nop_();</b></p><p>&l
64、t;b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> E=1; //E置高電平</p><p><
65、b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> E=0;
66、 //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:指定字符顯示的實(shí)際地址</p><p>
67、;<b> 入口參數(shù):x</b></p><p> ***************************************************/</p><p> void WriteAddress(unsigned char x)</p><p><b> {</b></p><p
68、> WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:將數(shù)據(jù)(字符
69、的標(biāo)準(zhǔn)ASCII碼)寫(xiě)入液晶模塊</p><p> 入口參數(shù):y(為字符常量)</p><p> ***************************************************/</p><p> void WriteData(unsigned char y)</p><p><b> {</b
70、></p><p> while(BusyTest()==1); </p><p> RS=1; //RS為高電平,RW為低電平時(shí),可以寫(xiě)入數(shù)據(jù)</p><p><b> RW=0;</b></p><p> E=0; //E置低電平(根據(jù)表8-6,寫(xiě)指令時(shí),E為
71、高脈沖,</p><p> // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"</p><p> P0=y; //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫(xiě)入液晶模塊</p><p><b> _nop_();</b></p><p><b> _nop_();</b&g
72、t;</p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> E=1; //E置高電平</p><p><b> _nop_();</b></p><
73、p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> E=0; //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令</p>&
74、lt;p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化設(shè)置</p><p> **********************************************
75、*****/</p><p> void LcdInitiate(void)</p><p><b> {</b></p><p> delaynms(15); //延時(shí)15ms,首次寫(xiě)指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間</p><p> WriteInstruction(0x38);
76、 //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口</p><p> delaynms(5); //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x38);</p><p> delaynms(5); //延時(shí)5ms ,給硬件
77、一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x38); //連續(xù)三次,確保初始化成功</p><p> delaynms(5); //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x0c); //顯示模式設(shè)置:顯示開(kāi),無(wú)光標(biāo),光標(biāo)不閃爍</p&g
78、t;<p> delaynms(5); //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x06); //顯示模式設(shè)置:光標(biāo)右移,字符不移</p><p> delaynms(5); //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p>
79、 WriteInstruction(0x01); //清屏幕指令,將以前的顯示內(nèi)容清除</p><p> delaynms(5); //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> } </b></p><p> /***************************************
80、*********************************</p><p> 以下是DS18B20的操作程序</p><p> ************************************************************************/ </p><p> sbit DQ=P3^3;</p><
81、p> unsigned char time; //設(shè)置全局變量,專門(mén)用于嚴(yán)格延時(shí)</p><p> /*****************************************************</p><p> 函數(shù)功能:將DS18B20傳感器初始化,讀取應(yīng)答信號(hào)</p><p> 出口參數(shù):flag </p><
82、;p> ***************************************************/</p><p> bit Init_DS18B20(void)</p><p><b> {</b></p><p> bit flag; //儲(chǔ)存DS18B20是否存在的標(biāo)志,flag=0,表示存在
83、;flag=1,表示不存在</p><p> DQ = 1; //先將數(shù)據(jù)線拉高</p><p> for(time=0;time<2;time++) //略微延時(shí)約6微秒</p><p><b> ;</b></p><p> DQ = 0; //再將數(shù)據(jù)線從高拉低
84、,要求保持480~960us</p><p> for(time=0;time<200;time++) //略微延時(shí)約600微秒</p><p> ; //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復(fù)位脈沖 </p><p> DQ = 1; //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) </p><
85、;p> for(time=0;time<10;time++)</p><p> ; //延時(shí)約30us(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)</p><p> flag=DQ; //讓單片機(jī)檢測(cè)是否輸出了存在脈沖(DQ=0表示存在) </p><p> for(time=0;time<2
86、00;time++) //延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢</p><p><b> ;</b></p><p> return (flag); //返回檢測(cè)成功標(biāo)志</p><p><b> }</b></p><p> /***************************
87、**************************</p><p> 函數(shù)功能:從DS18B20讀取一個(gè)字節(jié)數(shù)據(jù)</p><p><b> 出口參數(shù):dat</b></p><p> ***************************************************/ </p><p> u
88、nsigned char ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> unsigned char dat; //儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)</p><p> for (i=0;i<8;i++)</p
89、><p><b> {</b></p><p> DQ =1; // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p><p> DQ = 0; //單片機(jī)從DS18B20讀書(shū)據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序</p><p>
90、<b> dat>>=1;</b></p><p> _nop_(); //等待一個(gè)機(jī)器周期 </p><p> DQ = 1; //將數(shù)據(jù)線"人為"拉高,為單片機(jī)檢測(cè)DS18B20的輸出電平作準(zhǔn)備</p><p> for(time=0;time<2;time++)<
91、/p><p> ; //延時(shí)約6us,使主機(jī)在15us內(nèi)采樣</p><p><b> if(DQ==1)</b></p><p> dat|=0x80; //如果讀到的數(shù)據(jù)是1,則將1存入dat</p><p><b> else</b></p><p>
92、 dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat</p><p> //將單片機(jī)檢測(cè)到的電平信號(hào)DQ存入r[i]</p><p> for(time=0;time<8;time++)</p><p> ; //延時(shí)3us,兩個(gè)讀時(shí)序之間必須有大于1us的恢復(fù)期</p><p> }
93、 </p><p> return(dat); //返回讀出的十進(jìn)制數(shù)據(jù)</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:向D
94、S18B20寫(xiě)入一個(gè)字節(jié)數(shù)據(jù)</p><p><b> 入口參數(shù):dat</b></p><p> ***************************************************/ </p><p> WriteOneChar(unsigned char dat)</p><p><
95、b> {</b></p><p> unsigned char i=0;</p><p> for (i=0; i<8; i++)</p><p><b> {</b></p><p> DQ =1; // 先將數(shù)據(jù)線拉高</p><p> _n
96、op_(); //等待一個(gè)機(jī)器周期 </p><p> DQ=0; //將數(shù)據(jù)線從高拉低時(shí)即啟動(dòng)寫(xiě)時(shí)序 </p><p> DQ=dat&0x01; //利用與運(yùn)算取出要寫(xiě)的某位二進(jìn)制數(shù)據(jù),</p><p> //并將其送到數(shù)據(jù)線上等待DS18B20采樣</p><p> for
97、(time=0;time<10;time++)</p><p> ;//延時(shí)約30us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣</p><p> DQ=1; //釋放數(shù)據(jù)線 </p><p> for(time=0;time<1;time++)</p><p> ;//延時(shí)
98、3us,兩個(gè)寫(xiě)時(shí)序間至少需要1us的恢復(fù)期</p><p> dat>>=1; //將dat中的各二進(jìn)制位數(shù)據(jù)右移1位</p><p><b> }</b></p><p> for(time=0;time<4;time++)</p><p> ; //稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間&
99、lt;/p><p><b> }</b></p><p> /******************************************************************************</p><p> 以下是與溫度有關(guān)的顯示設(shè)置</p><p> *****************
100、*************************************************************/</p><p> /*****************************************************</p><p> 函數(shù)功能:顯示沒(méi)有檢測(cè)到DS18B20</p><p> ****************
101、***********************************/ </p><p> void display_error(void)</p><p><b> {</b></p><p> unsigned char i;</p><p> WriteAddress(0x00); //寫(xiě)顯示地
102、址,將在第1行第1列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示</p><p> while(Error[i] != '\0') //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)</p><p><b> {</b></p><p> Writ
103、eData(Error[i]); //將字符常量寫(xiě)入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(100); //延時(shí)100ms較長(zhǎng)時(shí)間,以看清關(guān)于顯示的說(shuō)明</p><p><b> }</b></p><p>
104、while(1) //進(jìn)入死循環(huán),等待查明原因</p><p><b> ;</b></p><p><b> }</b></p><p> /*****************************************************</p><p>
105、 函數(shù)功能:顯示說(shuō)明信息</p><p> ***************************************************/ </p><p> void display_explain(void)</p><p><b> {</b></p><p> unsigned char
106、i;</p><p> WriteAddress(0x00); //寫(xiě)顯示地址,將在第1行第1列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示</p><p> while(Str[i] != '\0') //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)</p><p><
107、;b> {</b></p><p> WriteData(Str[i]); //將字符常量寫(xiě)入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(100); //延時(shí)100ms較長(zhǎng)時(shí)間,以看清關(guān)于顯示的說(shuō)明</p><p
108、><b> }</b></p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:顯示溫度符號(hào)</p><p> ****************
109、***********************************/ </p><p> void display_symbol(void)</p><p><b> {</b></p><p> unsigned char i;</p><p> WriteAddress(0x40); //寫(xiě)顯示
110、地址,將在第2行第1列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示</p><p> while(Temp[i] != '\0') //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)</p><p><b> {</b></p><p> Writ
111、eData(Temp[i]); //將字符常量寫(xiě)入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(50); //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> }</b></p><p><b> }
112、</b></p><p> /*****************************************************</p><p> 函數(shù)功能:顯示溫度的小數(shù)點(diǎn)</p><p> ***************************************************/ </p><p&g
113、t; void display_dot(void)</p><p> { </p><p> WriteAddress(0x49); //寫(xiě)顯示地址,將在第2行第10列開(kāi)始顯示 </p><p> WriteData('.'); //將小數(shù)點(diǎn)的字符常量寫(xiě)入LCD</p><p>
114、 delaynms(50); //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:顯示溫度的單位(Cent)</p><p
115、> ***************************************************/ </p><p> void display_cent(void)</p><p><b> {</b></p><p> unsigned char i; </p><p> Wri
116、teAddress(0x4c); //寫(xiě)顯示地址,將在第2行第13列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示 </p><p> while(Cent[i] != '\0') //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)</p><p><b> {
117、</b></p><p> WriteData(Cent[i]); //將字符常量寫(xiě)入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(50); //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> }<
118、;/b></p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:顯示溫度的整數(shù)部分</p><p><b> 入口參數(shù):x</b></p&g
119、t;<p> ***************************************************/ </p><p> void display_temp1(unsigned char x)</p><p><b> {</b></p><p> unsigned char j,k,l; //j
120、,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位</p><p> j=x/100; //取百位</p><p> k=(x%100)/10; //取十位</p><p> l=x%10; //取個(gè)位 </p><p> WriteAddress(0x46); //寫(xiě)顯示地址,將在
121、第2行第7列開(kāi)始顯示</p><p> WriteData(digit[j]); //將百位數(shù)字的字符常量寫(xiě)入LCD</p><p> WriteData(digit[k]); //將十位數(shù)字的字符常量寫(xiě)入LCD</p><p> WriteData(digit[l]); //將個(gè)位數(shù)字的字符常量寫(xiě)入LCD</p><p&
122、gt; delaynms(50); //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間 </p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:顯示溫度的小數(shù)數(shù)部分</p>&l
123、t;p><b> 入口參數(shù):x</b></p><p> ***************************************************/ </p><p> void display_temp2(unsigned char x)</p><p><b> {</b></p>
124、;<p> WriteAddress(0x4a); //寫(xiě)顯示地址,將在第2行第11列開(kāi)始顯示</p><p> WriteData(digit[x]); //將小數(shù)部分的第一位數(shù)字字符常量寫(xiě)入LCD</p><p> delaynms(50); //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b&g
125、t; }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:做好讀溫度的準(zhǔn)備</p><p> ***************************************************/ </p><
126、p> void ReadyReadTemp(void)</p><p><b> {</b></p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p> WriteOneCha
127、r(0x44); // 啟動(dòng)溫度轉(zhuǎn)換 </p><p> for(time=0;time<100;time++)</p><p> ; //溫度轉(zhuǎn)換需要一點(diǎn)時(shí)間</p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)
128、的操作</p><p> WriteOneChar(0xBE); //讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高位</p><p><b> }</b></p><p> /*****************************************************</p><p><b>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)報(bào)告 (2)
- 電子線路cad課程設(shè)計(jì)
- 電子線路課程設(shè)計(jì)
- 數(shù)字電子線路課程設(shè)計(jì)報(bào)告
- 模擬電子線路課程設(shè)計(jì)報(bào)告
- 通信電子線路課程設(shè)計(jì)報(bào)告
- 電子線路cad課程設(shè)計(jì)--- 簡(jiǎn)易溫度采集控制器
- 高頻電子線路課程設(shè)計(jì)
- 高頻電子線路課程設(shè)計(jì)
- 通信電子線路課程設(shè)計(jì)
- 高頻電子線路課程設(shè)計(jì)
- 通信電子線路課程設(shè)計(jì)報(bào)告 (2)
評(píng)論
0/150
提交評(píng)論