版權(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> 目錄</b></p><p><b> 課題要求:4</b></p><p><b> 1.原理分析4</b></p><p><b> 2.方案選擇4</b></p><p><b> 3.元器件選擇
2、5</b></p><p><b> 3.1單片機(jī)5</b></p><p> 3.2溫度傳感器7</p><p><b> 3.3 顯示屏8</b></p><p><b> 3.4 蜂鳴器9</b></p><p>&l
3、t;b> 3.5其他元件9</b></p><p> 4.proteus原理圖繪制9</p><p><b> 4.1設(shè)計(jì)步驟9</b></p><p> 4.2 設(shè)計(jì)過(guò)程9</p><p> 4.2.1單片機(jī)系統(tǒng)模塊10</p><p> 4.2.2晶體振
4、蕩模塊10</p><p> 4.2.3揚(yáng)聲器報(bào)警模塊11</p><p> 4.2.4溫度傳感器模塊12</p><p> 4.2.5液晶顯示模塊13</p><p><b> 5.綜合調(diào)試16</b></p><p><b> 6.總結(jié)17</b>&
5、lt;/p><p><b> 附錄118</b></p><p><b> 附錄221</b></p><p><b> 附錄323</b></p><p><b> 附錄424</b></p><p> 基于數(shù)字溫度
6、傳感器的數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告</p><p><b> 課題要求:</b></p><p> 利用數(shù)字溫度傳感器DS18B20與單片機(jī)結(jié)合來(lái)測(cè)量溫度。利用數(shù)字溫度傳感器DS18B20測(cè)量溫度信號(hào),計(jì)算后在LED數(shù)碼管上顯示相應(yīng)的溫度值。其溫度測(cè)量范圍為?55℃~125℃,精確到0.5℃。數(shù)字溫度計(jì)所測(cè)量的溫度采用數(shù)字顯示,控制器使用單片機(jī)AT89C51,測(cè)溫傳感器使
7、用DS18B20,,實(shí)現(xiàn)溫度顯示。</p><p><b> 1. 原理分析 </b></p><p> 采用AT89C51單片機(jī)作為控制核心對(duì)溫度傳感器DS18B20控制,讀取溫度信號(hào)并進(jìn)行計(jì)算處理,并送數(shù)碼管顯示。</p><p> 采用數(shù)字溫度芯片 DS18B20 測(cè)量溫度,輸出信號(hào)全數(shù)字化。便于單片機(jī)處理及控制,省去傳統(tǒng)的測(cè)溫方法
8、的很多外圍電路。且該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測(cè)溫元件,此元件線(xiàn)形較好。在0—100攝氏度時(shí),最大線(xiàn)形偏差小于1攝氏度。DS18B20的最大特點(diǎn)之一采用了單總線(xiàn)的數(shù)據(jù)傳輸,由數(shù)字溫度計(jì) DS18B20 和微控制芯片AT89C51 構(gòu)成的溫度測(cè)量裝置,它直接輸出溫度的數(shù)字信號(hào),可直接與計(jì)算機(jī)連接。這樣,測(cè)溫系統(tǒng)的結(jié)構(gòu)就比較簡(jiǎn)單,體積也不大。采用AT89C51 單片機(jī)控制,軟件編程的自由度大,可通過(guò)編程實(shí)現(xiàn)各種各樣的算術(shù)算法和邏輯
9、控制而且體積小,硬件實(shí)現(xiàn)簡(jiǎn)單,安裝方便。用 AT89C51 芯 片 控 制 溫 度 傳 感 器DS18B20 進(jìn)行實(shí)時(shí)溫度檢測(cè)并顯示,能夠?qū)崿F(xiàn)快速測(cè)量環(huán)境溫度,并可以根據(jù)需要設(shè)定上下限報(bào)警溫度。該系統(tǒng)擴(kuò)展性非常強(qiáng),它可以在設(shè)計(jì)中加入時(shí)鐘芯片 DS1302以獲取時(shí)間數(shù)據(jù),在數(shù)據(jù)處理同時(shí)顯示時(shí)間,并可以利用 AT24C16 芯片作為存儲(chǔ)器件,以此來(lái)對(duì)某些時(shí)間點(diǎn)的溫度數(shù)據(jù)進(jìn)行存儲(chǔ),利用鍵盤(pán)來(lái)進(jìn)行調(diào)時(shí)和溫度查詢(xún),獲得的數(shù)據(jù)可以通過(guò) MAX232
10、 芯片與計(jì)算機(jī)的 </p><p><b> ?、?方案選擇 </b></p><p> 按照系統(tǒng)設(shè)計(jì)功能的要求,確定系統(tǒng)由3個(gè)大的模塊組成:主控制器、測(cè)溫電路和顯示電路。由AT89C51單片機(jī)組成硬件設(shè)計(jì),AT89C51的EA接高電平,其外圍電路提供能使之工作的晶振脈沖、復(fù)位按鍵,四個(gè)I/O分別接8路的單列IP座方便與外圍設(shè)備連接。 當(dāng)AT89C51芯片接到來(lái)自
11、溫度傳感器的信號(hào)時(shí),其內(nèi)部程序?qū)⒏鶕?jù)信號(hào)的類(lèi)型進(jìn)行處理,并且將處理的結(jié)果送到顯示模塊,發(fā)送控制信號(hào)控制各模塊。 </p><p><b> ⒊ 元器件選擇 </b></p><p><b> 3.1單片機(jī)</b></p><p> AT89C51芯片:</p><p> AT89C51是一個(gè)
12、低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K的可反復(fù)擦寫(xiě)的FLASH只讀存儲(chǔ)器和128 BYTES的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器,40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口。AT89C51可以按照常規(guī)方法進(jìn)行編程,也可以在線(xiàn)編程。器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,其將通用的
13、微處理器和Flash存儲(chǔ)器結(jié)合在一起,特別是可反復(fù)擦寫(xiě)的Flash存儲(chǔ)器可有效地降低開(kāi)發(fā)成本。內(nèi)置功能強(qiáng)大的微型計(jì)算機(jī)的AT89C51提供了高性?xún)r(jià)比的解決方案。</p><p><b> 主要特性:</b></p><p> ·與MCS-51 兼容</p><p> ·4K字節(jié)可編程FLASH存儲(chǔ)器</p>
14、<p> ·壽命:1000寫(xiě)/擦循環(huán)</p><p> ·數(shù)據(jù)保留時(shí)間:10年</p><p> ·全靜態(tài)工作:0Hz-24MHz</p><p> ·三級(jí)程序存儲(chǔ)器鎖定</p><p> ·128×8位內(nèi)部RAM</p><p>
15、·32可編程I/O線(xiàn)</p><p> ·兩個(gè)16位定時(shí)器/計(jì)數(shù)器</p><p><b> ·5個(gè)中斷源</b></p><p><b> ·可編程串行通道</b></p><p> ·低功耗的閑置和掉電模式</p><
16、p> ·片內(nèi)振蕩器和時(shí)鐘電路</p><p><b> 管腳說(shuō)明:</b></p><p> VCC: 供電電壓。</p><p><b> GND: 接地。</b></p><p> P0: P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳
17、第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。</p><p> P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于
18、內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。</p><p> P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出
19、地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。</p><p> P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</
20、p><p> P3.0 RXD(串行輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 /INT0(外部中斷0)</p><p> P3.3 /INT1(外部中斷1)</p><p> P3.4 T0(計(jì)時(shí)器0外部輸入)</p><p> P3.5 T
21、1(計(jì)時(shí)器1外部輸入)</p><p> P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)選通)</p><p> P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通)</p><p> P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p> /EA/VPP: 當(dāng)/EA保持低電平時(shí),則在此期間外部程序存儲(chǔ)器(0000H-FFFFH),不管是否有內(nèi)部
22、程序存儲(chǔ)器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲(chǔ)器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。</p><p> XTAL2:來(lái)自反向振蕩器的輸出。</p><p><b> 振蕩器特性:</b
23、></p><p> XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過(guò)一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無(wú)任何要求,但必須保證脈沖的高低電平要求的寬度。</p><p><b> 3.2溫度傳感器</b></
24、p><p><b> DS18B20:</b></p><p> DS18B20 封裝圖</p><p> DS18B20是美國(guó)DALLAS半導(dǎo)體公司繼DS1820之后最新推出的一種改進(jìn)型智能溫度傳感器。與傳統(tǒng)的熱敏電阻相比,它能夠直接讀出被測(cè)溫度并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式??梢苑謩e在93.75 ms和75
25、0 ms內(nèi)完成9位和12位的數(shù)字量,并且從DS18B20讀出的信息或?qū)懭隓S18B20的信息僅需要一根口線(xiàn)(單線(xiàn)接口)讀寫(xiě),溫度變換功率來(lái)源于數(shù)據(jù)總線(xiàn),總線(xiàn)本身也可以向所掛接的DS18B20供電,而無(wú)需額外電源。因而使用DS18B20可使系統(tǒng)結(jié)構(gòu)更趨簡(jiǎn)單,可靠性更高。他在測(cè)溫精度、轉(zhuǎn)換時(shí)間、傳輸距離、分辨率等方面較DS1820有了很大的改進(jìn),給用戶(hù)帶來(lái)了更方便的使用和更令人滿(mǎn)意的效果。 以下是DS18B20的特點(diǎn): </p>
26、;<p> (1)獨(dú)特的單線(xiàn)接口方式:DS18B20與微處理器連接時(shí)僅需要一條口線(xiàn)即可實(shí)現(xiàn)微處理器與DS18B20的雙向通訊。 </p><p> (2)在使用中不需要任何外圍元件。 </p><p> (3)可用數(shù)據(jù)線(xiàn)供電,電壓范圍:+3.0~ +5.5 V。 </p><p> (4)測(cè)溫范圍:-55 - +125 ℃。固有測(cè)溫分辨率為
27、0.5 ℃。 </p><p> (5)過(guò)編程可實(shí)現(xiàn)9-12位的數(shù)字讀數(shù)方式。 </p><p> (6)用戶(hù)可自設(shè)定非易失性的報(bào)警上下限值。 </p><p> (7)支持多點(diǎn)組網(wǎng)功能,多個(gè)DS18B20可以并聯(lián)在惟一的三線(xiàn)上,實(shí)現(xiàn)多點(diǎn)測(cè)溫。 </p><p> (8)負(fù)壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工
28、作。</p><p><b> 3.3 顯示屏 </b></p><p> LCD1602液晶顯示屏:</p><p> 同時(shí)顯示攝氏溫度與華氏溫度。</p><p><b> 管腳分布:</b></p><p><b> 3.4 蜂鳴器</b>
29、;</p><p><b> 實(shí)現(xiàn)報(bào)警振鈴音。</b></p><p><b> 3.5其他元件</b></p><p> 電容(30pf,10uf)、電阻(4.7k,8.2k)、三極管(8550)、晶振(12MHZ)、按鍵、杜邦線(xiàn)、排針若干,萬(wàn)能板。</p><p> ?、?proteus原
30、理圖繪制 </p><p><b> 4.1設(shè)計(jì)步驟</b></p><p> 1.使用proteus 軟件畫(huà)出原理圖</p><p> 2.使用keil軟件</p><p><b> 1)建立工程</b></p><p> 2)為工程選擇目標(biāo)器件</p>
31、;<p> 3)設(shè)置工程的配置參數(shù)</p><p><b> 4) 打開(kāi)程序文件</b></p><p><b> 5)編輯和鏈接工程</b></p><p> 6)糾正程序中的書(shū)寫(xiě)和錯(cuò)誤并重新建立鏈接</p><p><b> 7)生成hex文件</b>
32、;</p><p> 3.使用proteus軟件進(jìn)行仿真</p><p><b> 4.2 設(shè)計(jì)過(guò)程</b></p><p><b> 硬件接線(xiàn)圖見(jiàn)附錄4</b></p><p> 4.2.1單片機(jī)系統(tǒng)模塊</p><p> 4.2.2晶體振蕩模塊</p>
33、;<p> 晶振電路是提供系統(tǒng)時(shí)鐘信號(hào)。為了各部分的同步應(yīng)當(dāng)引入公用的外部脈沖信號(hào)作為振蕩脈沖。電容選擇在10~30pF之間,因?yàn)殡娙莸拇笮∮绊懻袷幤髡袷幍姆€(wěn)定性和起振的速度。電容C1和C2的作用是穩(wěn)定頻率和快速起振,晶振CYS的振蕩頻率取12MHZ。</p><p> 89C51單片機(jī)的時(shí)鐘信號(hào)通常有兩種方式產(chǎn)生,外部時(shí)鐘和內(nèi)部時(shí)鐘方式,如下圖所示:</p><p>
34、 4.2.3揚(yáng)聲器報(bào)警模塊</p><p> 系統(tǒng)設(shè)有一定的溫度范圍,當(dāng)系統(tǒng)檢測(cè)到的溫度不在預(yù)設(shè)的范圍時(shí),則需發(fā)出報(bào)警,警報(bào)系統(tǒng)由PNP三極管和蜂鳴器組成。</p><p> 4.2.4溫度傳感器模塊</p><p> DS18B20溫度傳感器是美國(guó)DALLAS半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,
35、并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)9~12位的數(shù)字值讀數(shù)方式。</p><p> 4.2.5液晶顯示模塊</p><p><b> 硬件連線(xiàn)圖:</b></p><p><b> 指令:</b></p><p> 1)Clear display 清顯示</p><p&g
36、t;<b> 指令碼:</b></p><p> 清顯示指令將空位字符碼20H 送入全部DDRAM 地址中,使DDRAM 中的內(nèi)容全部清除,顯示消失;地址計(jì)數(shù)器AC=0,自動(dòng)增1 模式;顯示歸位,光標(biāo)或者閃爍回到原點(diǎn)(顯示屏左上角);但并不改變移位設(shè)置模式。</p><p> 2)Return home 歸位</p><p><b&
37、gt; 指令碼:</b></p><p> 歸位指令置地址計(jì)數(shù)器AC=0;將光標(biāo)及光標(biāo)所在位的字符回原點(diǎn);但DDRAM 中的內(nèi)容并不改變。</p><p> 3)Entry mode set 設(shè)置輸入模式</p><p><b> 指令碼:</b></p><p> I/D:字符碼寫(xiě)入或者讀出DDR
38、AM 后DDRAM 地址指針AC變化方向標(biāo)志:</p><p> I/D=1,完成一個(gè)字符碼傳送后,光標(biāo)右移,AC自動(dòng)加1;</p><p> I/D=0,完成一個(gè)字符碼傳送后,光標(biāo)左移,AC自動(dòng)減1;</p><p><b> S:顯示移位標(biāo)志:</b></p><p> S=1,將全部顯示向右(I/D=0)或
39、者向左(I/D=1)移位;</p><p> S=0,顯示不發(fā)生移位;</p><p> S=1 時(shí),顯示移位時(shí),光標(biāo)似乎并不移位;此外,讀DDRAM 操作以及對(duì)CGRAM 的訪問(wèn),不發(fā)生顯示移位。</p><p> 4)Display on/off control 顯示開(kāi)/關(guān)控制</p><p><b> 指令碼:<
40、/b></p><p> D:顯示開(kāi)/關(guān)控制標(biāo)志:D=1,開(kāi)顯示;D=0,關(guān)顯示;</p><p> 關(guān)顯示后,顯示數(shù)據(jù)仍保持在DDRAM中,立即開(kāi)顯示可以再現(xiàn);</p><p> C:光標(biāo)顯示控制標(biāo)志:C=1,光標(biāo)顯示;C=0,光標(biāo)不顯示;</p><p> 不顯示光標(biāo)并不影響模塊其它顯示功能;顯示5X8 點(diǎn)陣字符時(shí),光標(biāo)在第
41、八行顯示,顯示5X10 點(diǎn)陣字</p><p> 符時(shí),光標(biāo)在第十一行顯示;</p><p> B:閃爍顯示控制標(biāo)志:B=1,光標(biāo)所指位置上,交替顯示全黑點(diǎn)陣和顯示字符,產(chǎn)生閃爍效果,F(xiàn)osc=250kHz</p><p> 時(shí),閃爍頻率為0.4ms左右;通過(guò)設(shè)置,光標(biāo)可以與其所指位置的字符一起閃爍。</p><p> 5)Curso
42、r or display shift 光標(biāo)或顯示移位</p><p><b> 指令碼:</b></p><p> 光標(biāo)或顯示移位指令可使光標(biāo)或顯示在沒(méi)有讀寫(xiě)顯示數(shù)據(jù)的情況下,向左或向右移動(dòng);運(yùn)用此指令可以實(shí)現(xiàn)顯示的查找或替換;在雙行顯示方式下,第一行和第二行會(huì)同時(shí)移位;當(dāng)移位越過(guò)第一行第四十位時(shí),光標(biāo)會(huì)從第一行跳到第二行,但顯示數(shù)據(jù)只在本行內(nèi)水平移位,第二行的顯
43、示決不會(huì)移進(jìn)第一行;倘若僅執(zhí)行移位操作,地址計(jì)數(shù)器AC的內(nèi)容不會(huì)發(fā)生改變。</p><p> 6)Function set 功能設(shè)置</p><p><b> 指令碼:</b></p><p> 功能設(shè)置指令設(shè)置模塊數(shù)據(jù)接口寬度和LCD 顯示屏顯示方式,即MPU 與模塊接口數(shù)據(jù)總線(xiàn)為4 位或者是8位、LCD 顯示行數(shù)和顯示字符點(diǎn)陣規(guī)格;所
44、以建議用戶(hù)最好在執(zhí)行其它指令設(shè)置(讀忙標(biāo)志指令除外)之前,在程序的開(kāi)始,進(jìn)行功能設(shè)置指令的執(zhí)行;</p><p> DL:數(shù)據(jù)接口寬度標(biāo)志:DL=1,8 位數(shù)據(jù)總線(xiàn)DB7~DB0;DL=0,4 位數(shù)據(jù)總線(xiàn)DB7~DB4,DB3~DB0 不用,使用此方式傳送數(shù)據(jù),需分兩次進(jìn)行;</p><p> N:顯示行數(shù)標(biāo)志:N=1,兩行顯示模式;N=0,單行顯示模式;</p><
45、;p> F:顯示字符點(diǎn)陣字體標(biāo)志:F=1:5X10點(diǎn)陣+光標(biāo)顯示模式;F=0:5X7 點(diǎn)陣+光標(biāo)顯示模式。</p><p> 7)Set CGRAM address CGRAM地址設(shè)置</p><p><b> 指令碼:</b></p><p> CGRAM 地址設(shè)置指令設(shè)置CGRAM地址指針,它將CGRAM存儲(chǔ)用戶(hù)自定義顯示字符
46、的字模數(shù)據(jù)的首地址ACG5~ACG0送入AC中,于是用戶(hù)自定義字符字模就可以寫(xiě)入CGRAM 中或者從CGRAM中讀出。</p><p> 8)Set DDRAM address DDRAM地址設(shè)置</p><p><b> 指令碼:</b></p><p> DDRAM 地址設(shè)置指令設(shè)置DDRAM 地址指針,它將DDRAM 存儲(chǔ)顯示字符的
47、字符碼的首地址ADD6~ADD0送入AC中,于是顯示字符的字符碼就可以寫(xiě)入DDRAM 中或者從DDRAM 中讀出;值得一提的是:在LCD 顯示屏一行顯示方式下,DDRAM 的地址范圍為:00H~4FH;兩行顯示方式下,DDRAM的地址范圍為:第一行00H~27H,第二行40H~67H。</p><p> Read busy flag and address 讀忙標(biāo)志BF和AC</p><p&
48、gt;<b> 指令碼:</b></p><p> 當(dāng)RS=0 和R/W=1 時(shí),在E 信號(hào)高電平的作用下,BF和AC6~AC0被讀到數(shù)據(jù)總線(xiàn)DB7~DB0的相應(yīng)位;</p><p> BF:內(nèi)部操作忙標(biāo)志,BF=1,表示模塊正在進(jìn)行內(nèi)部操作,此時(shí)模塊不接收任何外部指令和數(shù)據(jù),直到BF=0為止;</p><p> AC6~AC0:地址計(jì)
49、數(shù)器AC 內(nèi)的當(dāng)前內(nèi)容,由于地址計(jì)數(shù)器AC 被CGROM、CGRAM和DDRAM的公用指針,因此當(dāng)前AC 內(nèi)容所指區(qū)域由前一條指令操作區(qū)域決定;同時(shí),只有BF=0 時(shí),送到DB7~DB0 的數(shù)據(jù)AC6~AC0才有效。</p><p> 10)Write data to CGRAM or DDRAM 寫(xiě)數(shù)據(jù)到CGRAM或DDRAM</p><p><b> 指令碼:</b
50、></p><p> 寫(xiě)數(shù)據(jù)到CGRAM 或DDRAM 指令,是將用戶(hù)自定義字符的字模數(shù)據(jù)寫(xiě)到已經(jīng)設(shè)置好的CGRAM 的地址中,或者是將欲顯示字符的字符碼寫(xiě)到DDRAM 中;欲寫(xiě)入的數(shù)據(jù)D7~D0 首先暫存在DR 中,再由模塊的內(nèi)部操作自動(dòng)寫(xiě)入地址指針?biāo)付ǖ腃GRAM 單元或者DDRAM單元中。</p><p> 11) Read data from CGRAM or DDRA
51、M 從CGRAM或DDRAM中讀數(shù)據(jù)</p><p><b> 指令碼:</b></p><p> 從CGRAM 或DDRAM 中讀數(shù)據(jù)指令,是從地址計(jì)數(shù)器AC指定的CGRAM或者DDRAM單元中,讀出數(shù)據(jù)D7~D0;讀出的數(shù)據(jù)D7~D0 暫存在DR中,再由模塊的內(nèi)部操作送到數(shù)據(jù)總線(xiàn)DB7~DB0 上。 </p><p><b>
52、 5.綜合調(diào)試 </b></p><p> 系統(tǒng)程序主要包括主程序、讀出溫度子程序、溫度轉(zhuǎn)換子程序、計(jì)算溫度 子程序、顯示等等,由余琳玲同學(xué)編寫(xiě)。程序于附錄</p><p> 硬件方面主要由黃學(xué)然和劉星調(diào)試焊接,一開(kāi)始存在少許不易發(fā)現(xiàn)的焊點(diǎn)虛焊漏焊現(xiàn)象,導(dǎo)致顯示屏無(wú)顯示,后改正后可以得出正常顯示溫度,證明我們的課程設(shè)計(jì)實(shí)驗(yàn)初步取得成功。</p><p&
53、gt;<b> 6.總結(jié) </b></p><p> 本次課程設(shè)計(jì)經(jīng)過(guò)我們小組三個(gè)同學(xué)的齊心協(xié)力最終獲得了成功,此次實(shí)驗(yàn)中我們還有不少需要改善的地方,比如這個(gè)溫度計(jì)不能快速的反應(yīng)溫度變化,不能做到接觸測(cè)量(由于DS18B20焊接在電路板上),同時(shí)焊接技藝還沒(méi)有達(dá)到極致,美觀上略有欠缺。</p><p> 我們?cè)诜抡嬲{(diào)試中也獲得不少感悟:</p>&
54、lt;p> 畫(huà)圖的時(shí)候應(yīng)仔細(xì)連線(xiàn),線(xiàn)一旦連錯(cuò),程序無(wú)法正常運(yùn)行。程序燒寫(xiě)到單片機(jī),實(shí)物運(yùn)行不能顯示正常結(jié)果,要認(rèn)真檢查仿真圖的連線(xiàn)正確與否以及焊接電路是否出現(xiàn)虛焊、漏焊,元器件是否錯(cuò)放。</p><p><b> 附錄1</b></p><p><b> C語(yǔ)言程序</b></p><p> #include
55、<reg51.h></p><p> #include<intrins.h></p><p> #include"18b20.h" //18b20頭文件</p><p> #include"1602.h" //18b20頭文件</p><p><b> //宏定
56、義</b></p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p><b> //定義變量</b></p><p> uint bw,sw,gw;</p><p> uc
57、har table[]="0123456789";</p><p> uchar alarm[]=" Alarm ";</p><p> uchar j; //1602顯示的字符個(gè)數(shù)</p><p> long int tem,tem1; //tem為攝氏溫度,tem1為華氏溫度,baojing為警報(bào)溫度
58、值</p><p> long int baojing=38; </p><p> sbit speaker=P1^0;</p><p> void beep(); //函數(shù)聲明蜂鳴器函數(shù)</p><p> void display(void)//18b20顯示攝氏溫度</p><p><
59、b> {EX0=0;</b></p><p> tem=duqu_wendu();</p><p> if(tem>baojing)</p><p><b> { beep();</b></p><p><b> }</b></p><p>
60、 bw=tem/10;</p><p> sw=tem%10;</p><p> write1602(0x80+0x00);</p><p> read1602(table[bw]);</p><p> write1602(0x80+0x01); </p><p> read1602(table[sw]
61、);</p><p> write1602(0x80+0x02);</p><p> read1602(0xdf);</p><p> write1602(0x80+0x03);</p><p> read1602('C'); </p><p> write1602(0x80+0x04);&l
62、t;/p><p> read1602(' ');</p><p><b> EX0=1;</b></p><p><b> }</b></p><p> void display1(void)//18b20顯示華氏溫度</p><p><b>
63、 { EX0=0;</b></p><p> tem1=duqu_wendu()*1.8+32;</p><p> if(tem1>(baojing*1.8+32))</p><p><b> {beep();</b></p><p><b> }</b></p&g
64、t;<p> bw=tem1/100;</p><p> sw=(tem1%100)/10;</p><p> gw=tem1%10;</p><p> write1602(0x80+0x0b);</p><p> read1602(table[bw]);</p><p> write1602
65、(0x80+0x0c); </p><p> read1602(table[sw]);</p><p> write1602(0x80+0x0d);</p><p> read1602(table[gw]);</p><p> write1602(0x80+0x0e);</p><p> read1602
66、(0xdf);</p><p> write1602(0x80+0x0f);</p><p> read1602('F'); </p><p><b> EX0=1;</b></p><p><b> }</b></p><p> void disp
67、laybaojing(void)//顯示報(bào)警溫度值</p><p><b> { </b></p><p> bw=baojing/100;</p><p> sw=baojing/10;</p><p> gw=baojing%10;</p><p> write1602(0x80+
68、0x4b);</p><p> read1602(table[bw]);</p><p> write1602(0x80+0x4c); </p><p> read1602(table[sw]);</p><p> write1602(0x80+0x4d);</p><p> read1602(table
69、[gw]);</p><p> write1602(0x80+0x4e);</p><p> read1602(0xdf);</p><p> write1602(0x80+0x4f);</p><p> read1602('C'); </p><p><b> }</b>
70、;</p><p> void xianshi() //1602顯示 alarm</p><p><b> { </b></p><p><b> int i;</b></p><p> write1602(0x80+0x40);</p><p> for(i=
71、0;i<=9;i++)</p><p><b> {</b></p><p> read1602(alarm[i]);</p><p> delayms(5);</p><p><b> }</b></p><p><b> }</b>&
72、lt;/p><p> void beep(void) //蜂鳴器子程序</p><p><b> { </b></p><p><b> uchar i;</b></p><p> for(i=0;i<=100;i++)</p><p><b>
73、{</b></p><p> speaker=1;</p><p> delayus(80);</p><p> speaker=0;</p><p> delayus(80);</p><p><b> }</b></p><p><b>
74、 }</b></p><p> void startinterrupt(void)</p><p><b> { </b></p><p> TMOD=0x01; //T0模式1定時(shí)</p><p> TH0=0xD8; //裝入初值,定時(shí)20ms</p><p><
75、;b> TL0=0xF0;</b></p><p> IT0=1; //外部中斷0為邊沿觸發(fā)方式</p><p> EA=1; //中斷允許總控制位</p><p> EX0=1; //外部中斷0允許</p><p><b> EX1=1;</b></p><
76、p> ET0=1; //定時(shí)器0允許中斷</p><p><b> ET1=1;</b></p><p> TR0=1; //啟動(dòng)定時(shí)器0</p><p><b> }</b></p><p> void main()</p><p><b>
77、; { </b></p><p> inte1602();//1602初始化</p><p> xianshi();</p><p> displaybaojing();</p><p> delayms(1000);</p><p> startinterrupt(); </p&g
78、t;<p> while(1){}</p><p><b> }</b></p><p> void timeer(void) interrupt 1 //定時(shí)器0處理函數(shù)</p><p><b> {</b></p><p><b> TR0=0;</b
79、></p><p> TH0=0xD8; //裝入初值,定時(shí)20ms</p><p><b> TL0=0xF0;</b></p><p> display();//18B20顯示 </p><p> display1();</p><p> TR0=1; //啟動(dòng)定時(shí)器計(jì)
80、數(shù)</p><p><b> }</b></p><p> 附錄2 /*******18b20時(shí)序*********/</p><p> #include<intrins.h></p><p> #define uchar unsigned char</p><p> #d
81、efine uint unsigned int</p><p> sbit DQ=P3^6;</p><p> uint temp;</p><p> float f_temp;//單精度實(shí)行</p><p><b> //延時(shí)函數(shù)</b></p><p> void delayus(u
82、int us)</p><p><b> {</b></p><p> while(us--);</p><p><b> }</b></p><p> //18B20初始化</p><p> void inte_18b20(void)</p><
83、;p><b> {</b></p><p> unsigned char x=0; </p><p><b> DQ=1;</b></p><p> delayus(8);</p><p><b> DQ=0;</b></p><p&g
84、t; delayus(80);</p><p><b> DQ=1;</b></p><p> delayus(14);</p><p><b> x=DQ;</b></p><p> delayus(20);</p><p><b> DQ=1;<
85、;/b></p><p><b> }</b></p><p> //18B20寫(xiě)一字節(jié)</p><p> void write_18b20(uchar dat)</p><p><b> {</b></p><p> uchar i=0;</p>
86、;<p> for(i=0;i<8;i++)</p><p><b> {</b></p><p><b> DQ=0; </b></p><p> DQ=dat&0x01;</p><p> delayus(10); </p><p>
87、;<b> DQ=1;</b></p><p> dat=dat>>1; //右移以一位℃ = (οF - 32) / 1.8</p><p><b> }</b></p><p> delayus(8);</p><p><b> }</b>&
88、lt;/p><p> //18B20讀一字節(jié)</p><p> uint read_18b20()</p><p><b> {</b></p><p> uchar i=0,dat=0;</p><p> for(i=0;i<8;i++)</p><p>&l
89、t;b> {</b></p><p> DQ=0;//給脈沖信號(hào)</p><p> dat=dat>>1;</p><p><b> DQ=1;</b></p><p><b> if(DQ)</b></p><p> dat|=0x
90、80;</p><p> delayus(8);</p><p><b> }</b></p><p> return(dat);</p><p><b> }</b></p><p> while(!DQ);</p><p> inte_
91、18b20();</p><p> write_18b20(0xcc);</p><p> write_18b20(0xbe);//讀暫存器</p><p> a=read_18b20();//讀取溫度低位</p><p> b=read_18b20();//讀取溫度高位</p><p><b>
92、 temp=b;</b></p><p><b> temp<<=8;</b></p><p> temp=temp|a;</p><p><b> if(b>127)</b></p><p><b> {</b></p>&
93、lt;p> temp=~temp+1;</p><p><b> }</b></p><p> f_temp=temp*0.0625;</p><p> temp=f_temp+0.5;</p><p> return temp;</p><p><b> } <
94、/b></p><p> 附錄3 /***********1602時(shí)序***************/</p><p> #include<intrins.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p
95、><p> sbit rw=P2^1;// 讀 寫(xiě)選擇段</p><p> sbit rs=P2^0;//數(shù)據(jù)/命令控制端</p><p> sbit e=P2^2;//使能型號(hào)段</p><p> void delayms(uint w)//延時(shí)函數(shù)定義</p><p><b> {</b
96、></p><p><b> uchar q;</b></p><p> while(w--)</p><p> for(q=0;q<120;q++);</p><p><b> }</b></p><p> void write1602(uchar c
97、om)//寫(xiě)命令</p><p><b> {</b></p><p><b> rs=0;</b></p><p><b> rw=0;</b></p><p><b> e=0;</b></p><p> // del
98、ayms(1);</p><p><b> P0=com;</b></p><p> delayms(1);//while(P0&0X80);</p><p><b> e=1;</b></p><p> delayms(1);</p><p><b&
99、gt; e=0;</b></p><p><b> }</b></p><p> void read1602(uchar dat)//寫(xiě)數(shù)據(jù)</p><p><b> {</b></p><p><b> rs=1;</b></p><
100、p><b> rw=0;</b></p><p><b> e=0;</b></p><p> //delayms(1);</p><p><b> P0=dat;</b></p><p> delayms(1);</p><p>&l
101、t;b> e=1;</b></p><p> delayms(1);</p><p><b> e=0;</b></p><p><b> }</b></p><p> void inte1602()//運(yùn)行時(shí)序函數(shù)定義</p><p><b
102、> {</b></p><p> rs=0;rw=0;e=0;//關(guān)閉使能信號(hào)</p><p> write1602(0x38);//</p><p> write1602(0x0c);</p><p> write1602(0x06);</p><p> write1602(0x01);
溫馨提示
- 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ì)
- 基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)----溫度傳感器
- 溫度傳感器課程設(shè)計(jì)
- 溫度傳感器課程設(shè)計(jì)報(bào)告
- 溫度傳感器課程設(shè)計(jì)報(bào)告
- 溫度傳感器課程設(shè)計(jì)報(bào)告
- 溫度傳感器課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)課程設(shè)計(jì)報(bào)告
- 單片機(jī)數(shù)字傳感器課程設(shè)計(jì)-- 溫度控制器
- 溫度課程設(shè)計(jì)報(bào)告書(shū)--溫度傳感器
- 傳感器課程設(shè)計(jì)論文
- 模電溫度傳感器課程設(shè)計(jì)
- 傳感器課程設(shè)計(jì)---半導(dǎo)體溫度傳感器應(yīng)用設(shè)計(jì)
- 基于89c52的數(shù)字溫度傳感器設(shè)計(jì)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于數(shù)字溫度傳感器的數(shù)字溫度計(jì)報(bào)告
- 傳感器課程設(shè)計(jì)--基于ad590溫度傳感器的溫度系統(tǒng)的設(shè)計(jì)
- 傳感器課程設(shè)計(jì)--利用集成溫度傳感器ad590設(shè)計(jì)電阻溫度計(jì)
- 傳感器課程設(shè)計(jì)
- 傳感器課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論