版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 畢業(yè)論文</b></p><p> 摘要:本文介紹了一種基于PIC16F877A單片機(jī),利用DS18B20對多路溫度采集,并進(jìn)行溫度的控制與檢測,并通過12864液晶顯示出來。系統(tǒng)中通過控制按鈕實現(xiàn)了實時各路的報警溫度,并且實現(xiàn)多路與任一單路溫度顯示切換,從而既可以進(jìn)行多路的檢測又可以進(jìn)行任一單路的監(jiān)控,而且還有數(shù)字跟圖形兩種顯示方式更為直觀。在溫度超過設(shè)定溫
2、度時溫度跟時間通過24C02存儲起來,以便查看,同時可以通過固定電話遠(yuǎn)程報警,還能將溫度上傳至PC機(jī),進(jìn)行后續(xù)處理。</p><p> 關(guān)鍵詞:溫度檢測;單片機(jī);串行通訊;DS18B20;</p><p><b> 目錄</b></p><p><b> 1系統(tǒng)設(shè)計7</b></p><p&g
3、t; 2主芯片:PIC16F877A單片機(jī)簡介9</p><p> 2.1 PIC單片機(jī)的優(yōu)越之處:9</p><p> 2.2 PIC16F877A引腳圖及主要性能10</p><p> 2.3 最小系統(tǒng)11</p><p> 2.3.1復(fù)位功能11</p><p> 2.3.2 系統(tǒng)時
4、鐘12</p><p> 2.4 設(shè)計心得總結(jié)12</p><p> 3LCD12864液晶原理介紹及接口實現(xiàn)12</p><p> 3.1 液晶顯示模塊概述12</p><p> 3.2 液晶引腳說明13</p><p> 3.3 接口時序14</p><p>
5、 3.4 具體指令介紹15</p><p> 3.5 顯示坐標(biāo)關(guān)系19</p><p> 3.5.1、圖形顯示坐標(biāo)19</p><p> 3.5.2 漢字顯示坐標(biāo)20</p><p> 3.6 與單片機(jī)的接口實現(xiàn)21</p><p> 3.7設(shè)計心得總結(jié)22</p><p&
6、gt; 4DS18B20原理介紹及接口實現(xiàn)22</p><p> 4.1 DS18B20簡介22</p><p> 4.2DS18B20結(jié)構(gòu)及其工作原理23</p><p> 4.3DS18B20的接口實現(xiàn)29</p><p> 4.3.1 硬件設(shè)計29</p><p> 4.3.2 軟件設(shè)
7、計30</p><p> 4.4設(shè)計心得總結(jié)31</p><p> 4.4.1 焊接問題:31</p><p> 4.4.2 軟件設(shè)計:31</p><p> 4.4.3 不足:31</p><p> 5存儲芯片AT24C02簡單介紹及接口實現(xiàn)32</p><p>
8、5.1AT24C02功能描述管腳定義32</p><p> 5.2管腳定義及接口實現(xiàn)32</p><p> 5.3設(shè)計心得34</p><p> 6 實時時鐘DS1302簡單介紹及接口實現(xiàn)34</p><p> 6.1 DS1302簡介34</p><p> 6.2 DS1302結(jié)構(gòu)及工作原
9、理34</p><p> 6.3DS1302的接口實現(xiàn)35</p><p> 7溫度上限報警功能37</p><p> 7.1 設(shè)計原理37</p><p> 7.2 設(shè)計心得體會37</p><p> 8與PC串口通訊及VB上位機(jī)簡單介紹38</p><p> 8
10、.1 與PC串口通信38</p><p> 8.2 上位機(jī)介紹39</p><p><b> 9 總結(jié)43</b></p><p><b> 附錄44</b></p><p><b> 部分原理圖:44</b></p><p><
11、;b> 參考文獻(xiàn)45</b></p><p><b> 致謝46</b></p><p> 基于PIC單片機(jī)的多路溫度監(jiān)控巡回系統(tǒng)</p><p><b> 系統(tǒng)設(shè)計</b></p><p> 在工業(yè)生產(chǎn)和日常生活中,經(jīng)常要對溫度進(jìn)行測量與控制,并且有時是對多個點進(jìn)行
12、溫度測量,比如冷庫溫度監(jiān)控、環(huán)境溫度監(jiān)測、農(nóng)業(yè)溫室監(jiān)控、糧庫溫度監(jiān)控等。在這種情況下,多點溫度檢測系統(tǒng)應(yīng)運而生。多點溫度檢測系統(tǒng)通常能夠?qū)Χ鄠€工作點的溫度進(jìn)行檢測,顯示當(dāng)前溫度,并能夠?qū)囟冗M(jìn)行存儲和報警,還能將溫度上傳至PC機(jī),進(jìn)行后續(xù)處理。傳統(tǒng)的測溫元件有熱電偶和熱電阻,需很多硬件支持并且電路復(fù)雜。本文將設(shè)計一款由新型的數(shù)字溫度傳感器DS18B20配合單片機(jī),具有溫度檢測、顯示、存儲、自動統(tǒng)計分析及跟電腦通訊連接還利用固定電話遠(yuǎn)程報
13、警等功能的多點溫度監(jiān)控系統(tǒng)。</p><p> 圖 1.1 多路溫度監(jiān)控系統(tǒng)模擬應(yīng)用</p><p> 溫度監(jiān)控主系統(tǒng)構(gòu)架框圖如圖 1.2 所示:</p><p> 圖 1.2 多路溫度監(jiān)控系統(tǒng)構(gòu)架框圖</p><p> 圖1.3 手工焊接實物圖</p><p><b> 主要技術(shù)參數(shù)</b&
14、gt;</p><p> A溫度檢測范圍 : -55℃~+125℃</p><p> B測量精度 : 0.0625℃</p><p> C 顯示方式: LCD12864顯示</p><p> D 報警方式: 固話報警</p><p> 主芯片:PIC16F877A單片機(jī)簡介
15、</p><p> 2.1 PIC單片機(jī)的優(yōu)越之處:</p><p> (1)哈佛總線結(jié)構(gòu):</p><p> MCS-51單片機(jī)的總線結(jié)構(gòu)是馮-諾依曼型,計算機(jī) 在同一個存儲空間取指令和數(shù)據(jù),兩者不能同時進(jìn)行;而PIC單片機(jī)的總線結(jié)構(gòu)是哈佛結(jié)構(gòu),指令和數(shù)據(jù)空間是完全分開的,一個用于指令,一個用于數(shù)據(jù),由于 可以對程序和數(shù)據(jù)同時進(jìn)行訪問,所以提高了數(shù)據(jù)吞吐率
16、。正因為在 PIC單片機(jī)中采用了哈佛雙總線結(jié)構(gòu),所以與常見的微控制器不同的一點是:程序和數(shù)據(jù)總線可以采用不同的寬度。數(shù)據(jù)總線都是8位的,但指令總線位數(shù)分別位 12、14、16位。 (2)流水線結(jié)構(gòu):</p><p> MCS-51單片機(jī)的取指和執(zhí)行采用單指令流水線結(jié)構(gòu),即取一條指令,執(zhí)行完后再取下一條指令;而PIC的取指和執(zhí)行采用雙指令流水線結(jié)構(gòu),當(dāng)一條指令被執(zhí)行時,允許下一條指令同時被取出,這樣就實現(xiàn)
17、了單周期指令。 (3)寄存器組:</p><p> PIC單片機(jī)的所有寄存器,包括I/O口,定時器和程序計數(shù)器等都采用RAM結(jié)構(gòu)形式,而且都只需要一個指令周期就可以完成訪問和操作;而MCS-51單片機(jī)需要兩個或兩個以上的周期才能改變寄存器的內(nèi)容。</p><p><b> ?。?)運行速度高:</b></p><p> 由于采用了哈
18、佛總線結(jié)構(gòu),以及指令的讀取和執(zhí)行才用了流水作業(yè)方式,使得運行速度大大提高。</p><p><b> ?。?)功耗低:</b></p><p> PIC單片機(jī)的功率消耗極低,是目前世界上最低的單片機(jī)品種之一。在4MHz時鐘下工作時耗電不超過2mA,在睡眠模式下耗電可以低到1uA以下。</p><p><b> ?。?)驅(qū)動能力強(qiáng):&
19、lt;/b></p><p> I/O端口驅(qū)動負(fù)載的能力較強(qiáng),每個I/O引腳吸入和輸出電流的最大值可分別達(dá)到25mA和20mA,能夠直接驅(qū)動發(fā)光二極管LED、光電耦合器或者輕微繼電器等。</p><p><b> (7)外接電路簡潔</b></p><p> PIC單片機(jī)片內(nèi)集成了上電復(fù)位電路、I/O引腳上拉電路、看門狗定時器等,可
20、以最大程度減少或免用外接器件,以便實現(xiàn)“純單片機(jī)”應(yīng)用。這樣,不僅方便于開發(fā),而且還可節(jié)省用戶的電路空間和制作成本。</p><p><b> ?。?)程序保密性強(qiáng)</b></p><p> 目前,尚無辦法對其直接進(jìn)行解密拷貝,可以最大限度的保護(hù)用戶的程序版權(quán)。</p><p> 2.2 PIC16F877A引腳圖及主要性能</p&
21、gt;<p> PIC16F877A的詳細(xì)引腳如圖2.2-1所示。</p><p> 圖 2.2-1 PIC16F877A引腳圖 圖 2.2 -2 PIC16F877A實物圖</p><p> 主要性能參數(shù)如下所示:</p><p> 具有高性能RISC CPU</p><p><b>
22、; 僅有35條單字指令</b></p><p> 100000次擦寫周期</p><p> 除程序分支指令為兩個周期外,其余均為單周期指令</p><p> 運行速度: DC—20MHZ始終輸入</p><p> DC—200ns 指令周期</p><p> 8K * 14個 FLASH程序存儲
23、器</p><p> 368 * 8 個數(shù)據(jù)存儲器(RAM)字節(jié)</p><p> 256 * 8 EEPRM 數(shù)據(jù)存儲器字節(jié)</p><p><b> 提供14個中斷源</b></p><p><b> 功耗低</b></p><p> 在5V, 4MHZ 時鐘運
24、行時電流小于 2mA</p><p> 在3V, 32KHZ 時鐘運行時電流小于20Ua</p><p> 支持在線串行編程(ICSP)</p><p> 運行電壓范圍廣,2.0V到5.5V</p><p> 輸入及輸出電流可達(dá)到25mA</p><p> Timer0:帶有預(yù)分頻器的8位定時器/計數(shù)器<
25、;/p><p> Timer1:帶有預(yù)分頻器的16位定時器/計數(shù)器,在使用外部晶振震蕩時鐘時,在睡眠期間仍能工作</p><p> Timer2:帶有8位周期寄存器,預(yù)分頻器和后分頻器的8位定時器/計數(shù)器。</p><p> 2個捕捉器,比較器,PWM模塊</p><p><b> 其中:</b></p>
26、<p> 捕捉器是16位,最大分辨率是12.5ns</p><p> 比較器是16位,最大分辨率是200ns</p><p> PWM最大分辨率是10位</p><p> 10位多通道模數(shù)轉(zhuǎn)換器</p><p><b> 2.3 最小系統(tǒng)</b></p><p><
27、b> 2.3.1復(fù)位功能</b></p><p> PIC16F877A的復(fù)位功能設(shè)計得比較完善,實現(xiàn)復(fù)位或引起復(fù)位的條件和原因可以歸納成4類:人工復(fù)位、上電復(fù)位、看門狗復(fù)位、欠壓復(fù)位。</p><p> 這里簡單介紹一下人工復(fù)位</p><p> 人工復(fù)位:無論是單片機(jī)在正常運行程序,還是處在睡眠狀態(tài)或出現(xiàn)死機(jī)狀態(tài),只要在人工復(fù)位端MCL
28、R加入低點平信號,就令其復(fù)位。</p><p> 本次設(shè)計的電路圖如圖2.3-1所示。</p><p> 圖 2.3—1 PIC最小系統(tǒng)電路圖 圖2.3—2 最小系統(tǒng)實物圖</p><p> 2.3.2 系統(tǒng)時鐘 </p><p> 數(shù)字電路的工作離不開時鐘信號,每一步細(xì)微動作都是在一個共同的時間基準(zhǔn)信號協(xié)調(diào)下完成的。
29、作為時基發(fā)生器的時鐘震蕩電路,為整個單片機(jī)芯片的工作提供系統(tǒng)時鐘信號,也為單片機(jī)與其他外接芯片之間的通訊提供可靠的同步時鐘信號。</p><p> PIC16F877A的時鐘電路是由片內(nèi)的一個反相器和一個反饋電阻,與外接的1個石英晶體和2個電容,共同構(gòu)成的一個自激多諧振蕩器。電路如圖2.3-1 所示。</p><p> 2.4 設(shè)計心得總結(jié) </p><p>
30、 PIC16F877A的最小系統(tǒng)跟51相似,較為簡單。芯片自身增加了很多功能,如:自帶8路AD轉(zhuǎn)換、增加SPI總線,引腳復(fù)位功能多等。芯片自身功能的增加給設(shè)計帶來了很多靈活性,同時也是學(xué)習(xí)的難點。</p><p> LCD12864液晶原理介紹及接口實現(xiàn)</p><p> 3.1 液晶顯示模塊概述</p><p> 12864A-1漢字圖形點陣液晶顯示模塊
31、,可顯示漢字及圖形,內(nèi)置8192個中文漢字(16X16點陣)、128個字符(8X16點陣)及64X256點陣顯示RAM(GDRAM)。</p><p> 主要技術(shù)參數(shù)和顯示特性:</p><p> 電源:VDD 3.3V~+5V(內(nèi)置升壓電路,無需負(fù)壓);</p><p> 顯示內(nèi)容:128列× 64行</p><p><
32、;b> 顯示顏色:黃綠</b></p><p> 顯示角度:6:00鐘直視</p><p><b> LCD類型:STN</b></p><p> 與MCU接口:8位或4位并行/3位串行</p><p><b> 配置LED背光</b></p><p&
33、gt; 多種軟件功能:光標(biāo)顯示、畫面移位、自定義字符、睡眠模式等</p><p> 3.2 液晶引腳說明</p><p> 邏輯工作電壓(VDD):4.5~5.5V</p><p> 電源地(GND):0V</p><p> 工作溫度(Ta):0~60℃(常溫) / -20~75℃(寬溫)</p><p>
34、<b> 3.3 接口時序</b></p><p> 模塊有并行和串行兩種連接方法,本文采用并行接法(時序如下):</p><p><b> 8位并行連接時序圖</b></p><p><b> MPU寫資料到模塊</b></p><p><b> 程序?qū)崿F(xiàn)
35、如下:</b></p><p> /********************************************************************</p><p> * 名 稱:send_i() </p><p> * 功 能:寫一個字節(jié)命令到LCD</p><p> * 入口參數(shù):u
36、nsigned char x 字符</p><p> *******************************************************************/</p><p> void send_i(unsigned char x)</p><p><b> {</b></p><p&
37、gt; chk_busy(); //檢測LCD是否工作繁忙</p><p> rs = 0; //設(shè)置該字節(jié)數(shù)據(jù)為控制命令</p><p> rw = 0; //設(shè)置此次操作為寫</p><p> PORTD = x;
38、 //送數(shù)據(jù)口PORTD</p><p> e = 1; //使能</p><p><b> nop();</b></p><p><b> nop();</b></p><p><b> nop();<
39、;/b></p><p> e = 0; //禁止</p><p><b> }</b></p><p> MPU從模塊讀出資料</p><p><b> 程序?qū)崿F(xiàn)如下:</b></p><p> /******
40、*******************************************</p><p><b> 讀數(shù)據(jù)</b></p><p> **************************************************/</p><p> unsigned char u8_Lcd12864ReadByte_f
41、( void )</p><p><b> {</b></p><p> unsigned char byReturnValue ;</p><p> chk_busy() ; //檢測LCD是否工作繁忙</p><p> TRISD=0XFF;
42、 //設(shè)置PD口為輸入狀態(tài)</p><p> PORTD = 0xff ; //PD初始化為高電平</p><p> rs=1; // 讀置高</p><p> rw=1; // 寫置高</p><
43、;p> e=0; // 使能置低</p><p> e=1; // 使能置高</p><p> byReturnValue = PORTD ; // 讀數(shù)據(jù)</p><p> e=0;
44、 // 關(guān)使能</p><p> TRISD=0X00; // 恢復(fù)PD口為輸出</p><p> return byReturnValue ; // 返回讀到的數(shù)據(jù)</p><p><b> }</b></p><p> 3.4 具體指令介
45、紹</p><p><b> 1、清除顯示</b></p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:清除顯示屏幕,把DDRAM位址計數(shù)器調(diào)整為“00H”</p><p><b> 2
46、、位址歸位</b></p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:把DDRAM位址計數(shù)器調(diào)整為“00H”,游標(biāo)回原點,該功能不影響顯示DDRAM</p><p><b> 3、位址歸位</b></p
47、><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:把DDRAM位址計數(shù)器調(diào)整為“00H”,游標(biāo)回原點,該功能不影響顯示DDRAM功能:執(zhí)行該命令后,所設(shè)置的行將顯示在屏幕的第一行。顯示起始行是由Z地址計數(shù)器控制的,該命令自動將A0-A5位地址送入Z地址計數(shù)器,起始地址可以是0-
48、63范圍內(nèi)任意一行。Z地址計數(shù)器具有循環(huán)計數(shù)功能,用于顯示行掃描同步,當(dāng)掃描完一行后自動加一。</p><p> 4、顯示狀態(tài) 開/關(guān)</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能: D=1;整體顯示ON C=1;游標(biāo)ON
49、 B=1;游標(biāo)位置ON</p><p> 5、游標(biāo)或顯示移位控制</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:設(shè)定游標(biāo)的移動與顯示的移位控制位:這個指令并不改變DDRAM的內(nèi)容</p><p><b>
50、 6、功能設(shè)定</b></p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:DL=1(必須設(shè)為1) RE=1;擴(kuò)充指令集動作 RE=0:基本指令集動作</p><p> 7、設(shè)定CGRAM位址</p>&l
51、t;p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:設(shè)定CGRAM位址到位址計數(shù)器(AC)</p><p> 8、設(shè)定DDRAM位址</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3
52、 DB2 DB1 DB0</p><p> 功能:設(shè)定DDRAM位址到位址計數(shù)器(AC)</p><p> 9、讀取忙碌狀態(tài)(BF)和位址</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:讀取忙碌狀態(tài)(B
53、F)可以確認(rèn)內(nèi)部動作是否完成,同時可以讀出位址計數(shù)器(AC)的值</p><p> 10、寫資料到RAM</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:寫入資料到內(nèi)部的RAM(DDRAM/CGRAM/TRAM/GDRAM)</p&g
54、t;<p> 11、讀出RAM的值</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:從內(nèi)部RAM讀取資料(DDRAM/CGRAM/TRAM/GDRAM)</p><p> 12、待命模式(12H)</p>&
55、lt;p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:進(jìn)入待命模式,執(zhí)行其他命令都可終止待命模式</p><p> 13、卷動位址或IRAM位址選擇(13H)</p><p> CODE: RW RS DB7 DB6 DB5
56、 DB4 DB3 DB2 DB1 DB0</p><p> 功能:SR=1;允許輸入卷動位址 SR=0;允許輸入IRAM位址 </p><p> 14、反白選擇(14H)</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p&g
57、t;<p> 功能:選擇4行中的任一行作反白顯示,并可決定反白的與否</p><p> 15、睡眠模式(015H)</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:SL=1;脫離睡眠模式 SL=0;進(jìn)入睡眠模式</
58、p><p> 16、擴(kuò)充功能設(shè)定(016H)</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:RE=1;擴(kuò)充指令集動作 RE=0;基本指令集動作 G=1;繪圖顯示ON G=0;繪圖顯示OFF</p><p>
59、 17、設(shè)定IRAM位址或卷動位址(017H)</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:SR=1;AC5~AC0為垂直卷動位址 SR=0;AC3~AC0寫ICONRAM位址</p><p> 18、設(shè)定繪圖RAM位址(018H)
60、</p><p> CODE: RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0</p><p> 功能:設(shè)定GDRAM位址到位址計數(shù)器(AC)</p><p><b> 備注、</b></p><p> 1、當(dāng)模塊在接受指令前,微處理順必須先確認(rèn)
61、模塊內(nèi)部處于非忙碌狀態(tài),即讀取BF標(biāo)志時BF需為0,方可接受新的指令;如果在送出一個指令前并不檢查BF標(biāo)志,那么在前一個指令和這個指令中間必須延遲一段較長的時間,即是等待前一個指令確實執(zhí)行完成,指令執(zhí)行的時間請參考指令表中的個別指令說明。</p><p> 2、“RE”為基本指令集與擴(kuò)充指令集的選擇控制位元,當(dāng)變更“RE”位元后,往后的指令集將維持在最后的狀態(tài),除非再次變更“RE”位元,否則使用相同指令集時,不
62、需每次重設(shè)“RE”位元。</p><p> 本次設(shè)計液晶初始化如下:</p><p> void lcd_init()</p><p><b> {</b></p><p> rst = 0; //復(fù)位LCD</p><p> delay(1);
63、 //保證復(fù)位所需要的時間(1ms)</p><p> rst = 1; //恢復(fù)LCD正常工作</p><p><b> //nop();</b></p><p> //psb = 1; //設(shè)置LCD為8位并口通信</p
64、><p> send_i(0x30); //基本指令操作</p><p> send_i(0x01); //清除顯示</p><p> send_i(0x06); //指定在寫入或讀取時,光標(biāo)的移動方向</p><p> send_i(0x0c);
65、 //開顯示,關(guān)光標(biāo),不閃爍</p><p><b> }</b></p><p> 3.5 顯示坐標(biāo)關(guān)系</p><p> 3.5.1、圖形顯示坐標(biāo)</p><p> 水平方向X—以字節(jié)單位 </p><p> 垂直方向Y—以位為單位</p><
66、p> /*******************************************</p><p> 函數(shù)名稱:Draw_PM</p><p> 功 能:在整個液晶屏幕上畫圖</p><p><b> 參 數(shù):無</b></p><p><b> 返回值 :無</
67、b></p><p> ********************************************/</p><p> void Draw_PM(const uchar *ptr)</p><p><b> {</b></p><p> uchar i,j,k;</p><
68、p> send_i(0x34); //打開擴(kuò)展指令集</p><p> i = 0x80; </p><p> for(j = 0;j < 32;j++)</p><p><b> {</b></p><p> send_i(i++);</p>&l
69、t;p> send_i(0x80);</p><p> for(k = 0;k < 16;k++)</p><p><b> {</b></p><p> send_d(*ptr++);</p><p><b> }</b></p><p><b&
70、gt; }</b></p><p><b> i = 0x80;</b></p><p> for(j = 0;j < 32;j++)</p><p><b> {</b></p><p> send_i(i++);</p><p> send_
71、i(0x88); </p><p> for(k = 0;k < 16;k++)</p><p><b> {</b></p><p> send_d(*ptr++);</p><p><b> } </b></p><p><b> } &
72、lt;/b></p><p> send_i(0x36); //打開繪圖顯示</p><p> send_i(0x30); //回到基本指令集</p><p><b> }</b></p><p> 3.5.2 漢字顯示坐標(biāo)</p><p> /***
73、*************************************************************</p><p> * 名 稱: writelcd()</p><p> * 功 能: 在LCD上顯示字符串</p><p> * 入口參數(shù):const unsigned char *pt 字符串的首地址</p>
74、<p> **************************************************************/</p><p> void writelcd(const unsigned char *pt)</p><p><b> {</b></p><p> while(*pt)//檢測是否
75、達(dá)到了字符串最后</p><p> send_d(*pt++); //發(fā)送數(shù)據(jù)給lcd</p><p><b> }</b></p><p><b> // 應(yīng)用如下</b></p><p> const uchar table1[ ]={" 基PIC 單片機(jī)"};&
76、lt;/p><p> const uchar table2[ ]={" 多路溫度"}; </p><p> const uchar table3[ ]={" 巡回檢測系統(tǒng)"}; </p><p> const uchar table4[ ]={"2009年12月01日"};</p>
77、;<p> send_i(0x80); // 定位在第一行</p><p> writelcd(table1); // 寫:基PIC 單片機(jī)</p><p> send_i(0x90); // 定位在第二行</p><p> writelcd(table2);
78、 // 寫:多路溫度</p><p> send_i(0x88); // 定位在第三行</p><p> writelcd(table3); // 寫:巡回檢測系統(tǒng)</p><p> send_i(0x98); // 定位在第四行</p><p> writelc
79、d(table4); // 寫:2009年12月01日</p><p> 3.6 與單片機(jī)的接口實現(xiàn)</p><p> 12864液晶的電路連線圖如圖3.6 -1所示,實物位置如圖3.6 -2所示</p><p> 圖 3.6 -1 12864液晶電路連接圖</p><p> 圖 3.6 -2 12864液晶模塊
80、實物圖</p><p><b> 設(shè)計心得總結(jié)</b></p><p> LCD12864與1602相比需要較大的電流驅(qū)動,如果出現(xiàn)圖片模糊不清晰或者灰暗,除了檢查背光燈外應(yīng)考慮電源問題。最好采用大于5V的電源,經(jīng)7805穩(wěn)壓管穩(wěn)壓驅(qū)動,以保證電流?;掘?qū)動跟1602相似難度不大。中文及圖像顯示是12864最大的特點也是難點,主要是指令較多,還有就是圖像驅(qū)動需要了
81、解液晶內(nèi)部原理。整屏畫圖可以使用PCtoLCD2002把圖片轉(zhuǎn)換成16進(jìn)制數(shù),局部畫曲線、直線、圓等需要一些算法,比較復(fù)雜</p><p> DS18B20原理介紹及接口實現(xiàn)</p><p> 4.1 DS18B20簡介</p><p> DS18B20是DALLAS半導(dǎo)體公司推出的第一片支持“一線總線”接口的溫度傳感器,他它具有微型化、低功耗、高性能、抗干擾
82、能力強(qiáng)、易配微處理器等優(yōu)點,可直接將溫度轉(zhuǎn)化成串行數(shù)字信號供處理器處理。DS18B20具有以下優(yōu)點:</p><p> 適應(yīng)電壓范圍寬,電壓范圍在3.0V~5.5V,在寄生電源方式下可由數(shù)據(jù)線供電。</p><p> 獨特的單線接口方式,與微處理器連接時只需要一條口線即可實現(xiàn)微處理器與DS18B20的雙向通信。</p><p> 支持多點組網(wǎng)功能,多個DS18
83、B20可以并聯(lián)在唯一的三線上,實現(xiàn)組網(wǎng)多點測溫。</p><p> 在使用中不需要任何外圍元件,全部傳感元件以及轉(zhuǎn)換電路集成在形如一直三極管的集成電路內(nèi)。</p><p> 測溫范圍-55℃~+125℃,在-10℃~+85℃時進(jìn)度為±0.5℃</p><p> 可編程分辨率為9~12位,對應(yīng)的可分辨溫度分別為0.5℃、0.25℃、0.125℃和0.0
84、625℃,可實現(xiàn)高精度測溫。</p><p> 負(fù)壓特性。電源極性接反時,芯片不會因為過熱而燒毀,但不能正常工作。</p><p> DS18B20結(jié)構(gòu)及其工作原理</p><p> 圖4.1DS18B20內(nèi)部結(jié)構(gòu)圖</p><p> DS18B20的內(nèi)部結(jié)構(gòu)圖如圖4.1所示。由此我們可以看出DS18B20主要由4部分組成:64位RO
85、M、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列如圖4.2所示,其中DQ為數(shù)字信號輸入/輸出端;GND為電源地;VDD為外接供電電源輸入端,在寄生電源接線方式時接地。</p><p> 圖4.2 DS18B20引腳和封裝</p><p> 每顆DS18B20在出廠前都有一個64位光刻ROM,它可以看作該DS18B20的地址序列碼。其各位排列順序是:
86、開始8位為產(chǎn)品類型標(biāo)號,接下來48位是該DS18B20自身的序列號,最后8位是前面56位的CRC循環(huán)冗余校驗碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一條總線 掛接多個DS18B20的目的。</p><p> 由于DS18B20是在一根I/O線上讀寫數(shù)據(jù),因此,對讀寫的數(shù)據(jù)位有著嚴(yán)格的時序要求。DS18B20有嚴(yán)格的通信協(xié)議來保證各位數(shù)據(jù)傳輸?shù)恼_性和
87、完整性。該協(xié)議定義了幾種信號的時序:復(fù)位時序、讀時序、寫時序。所有時序都是將主機(jī)作為主設(shè)備,單總線器件作為從設(shè)備。而每一次命令和數(shù)據(jù)的傳輸都是從主機(jī)主動啟動寫時序開始,如果要求單總線器件回送數(shù)據(jù),在進(jìn)行寫命令后,主機(jī)需啟動讀時序完成數(shù)據(jù)接收。數(shù)據(jù)和命令的傳輸都是低位在先。</p><p> DS18B20的復(fù)位時序:</p><p> 圖4.3 DS18B20復(fù)位時序圖</p&g
88、t;<p><b> 程序?qū)崿F(xiàn)如下:</b></p><p> /********************************************************************</p><p> * 名 稱:reset() </p><p> * 功 能:18b20復(fù)位</p&g
89、t;<p> ********************************************************************/</p><p> #define DQ RB7</p><p> #define DQ_HIGH() TRISB7=1</p><p> #define DQ_LOW() TRISB7=0;D
90、Q=0</p><p> void reset()</p><p><b> {</b></p><p> uchar st=1;</p><p> DQ_HIGH(); // 先拉至高電平</p><p> NOP();NOP();</p&g
91、t;<p><b> while(st)</b></p><p><b> {</b></p><p> DQ_LOW(); // 低電平</p><p> delayus(70,30); // 延時503us</p><p>
92、; DQ_HIGH(); //釋放總線等電阻拉高總線</p><p> delayus(4,4); //延時60us</p><p> if(DQ==1) //沒有接收到應(yīng)答信號,繼續(xù)復(fù)位</p><p><b> st=1;</b></p>
93、;<p> else //接收到應(yīng)答信號</p><p><b> st=0;</b></p><p> delayus(50,10); //延時430us</p><p><b> }</b></p><p>&
94、lt;b> }</b></p><p> DS18B20的讀時序:</p><p> 對于DS18B20的讀時序分為讀0時序和讀1時序兩個過程。 </p><p> 對于DS18B20的讀時隙是從主機(jī)把單總線拉低之后,在15uS之內(nèi)釋放單總線,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在完成一個讀時序過程,至少需要60us才能完
95、成。</p><p> 圖4.4 DS18B20讀時序圖</p><p> /********************************************************************</p><p> * 名 稱:read_byte() </p><p> * 功 能:18b20讀字節(jié)<
96、;/p><p> * 出口參數(shù):讀出18B20的內(nèi)容</p><p> ********************************************************************/</p><p> uch read_byte()</p><p><b> {</b></p>
97、<p><b> uch i;</b></p><p> uch value = 0; //讀出溫度</p><p> static bit j;</p><p> for (i = 8;i > 0;i--)</p><p><b
98、> {</b></p><p> value >>= 1;</p><p><b> DQ_LOW();</b></p><p> NOP();NOP();NOP();NOP();NOP();NOP(); //6us</p><p> DQ_HIGH();
99、 //拉至高電平</p><p> NOP();NOP();NOP();NOP();NOP(); //4us</p><p><b> j = DQ;</b></p><p> if (j) value |= 0x80;</p><p> delay(2, 7);
100、 //63us</p><p><b> }</b></p><p> return (value);</p><p><b> }</b></p><p> DS18B20的寫時序:</p><p> 對于DS18B20
101、的寫時序仍然分為寫0時序和寫1時序兩個過程。 </p><p> 對于DS18B20寫0時序和寫1時序的要求不同,當(dāng)要寫0時序時,單總線要被拉低至少60us,保證DS18B20能夠在15us到45us之間能夠正確地采樣IO總線上的“0”電平,當(dāng)要寫1時序時,單總線被拉低之后,在15us之內(nèi)就得釋放單總線。 </p><p> 圖4.5 DS18B20寫時序圖</p>&l
102、t;p> /********************************************************************</p><p> * 名 稱:write_byte() </p><p> * 功 能:寫18b20寫字節(jié)</p><p> * 入口參數(shù):uch val 待寫的數(shù)據(jù)</p>&
103、lt;p> *******************************************************************/</p><p> void write_byte(uch val)</p><p><b> {</b></p><p><b> uch i;</b><
104、/p><p><b> uch temp;</b></p><p> for (i = 8;i > 0;i--)</p><p><b> {</b></p><p> temp = val & 0x01; //最低位移出</p><p
105、><b> DQ_LOW();</b></p><p> NOP();NOP();NOP();NOP();NOP();//從高拉至低電平,產(chǎn)生寫時間隙</p><p> if (temp == 1) DQ_HIGH(); //如果寫1,拉高電平</p><p> delay(2, 7);
106、 //延時63us</p><p> DQ_HIGH();</p><p> NOP();NOP();</p><p> val = val >> 1; //右移一位</p><p><b> }</b></p><p><b>
107、; }</b></p><p> DS18B20內(nèi)部帶有共9個字節(jié)的高速暫存器RAM和電可擦除EEPROM,起結(jié)構(gòu)如表2所示。</p><p> 表2 DS18B20高速暫存器結(jié)構(gòu)</p><p> DS18B20所包含的操作指令如表3所示。</p><p> 表3 DS18B20操作指令</p><
108、p> 溫度數(shù)據(jù)在高速暫存器RAM的第0和第1個字節(jié)中的存儲格式如下表4所示。</p><p> 表4 DS18B20溫度數(shù)據(jù)存儲格式</p><p> DS18B20在出廠是默認(rèn)配置為12位,其中最高位為符號位,即溫度值共11位,單片機(jī)在讀取數(shù)據(jù)時,一次會讀2字節(jié)共16位,讀完后將低11位的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)后再乘以0.0625便為所測的實際溫度值。另外,還需要判斷溫度的正
109、負(fù)。前5個數(shù)字為符號位,這5位同時變化,我們只需要判斷11位就可以了。前5位為1時,讀取的溫度為負(fù)值,且測到的數(shù)值需要取反加1再乘以0.0625才可得到實際溫度值。前5位為0時,讀取的溫度為正值,且溫度為正值時,只要將測得的數(shù)值乘以0.0625即可得到實際溫度值??紤]到實際使用的需要,在這里我們只使用一個DS18B20,故每次操作前只需復(fù)位后發(fā)出Skip ROM指令(即跳過ROM指令)再讀出溫度的正值、并精確到小數(shù)點后一位,即可滿足設(shè)計
110、需求。</p><p> /*****************************************************************</p><p> * 名 稱:get_temp() </p><p> * 功 能:啟動溫度轉(zhuǎn)換</p><p> ************************
111、*****************************************/</p><p> void get_tem()</p><p><b> {</b></p><p> uchar tem1,tem2,num;</p><p> float aaa;</p><p>
112、 reset(); //復(fù)位</p><p> write_byte(0xCC); //跳過ROM</p><p> write_byte(0x44); //溫度轉(zhuǎn)換</p><p> for(num=100;num>0;num--) //確保溫度轉(zhuǎn)換完成所需要的時間</p>&l
113、t;p> reset(); //再次復(fù)位,等待從機(jī)應(yīng)答</p><p> write_byte(0xCC); //忽略ROM匹配</p><p> write_byte(0xBE); //發(fā)送讀溫度命令</p><p> tem1=read_byte(); //讀出溫度低8<
114、;/p><p> tem2=read_byte(); //讀出溫度高8位</p><p> shu=(tem2<<4|tem1>>4); //溫度整數(shù)部分</p><p> aaa=(tem2*256+tem1)*6.25; //溫度小數(shù)部分</p><p> temper=(int)aaa;
115、 //強(qiáng)制轉(zhuǎn)換成整型</p><p> a1=temper/1000; //取溫度十位</p><p> a2=temper%1000/100; //取個位</p><p> a3=temper%100/10; //小數(shù)點后個位</p><p> a4=temper%10;
116、 //小數(shù)點后十位</p><p><b> }</b></p><p> DS18B20的接口實現(xiàn)</p><p> 4.3.1 硬件設(shè)計</p><p> DS18B20在本次設(shè)計中接線圖如圖4.6 所示,實驗板硬件圖如圖4.7所示</p><p> 這次實驗
117、只焊了兩個溫度傳感器而已,其他兩個用法一樣,留作外接口,可以方便外用。</p><p> 圖4.6 DS18B20原理圖 圖4.7 DSB18B20硬件連接實物圖</p><p> 4.3.2 軟件設(shè)計</p><p> 根據(jù)DS18B20約定的通訊協(xié)議,每次使用DS18B20之前都必須經(jīng)過三個步驟,即先復(fù)位DS18B20,接著發(fā)出
118、ROM操作指令,然后才可以發(fā)出RAM操作指令以進(jìn)行溫度轉(zhuǎn)換等命令。本系統(tǒng)將實現(xiàn)讀出DS18B20的溫度并實時顯示到LCD12864上,分辨率為0.0625℃。由于DS18B20對時序要求很嚴(yán)格,所以在程序設(shè)計時,時序要多加注意一點,不過數(shù)字不是死的,只要控制合理控制也不是掃描大問題。 DS18B20首次初始化時開啟溫度轉(zhuǎn)換,之后每1s進(jìn)行一次DS18B20的溫度讀取和轉(zhuǎn)換,具體實現(xiàn)效果圖如圖4.8 流程圖如圖4.9所示</p>
119、;<p> 圖 4.8溫度采集效果實物圖</p><p> 圖4.9 DS18B20讀取溫度流程圖</p><p><b> 設(shè)計心得總結(jié)</b></p><p> 4.4.1 焊接問題:</p><p> 焊接DS18B20時,速度要快,如果高溫的電烙鐵持續(xù)接觸傳感器很容易燒掉DS18B20,因
120、為電烙鐵一般溫度為350 ~ 450度,而傳感器承受溫度為125度。我曾經(jīng)因此燒壞了兩個傳感器,得此痛訓(xùn)!</p><p> 4.4.2 軟件設(shè)計:</p><p> DS18B20時序要求較為嚴(yán)格,這里的嚴(yán)格不是說一定要按手冊的時間一摸一樣而是說相對其他芯片來說嚴(yán)格了一點。如果讀取不到溫度應(yīng)該檢查一下時序時間設(shè)計問題。再有一個難點就是溫度轉(zhuǎn)換問題。溫度能顯示到小數(shù)點后4位,如果要將溫
121、度全部讀出,應(yīng)該將整數(shù)部分乘以10000再加上小數(shù)部分,化浮點數(shù)為整數(shù),當(dāng)然也可以直接采用浮點數(shù)相乘。開機(jī)會出現(xiàn)85C那是18B20復(fù)位值</p><p><b> 4.4.3 不足:</b></p><p> 此次設(shè)計沒有處理溫度負(fù)數(shù)情況,如果要處理應(yīng)該判斷最高位符號位,然后取反加一。</p><p> 18B20可單總線掛多個,這里I
122、O口有剩再加上為了程序設(shè)計簡單采用了并口方式。</p><p> 存儲芯片AT24C02簡單介紹及接口實現(xiàn)</p><p> AT24C02功能描述管腳定義</p><p> AT24C02是一個2K位串行CMOS E2PROM, 內(nèi)部含有256個8位字節(jié),CATALYST公司的先進(jìn)CMOS技術(shù)實質(zhì)上減少了器件的功耗。AT24C02有一個16字節(jié)頁寫緩沖器。該
123、器件通過IC總線接口進(jìn)行操作,有一個專門的寫保護(hù)功能。AT24C02支持IC,總線數(shù)據(jù)傳送協(xié)議IC,總線協(xié)議規(guī)定任何將數(shù)據(jù)傳送到總線的器件作為發(fā)送器。任何從總線接收數(shù)據(jù)的器件為接收器。數(shù)據(jù)傳送是由產(chǎn)生串行時鐘和所有起始停止信號的主器件控制的。主器件和從器件都可以作為發(fā)送器或接收器,但由主器件控制傳送數(shù)據(jù)(發(fā)送或接收)的模式,通過器件地址輸入端A0、A1和A2可以實現(xiàn)將最多8個AT24C02器件連接到總線上。 </p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于pic單片機(jī)的多路溫度巡回檢測系統(tǒng)
- 基于pic單片機(jī)的多路溫度巡回檢測系統(tǒng)
- 基于51單片機(jī)的多路溫度檢測系統(tǒng)
- 單片機(jī)畢業(yè)設(shè)計外文翻譯-- pic系列單片機(jī)的特點
- 單片機(jī)課程設(shè)計報告單片機(jī)的多路溫度測量系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計---基于單片機(jī)的多路溫度采集系統(tǒng)設(shè)計與實現(xiàn)
- 基于單片機(jī)的多路溫度采集系統(tǒng)設(shè)計與實現(xiàn)畢業(yè)設(shè)計
- 畢業(yè)設(shè)計--基于單片機(jī)的多路溫度采集系統(tǒng)設(shè)計與實現(xiàn)
- pic單片機(jī)
- 基于單片機(jī)的溫度檢測系統(tǒng)設(shè)計
- 基于單片機(jī)的溫度檢測系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計--pic單片機(jī)的煤炭監(jiān)控系統(tǒng)
- 畢業(yè)設(shè)計--pic單片機(jī)的煤炭監(jiān)控系統(tǒng)
- 基于單片機(jī)的溫度監(jiān)控系統(tǒng)(畢業(yè)設(shè)計)
- 畢業(yè)設(shè)計-基于pic單片機(jī)的直流調(diào)速系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計-基于單片機(jī)的多點溫度檢測系統(tǒng)的設(shè)計
- 單片機(jī)課程設(shè)計---基于單片機(jī)溫度測量系統(tǒng)設(shè)計
- 畢業(yè)設(shè)計--基于單片機(jī)的溫度檢測與控制
- 基于單片機(jī)的溫度監(jiān)控系統(tǒng)畢業(yè)設(shè)計
- 基于單片機(jī)的溫度測量系統(tǒng)設(shè)計【畢業(yè)設(shè)計】
評論
0/150
提交評論