




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、JINGCHU UNIVERSITY OF TECHNOLOGY 單片機(jī)原理及應(yīng)用課程設(shè)計報告 LCD1602液晶顯示18b20溫控實驗專 業(yè) : 電氣工程及其自動化 班 級 : 10電工(3)班 學(xué)生姓名 : 李揚 指導(dǎo)教師 : 鄒云峰 提交日期 : 2013-06-21 目 錄第一部分 設(shè)計任務(wù)1.1設(shè)計題目及求要求3 方案一31.2.4 方案分析3第二部分 設(shè)計方案2.1 總體設(shè)計方案說明32.2 實物電路圖4第三部分 電路設(shè)計與器件選擇3.1 DS18B20工作原理和功能說明·········
2、183;····················4 3.2 LCD1602工作原理和功能說明16第四部分4.1實驗程序28 第五部分5.1課程設(shè)計總結(jié) (心得體會)34第六部分 6.1參考文獻(xiàn)341.1設(shè)計題目及求要求用電子元器件和單片機(jī)通過編寫程序做成能實時顯示溫度的儀器。1.2.1 方案用通用型1602液晶顯示器和DS18B20溫度傳感器組成溫度顯示儀,并編寫程序用51單片機(jī)來控制和連接160
3、2液晶顯示器和DS18B20溫度傳感器。1.2.2 方案分析1602液晶顯示器能顯示ASCII碼字符,數(shù)字、大小寫字母、和各種符號。而且其體積小、功耗低、顯示操作簡單,顯示值清晰,正常溫度范圍為-20+60。DS18B20溫度傳感器采用單總線協(xié)議,與單片機(jī)接口僅需用一個I/O接口無需任何外部元件,直接將環(huán)境溫度轉(zhuǎn)化成數(shù)字信號,從而大大簡化了傳感器于微處理機(jī)的接口。DS18B20溫度傳感器支持多點組網(wǎng)功能,多個DS18B20可以并聯(lián)在唯一的三線上,其測試范圍在-50+125.C。測試結(jié)果直接輸出數(shù)字溫度信號,以“一位總線”串行傳送給CPU,同時可傳送CRC效驗碼,具有極強(qiáng)的抗干擾糾錯能力。電源板
4、極性接反時,芯片不會因發(fā)熱而燒毀。且它具有微型化、低功耗、高新能、抗干擾能力強(qiáng)、一賠微處理器等優(yōu)點??紤]到1602液晶顯示器和DS18B20溫度傳感器有諸多優(yōu)點,顧用二者來完成實驗。2.1總體設(shè)計方案說明分別用DS18B20溫度傳感器和1602液晶顯示器來測試溫度和現(xiàn)實數(shù)據(jù)。編寫程序和利用51單片機(jī)來控制電路。2.2實物電路圖3.1DS18B20的工作原理 DS18B20數(shù)字溫度傳感器概述DS18B20數(shù)字溫度傳感器是DALLAS公司生產(chǎn)的1Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統(tǒng),具有線路簡單,在一根通信線,可以掛很多這樣的數(shù)字溫度計,十分方便。DS18
5、B20產(chǎn)品的特點l 只要求一個端口即可實現(xiàn)通信。l 在DS18B20中的每個器件上都有獨一無二的序列號。l 實際應(yīng)用中不需要外部任何元器件即可實現(xiàn)測溫。l 測量溫度范圍在55.C到125.C之間。l 數(shù)字溫度計的分辨率用戶可以從9位到12位選擇。l 內(nèi)部有溫度上、下限告警設(shè)置。TO92封裝的DS18B20的引腳排列見右圖,其引腳功能描述見表序號名稱引腳功能描述1GND地信號2DQ數(shù)字輸入輸出引腳,開漏單總線接口引腳,當(dāng)使用寄生電源時,可向電源提供電源3VDD可選擇的VDD引腳,當(dāng)工作于寄生電源時,該引腳必須接地表3-2DS18B20詳細(xì)引腳功能描述 DS18B20的內(nèi)部結(jié)構(gòu)DS18B20的內(nèi)部
6、框圖下圖所示,DS18B20 的內(nèi)部有64 位的ROM 單元,和9 字節(jié)的暫存器單元。64位ROM存儲器件獨一無二的序列號。暫存器包含兩字節(jié)(0和1字節(jié))的溫度寄存器,用于存儲溫度傳感器的數(shù)字輸出。暫存器還提供一字節(jié)的上線警報觸發(fā)(TH)和下線警報觸發(fā)(TL)寄存器(2和3字節(jié)),和一字節(jié)的配置寄存器(4字節(jié)),使用者可以通過配置寄存器來設(shè)置溫度轉(zhuǎn)換的精度。暫存器的5、6和7字節(jié)器件內(nèi)部保留使用。第八字節(jié)含有循環(huán)冗余碼(CRC )。使用寄生電源時,DS18B20不需額外的供電電源;當(dāng)總線為高電平時,功率由單總線上的上拉電阻通過DQ引腳提供;高電平總線信號同時也向內(nèi)部電容CPP充電,CPP在總線
7、低電平時為器件供電。(字節(jié)58 就不用看了)。 圖為 暫存器 暫存器介紹A. 溫度寄存器(0和1字節(jié))DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉(zhuǎn)化為例:用16位符號擴(kuò)展的二進(jìn)制補碼讀數(shù)形式提供,以0.0625/LSB形式表達(dá),其中S為符號位。這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18B20的兩個8比特的RAM中,二進(jìn)制中的前面5位是符號位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。DS18B20 的溫度操作是使用16 位,也就是說分辨率是0.0625
8、。BIT15BIT11 是符號位,為了就是表示轉(zhuǎn)換的值是正數(shù)還是負(fù)數(shù)。要求出正數(shù)的十進(jìn)制值,必須將讀取到的LSB 字節(jié),MSB 字節(jié)進(jìn)行整合處理,然后乘以0.0625 即可。Eg:假設(shè)從,字節(jié)0 讀取到0xD0 賦值于Temp1,而字節(jié)1 讀取到0x07 賦值于Temp2,然后求出十進(jìn)制值。unsigned int Temp1,Temp2,Temperature;Temp1=0xD0; /低八位Temp2=0x07; /高八位Temperature = (Temp2<<8 ) | Temp1 ) * 0.0625;/又或者Temperature = (Temp1 + Temp2 *
9、256) * 0.0625; /Temperature=125在這里我們遇見了一個問題,就是如何求出負(fù)數(shù)的值呢?我們必須判斷BIT1115 是否是1,然后人為置一負(fù)數(shù)標(biāo)志。Eg. 假設(shè)從,字節(jié)0 讀取到0x90 賦值于Temp1,而字節(jié)1 讀取到0xFC 賦值于Temp2,然后求出該值是不是負(fù)數(shù),和轉(zhuǎn)換成十進(jìn)制值。 unsigned int Temp1,Temp2,Temperature;unsigned char Minus_Flag=0;Temp1=0x90; /低八位Temp2=0xFC; /高八位 /Temperature = (Temp1 + Temp2 *256) * 0.0625
10、; /Temperature=64656/很明顯不是我們想要的答案if(Temp2&0xFC) /判斷符號位是否為1Minus_Flag=1; /負(fù)數(shù)標(biāo)志置一Temperature = (Temp2<<8 ) | Temp1 ) /高八位第八位進(jìn)行整合Temperature= (Temperature)+1); /求反,補一Temperature*= 0.0625; /求出十進(jìn)制 /Temperature=55;elseMinus_Flag=0;Temperature = (Temp2<<8 ) | Temp1 ) * 0.0625;如果我要求出小數(shù)點的值的話,
11、那么我應(yīng)該這樣做。Eg:假設(shè)從,字節(jié)0 讀取到0xA2 賦值于Temp1,而字節(jié)1 讀取到0x00 賦值于Temp2,然后求出十進(jìn)制值,要求連同小數(shù)點也求出。unsigned int Temp1,Temp2,Temperature;Temp1=0x90; /低八位Temp2=0xFC; /高八位/實際值為10.125/Temperature = (Temp2<<8 ) | Temp1 ) * 0.0625; /10,無小數(shù)點Temperature = (Temp2<<8 ) | Temp1 ) * (0.0625 * 10) ; /101 ,一位小數(shù)點/Temperat
12、ure = (Temp2<<8 ) | Temp1 ) * (0.0625 * 100) ; /1012,二位小數(shù)點 如以上的例題,我們可以先將0.0625 乘以10,然后再乘以整合后的Temperature 變量,就可以求出后面一個小數(shù)點的值(求出更多的小數(shù)點,方法都是以此類推)。得出的結(jié)果是101,然后再利用簡單的算法,求出每一位的值。unsinged char Ten,One,Dot1Ten=Temperature/100; /1One=Temperature%100/10; /0Dot1=%10; /1求出負(fù)數(shù)的思路也一樣,只不過多出人為置一負(fù)數(shù)標(biāo)志,求反補一的動作而已。自
13、己發(fā)揮想象力吧。 B .字節(jié)23:TH 和TL配置TH 與TL 就是所謂的溫度最高界限,和溫度最低界限的配置??梢允褂密浖碓囼?。 C 字節(jié)4:配置寄存器BIT7 出廠的時候就已經(jīng)設(shè)置為0,用戶不建議去更改。而R1 與R0 位組合了四個不同的轉(zhuǎn)換精度,00 為9 位轉(zhuǎn)換精度而轉(zhuǎn)換時間是93.75ms,01 為10 位轉(zhuǎn)換精度而轉(zhuǎn)換時間是187.5ms,10 為11 位轉(zhuǎn)換精度而轉(zhuǎn)換時間是375ms,11 為12 位轉(zhuǎn)換精度而轉(zhuǎn)換時間是750ms(默認(rèn))。該寄存器還是留默認(rèn)的好,畢竟轉(zhuǎn)換精度表示了轉(zhuǎn)換的質(zhì)量。低五位一直都是"1",TM是測試模式位,用于設(shè)置DS18B20在工作
14、模式還是在測試模式。在DS18B20出廠時該位被設(shè)置為0,用戶不要去改動。R1和R0用來設(shè)置分辨率,如下表所示:(DS18B20出廠時被設(shè)置為12位)表3-6R1與R0確定傳感器分辨率設(shè)置表R1R0傳感器精度/bit轉(zhuǎn)換時間/ms00993.750110187.510113751112750D.字節(jié)57,保留位,8:CRC 光刻ROM介紹 光刻ROM中的64位序列號是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號,接著的48位是該DS18B20自身的序列號,最后8位是前面56位的循環(huán)冗余校驗碼(CRC=X8+X5+X4+1
15、)。光刻ROM的作用是使每一個DS18B20都各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20的目的。DS18B20溫度傳感器的存儲器介紹DS18B20溫度傳感器的內(nèi)部存儲器包括一個高速暫存RAM和一個非易失性的可電擦除的EEPRAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。2 DS18B20的工作過程DS18B20 一般都是充當(dāng)從機(jī)的角色,而單片機(jī)就是主機(jī)。單片機(jī)通過一線總線訪問DS18B20的話,需要經(jīng)過以下幾個步驟: DS18B20 復(fù)位(初始化),DS18B20 復(fù)位。在某種意義上就是一次訪問DS18B20 的開始,或者可說成是開始信號。執(zhí)行ROM 指令(ROM命令
16、跟隨著需要交換的數(shù)據(jù));ROM 指令,也就是訪問,搜索,匹配,DS18B20 個別的64 位序列號的動作。在單點情況下,可以直接跳過ROM 指令。(而跳過ROM 指令的字節(jié)是0xCC,后面介紹)執(zhí)行DS18B20 功能指令(RAM 指令),功能命令跟隨著需要交換的數(shù)據(jù)。DS18B20 復(fù)位(初始化)在初始化過程中,主機(jī)通過拉低單總線至少480µs,以產(chǎn)生復(fù)位脈沖(TX)。然后主機(jī)釋放總線并進(jìn)入接收(RX)模式。當(dāng)總線被釋放后,5k的上拉電阻將單總線拉高。DS18B20檢測到這個上升沿后,延時15µs60µs,通過拉低總線60µs240µs產(chǎn)生應(yīng)
17、答脈沖。DS18B20 功能指令有很多種,數(shù)據(jù)手冊里有更詳細(xì)的介紹。這里僅列出比較常用的幾個DS18B20 功能指令。0x44:開始轉(zhuǎn)換溫度。轉(zhuǎn)換好的溫度會儲存到暫存器字節(jié)0 和1。0xEE:讀暫存指令。讀暫存指令,會從暫存器0 到9,一個一個字節(jié)讀取,如果要停止的話,必須寫下DS18B20 復(fù)位。訪問DS18B20必須嚴(yán)格遵守這一命令序列,如果丟失任何一步或序列混亂,DS18B20都不會響應(yīng)主機(jī)(除了Search ROM 和Alarm Search這兩個命令,在這兩個命令后,主機(jī)都必須返回到第一步)。一般上我們都是使用單點,也就是說單線總線上僅有一個DS18B20 存在而已。所以我們無需刻意
18、讀取ROM 里邊的序列號來,然后匹配那個DS18B20?而是更直接的,跳過ROM 指令,然后直接執(zhí)行DS18B20 功能指令。ROM命令:ROM命令通過每個器件64-bit的ROM碼,使主機(jī)指定某一特定器件(如果有多個器件掛在總線上)與之進(jìn)行通信。DS18B20的ROM如表3-4所示,每個ROM命令都是8 bit長。功能命令:主機(jī)通過功能命令對DS18B20進(jìn)行讀/寫Scratchpad存儲器,或者啟動溫度轉(zhuǎn)換。DS18B20的功能命令如表3-7所示。指令協(xié)議功能讀ROM33H讀DS18B20中的編碼(即64位地址)符合ROM55H發(fā)出此命令后,接著發(fā)出64位ROM編碼,訪問單總線上與該編碼相
19、對應(yīng)的DS18B20,使之作出響應(yīng),為下一步對該DS18B20的讀寫作準(zhǔn)備搜索ROM0F0H用于確定掛接在同一總線上DS18B20的個數(shù)和識別64位ROM地址,為操作各器件作好準(zhǔn)備跳過ROM0CCH忽略64位ROM地址,直接向DS18B20V 溫度轉(zhuǎn)換命令,適用于單個DS18B20工作報警搜索命令0ECH執(zhí)行后,只有溫度超過廟宇值上限或下限的片子才做出響應(yīng)溫度轉(zhuǎn)換44H啟動DS18B20進(jìn)行溫度轉(zhuǎn)換,轉(zhuǎn)換時間最長為500ms(典型為200ms),結(jié)果豐入內(nèi)部9字節(jié)RAM中讀暫存器BEH讀內(nèi)部RAM中9字節(jié)的內(nèi)容寫暫存器4EH發(fā)出向內(nèi)部RAM的第3、4字節(jié)寫上、下溫度數(shù)據(jù)命令,緊該溫度命令之后,
20、傳達(dá)兩字節(jié)的數(shù)據(jù)復(fù)制暫存器48H將RAM中第3、4字內(nèi)容復(fù)制到E2PROM中重調(diào)E2PROM0B8H將E2PROM中內(nèi)容恢復(fù)到RAM中的第3、4字節(jié)讀供電方式0B4H讀DS18B20的供電模式,寄生供電時DS18B20發(fā)送“0”,外部供電時DS18B20發(fā)送“1”表3-7DS18B20的信號方式DS18B20采用嚴(yán)格的單總線通信協(xié)議,以保證數(shù)據(jù)的完整性。該協(xié)議定義了幾種信號類型:復(fù)位脈沖、應(yīng)答脈沖、寫和讀。除了應(yīng)答脈沖所有這些信號都由主機(jī)發(fā)出同步信號。總線上傳輸?shù)乃袛?shù)據(jù)和命令都是以字節(jié)的低位在前。a.初始化序列:復(fù)位脈沖和應(yīng)答脈沖初始化波形如圖3-8所示。DS18B20 的復(fù)位時序如下:1.
21、單片機(jī)拉低總線480us950us, 然后釋放總線(拉高電平)。這時DS18B20 會拉低信號,大約60240us 表示應(yīng)答。2.DS18B20 拉低電平的60240us 之間,單片機(jī)讀取總線的電平,如果是低電平,那么表示復(fù)位成功,DS18B20 拉低電平60240us 之后,會釋放總線。C程序舉例/DS1820 C51 子程序/這里以11.0592M晶體為例,不同的晶體速度可能需要調(diào)整延時的時間/sbit DQ =P21;/根據(jù)實際情況定義端口 void dsreset()/18B20復(fù)位,初始化函數(shù) uint i; ds=0; i=103; while(i>0)i-; ds=1; i
22、=4; while(i>0)i-; DS18B20所有的數(shù)據(jù)交換都由一個初始化序列開始。由主機(jī)發(fā)出的復(fù)位脈沖和跟在其后的由DS18B20發(fā)出的應(yīng)答脈沖構(gòu)成。當(dāng)DS18B20發(fā)出響應(yīng)主機(jī)的應(yīng)答脈沖時,即向主機(jī)表明它已處在總線上并且準(zhǔn)備工作。b.讀和寫時序 在寫時序期間,主機(jī)向DS18B20寫入指令;而在讀時序期間,主機(jī)讀入來自DS18B20的指令。在每一個時序,總線只能傳輸一位數(shù)據(jù)。讀/寫時序如圖3-9所示。l 寫時序存在兩種寫時序:“寫1”和“寫0”。主機(jī)在寫1時序向DS18B20寫入邏輯1,而在寫0時序向DS18B20寫入邏輯0。所有寫時序至少需要60µs,且在兩次寫時序之間
23、至少需要1µs的恢復(fù)時間。兩種寫時序均以主機(jī)拉低總線開始。在寫時序開始后的15µs60µs期間,DS18B20采樣總線的狀態(tài)。如果總線為高電平,則邏輯1被寫入DS18B20;如果總線為低電平,則邏輯0被寫入DS18B20。l 寫時序 DS18B20 寫步驟如下:1.單片機(jī)拉低電平大約1015us,。2.單片機(jī)持續(xù)送指定電平大約2045us 的時間。3.釋放總線 如果要讀或者寫一個字節(jié),就要重復(fù)以上的步驟八次。使用for 循環(huán),和數(shù)據(jù)變量的左移和或運算,實現(xiàn)一個字節(jié)讀與寫。函數(shù)延遲的時間,必須模擬非常準(zhǔn)確,因為單線總線對時序的要求敏感點。/向 1-WIRE 總線上寫
24、一個字節(jié)void tempwritebyte(BYTE dat) /向18B20寫一個字節(jié)數(shù)據(jù) uint i; BYTE j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /寫 1 ds=0; i+;i+; ds=1; i=8;while(i>0)i-; else ds=0; /寫 0 i=8;while(i>0)i-; ds=1; i+;i+; l 讀時序DS18B20 讀步驟如下:1.在讀取的時候單片機(jī)拉低電平大約1us2.單片機(jī)釋放總線,然后讀取總線電平。這時候D
25、S18B20 會送出電平。3.讀取電平過后,延遲大約4045 微妙/從 1-wire 總線上讀取一個字節(jié)bit tempreadbit(void) /讀1位函數(shù) uint i; bit dat; ds=0;i+; /i+ 起延時作用 ds=1;i+;i+; dat=ds; i=8;while(i>0)i-; return (dat);BYTE tempread(void) /讀1個字節(jié) BYTE i,j,dat; dat=0; for(i=1;i<=8;i+) j=tempreadbit(); dat=(j<<7)|(dat>>1); /讀出的數(shù)據(jù)最低位在最
26、前面,這樣剛好一個字節(jié)在DAT里 return(dat); A . DS18B20 開始轉(zhuǎn)換:1.DS18B20 復(fù)位。2.寫入跳過ROM 的字節(jié)命令,0xCC。3.寫入開始轉(zhuǎn)換的功能命令,0x44。4.延遲大約750900 毫秒B . DS18B20 讀暫存數(shù)據(jù):1.DS18B20 復(fù)位。2.寫入跳過ROM 的字節(jié)命令,0xCC。3.寫入讀暫存的功能命令,0xee。4.讀入第0 個字節(jié)LS Byte,轉(zhuǎn)換結(jié)果的低八位。5.讀入第1 個字節(jié)MS Byte,轉(zhuǎn)換結(jié)果的高八位。6.DS18B20 復(fù)位,表示讀取暫存結(jié)束。/讀取溫度void tempchange(void) /DS18B20 開始獲
27、取溫度并轉(zhuǎn)換 dsreset(); delay(1); tempwritebyte(0xcc); / 寫跳過讀ROM指令 tempwritebyte(0x44); / 寫溫度轉(zhuǎn)換指令uint get_temp() /讀取寄存器中存儲的溫度數(shù)據(jù) BYTE a,b; dsreset(); delay(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /讀低8位 b=tempread(); /讀高8位 temp=b; temp<<=8; /兩個字節(jié)組合為1個字 temp=temp|a; temp = temp *(0.
28、625);/溫度值擴(kuò)大10倍,精確到1位小數(shù) return temp; /temp是整型void ds1820disp(uint temp1)/溫度值顯示disdata0= temp1 /1000+0x30;/百位數(shù) disdata1= temp1 %1000/100+0x30;/十位數(shù) disdata2= temp1%100/10+0x30;/個位數(shù)disdata3=0x2e; disdata4= temp1 %10+0x30;/小數(shù)位 簡單歸納單線總線高電平為閑置狀態(tài)。單片機(jī)訪問DS18B20必須遵守,DS18B20 復(fù)位->執(zhí)行ROM 指令->執(zhí)行DS18B20 功能指令。而
29、在單點上,可以直接跳過ROM 指令。DS18B20 的轉(zhuǎn)換精度默認(rèn)為12 位,而分辨率是0.0625。DS18B20 溫度讀取函數(shù)參考步驟:A . DS18B20 開始轉(zhuǎn)換:1.DS18B20 復(fù)位。2.寫入跳過ROM 的字節(jié)命令,0xCC。3.寫入開始轉(zhuǎn)換的功能命令,0x44。4.延遲大約750900 毫秒B . DS18B20 讀暫存數(shù)據(jù):1.DS18B20 復(fù)位。2.寫入跳過ROM 的字節(jié)命令,0xCC。3.寫入讀暫存的功能命令,0xee。4.讀入第0 個字節(jié)LS Byte,轉(zhuǎn)換結(jié)果的低八位。5.讀入第1 個字節(jié)MS Byte,轉(zhuǎn)換結(jié)果的高八位。6.DS18B20 復(fù)位,表示讀取暫存結(jié)束
30、。C . 數(shù)據(jù)求出十進(jìn)制:1.整合LS Byte 和MS Byte 的數(shù)據(jù)2.判斷是否為正負(fù)數(shù)(可選)3.求得十進(jìn)制值。正數(shù)乘以0.0625,一位小數(shù)點乘以0.625,二位小數(shù)點乘以6.25。4.十進(jìn)制的“個位”求出。DS18B20的應(yīng)用電路 DS18B20測溫系統(tǒng)具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點。下面就是DS18B20幾個不同應(yīng)用方式下的測溫電路圖: 1 .DS18B20寄生電源供電方式電路圖 如下圖所示,在寄生電源供電方式下,DS18B20從單線信號線上汲取能量:在信號線DQ處于高電平期間把能量儲存在內(nèi)部 電容里,在信號線處于低電平期間消耗電容上的電能工作,直到高電
31、平到來再給寄生電源(電容)充電。 獨特的寄生電源方式有三個好處: 1)進(jìn)行遠(yuǎn)距離測溫時,無需本地電源 2)可以在沒有常規(guī)電源的條件下讀取ROM 3)電路更加簡潔,僅用一根I/O口實現(xiàn)測溫 要想使DS18B20進(jìn)行精確的溫度轉(zhuǎn)換,I/O線必須保證在溫度轉(zhuǎn)換期間提供足夠的能量,由 于每個DS18B20在溫度轉(zhuǎn)換期間工作電流達(dá)到1mA,當(dāng)幾個溫度傳感器掛在同一根I/O線上進(jìn)行多點測溫時,只靠4.7K上拉電阻就無法提供足夠的 能量,會造成無法轉(zhuǎn)換溫度或溫度誤差極大。 因此,此電路只適應(yīng)于單一溫度傳感器測溫情況下使用,不適宜采用電池供電系統(tǒng)中。并且工作電源VCC必須保證在5V,當(dāng)電源電壓下降時,寄生電源
32、能夠汲取的能量也降低,會使溫度誤差變大。 2. DS18B20的外部電源供電方式 在外部電源供電方式下,DS18B20工作電源由VDD引腳接入,此時I/O線不需要強(qiáng)上拉,不存在電源電流不足的問題,可以保證 轉(zhuǎn)換精度,同時在總線上理論可以掛接任意多個DS18B20傳感器,組成多點測溫系統(tǒng)。注意:在外部供電的方式下,DS18B20的GND引腳不能懸空 ,否則不能轉(zhuǎn)換溫度,讀取的溫度總是85。 外部供電方式單點測溫電路 外部供電方式的多點測溫電路圖 圖7外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強(qiáng),而且電路也比較簡單,
33、可以開發(fā)出穩(wěn)定可靠的多點溫度 監(jiān)控系統(tǒng)。站長推薦大家在開發(fā)中使用外部電源供電方式,畢竟比寄生電源方式只多接一根VCC引線。在外接電源方式下, 可以充分發(fā)揮DS18B20寬電源電壓范圍的優(yōu)點,即使電源電壓VCC降到3V時,依然能夠保證溫度量精度。 DS1820使用中注意事項 DS1820雖然具有測溫系統(tǒng)簡單、測溫精度高、連接方便、占用口線少等優(yōu)點,但在實際應(yīng)用中也應(yīng)注意以下幾方面的問題: 1、 較小的硬件開銷需要相對復(fù)雜的軟件進(jìn)行補償,由于DS1820與微處理器間采用串行數(shù)據(jù)傳送,因此 ,在對DS1820進(jìn)行讀寫編程時,必須嚴(yán)格的保證讀寫時序,否則將無法讀取測溫結(jié)果。在使用PL/M、C等高級語言
34、進(jìn)行系統(tǒng)程序設(shè)計時,對 DS1820操作部分最好采用匯編語言實現(xiàn)。 2、 在DS1820的有關(guān)資料中均未提及單總線上所掛DS1820數(shù)量問題,容易使人誤認(rèn)為可以掛任意多個 DS1820,在實際應(yīng)用中并非如此。當(dāng)單總線上所掛DS1820超過8個時,就需要解決微處理器的總線驅(qū)動問題,這一點在進(jìn)行多點測溫系統(tǒng)設(shè)計時 要加以注意。3、 連接DS1820的總線電纜是有長度限制的。試驗中,當(dāng)采用普通信號電纜傳輸長度超過50m時,讀取的 測溫數(shù)據(jù)將發(fā)生錯誤。當(dāng)將總線電纜改為雙絞線帶屏蔽電纜時,正常通訊距離可達(dá)150m,當(dāng)采用每米絞合次數(shù)更多的雙絞線帶屏蔽電纜時,正 常通訊距離進(jìn)一步加長。這種情況主要是由總線
35、分布電容使信號波形產(chǎn)生畸變造成的。因此,在用DS1820進(jìn)行長距離測溫系統(tǒng)設(shè)計時要充分考 慮總線分布電容和阻抗匹配問題。4、 在DS1820測溫程序設(shè)計中,向DS1820發(fā)出溫度轉(zhuǎn)換命令后,程序總要等待DS1820的返回信號,一旦 某個DS1820接觸不好或斷線,當(dāng)程序讀該DS1820時,將沒有返回信號,程序進(jìn)入死循環(huán)。這一點在進(jìn)行DS1820硬件連接和軟件設(shè)計時也要給予 一定的重視。 測溫電纜線建議采用屏蔽4芯雙絞線,其中一對線接地線與信號線,另一組接VCC和地線,屏蔽層在源端單點接地。 3.2LCD1602液晶顯示簡介液晶顯示原理液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進(jìn)行
36、控制,有電就有顯示,這樣即可以顯示出圖形。液晶顯示器具有厚度薄、適用于大規(guī)模集成電路直現(xiàn)全彩色顯示的特點,目前已經(jīng)被廣泛應(yīng)用在便攜式電腦、數(shù)字?jǐn)z像機(jī)、PDA移動通信工具等眾多領(lǐng)域。液晶顯示器的分類液晶顯示的分類方法有很多種,通??砂雌滹@示方式分為段式、字符式、點陣式等。除了黑白顯示外,液晶顯示器還有多灰度有彩色顯示等。如果根據(jù)驅(qū)動方式來分,可以分為靜態(tài)驅(qū)動(Static)、單純矩陣驅(qū)動(Simple Matrix)和主動矩陣驅(qū)動(Active Matrix)三種。液晶顯示器各種圖形的顯示原理:線段的顯示點陣圖形式液晶由M×N個顯示單元組成,假設(shè)LCD顯示屏有64行,每行有128列,每
37、8列對應(yīng)1字節(jié)的8位,即每行由16字節(jié),共16×8=128個點組成,屏上64×16個顯示單元與顯示RAM區(qū)1024字節(jié)相對應(yīng),每一字節(jié)的內(nèi)容和顯示屏上相應(yīng)位置的亮暗對應(yīng)。例如屏的第一行的亮暗由RAM區(qū)的000H00FH的16字節(jié)的內(nèi)容決定,當(dāng)(000H)=FFH時,則屏幕的左上角顯示一條短亮線,長度為8個點;當(dāng)(3FFH)=FFH時,則屏幕的右下角顯示一條短亮線;當(dāng)(000H)=FFH,(001H)=00H,(002H)=00H,(00EH)=00H,(00FH)=00H時,則在屏幕的頂部顯示一條由8段亮線和8條暗線組成的虛線。這就是LCD顯示的基本原理。字符的顯示用LCD
38、顯示一個字符時比較復(fù)雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對應(yīng)的代碼即可。漢字的顯示漢字的顯示一般采用圖形的方式,事先從微機(jī)中提取要顯示的漢字的點陣碼(一般用字模提取軟件),每個漢字占32B,分左右兩半,各占16B,左邊為1、3、5右邊為2
39、、4、6根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)可找出顯示RAM對應(yīng)的地址,設(shè)立光標(biāo),送上要顯示的漢字的第一字節(jié),光標(biāo)位置加1,送第二個字節(jié),換行按列對齊,送第三個字節(jié)直到32B顯示完就可以LCD上得到一個完整漢字。2 1602字符型LCD簡介字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實物如圖:圖1602字符型液晶顯示器實物圖108.2.1 1602LCD的基本參數(shù)及引腳功能1602LCD主要技術(shù)參數(shù):顯示容量
40、:16×2個字符芯片工作電壓:4.55.5V工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V字符尺寸:2.95×4.35(W×H)mm引腳功能說明1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表10-13所示:編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負(fù)極表10-13:引腳接口說明表第1腳:VSS為地電源。第2
41、腳:VDD接5V正電源。第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。第5腳:R/W為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時可以讀忙信號,當(dāng)RS為高電平R/W為低電平時可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。第714腳:D0D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背
42、光源負(fù)極。1602LCD的指令說明及時序1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表所示:序號指令RSR/WD7D6D5D4D3D2D1D01清顯示(01H)00000000012()光標(biāo)返回(02H)000000001*3置輸入模式(04H-07H)00000001I/DS4顯示開/關(guān)控制(08H-0FH)0000001DCB5光標(biāo)或字符移位(10H-1FH)000001S/CR/L*6置功能(20H-3FH)00001DLNF*7置字符發(fā)生存貯器地址(40H-7FH)0001字符發(fā)生存貯器地址8置數(shù)據(jù)存貯器地址(80H-)001顯示數(shù)據(jù)存貯器地址9讀忙標(biāo)志或地址01BF計數(shù)器地址1
43、0寫數(shù)到CGRAM或DDRAM)10要寫的數(shù)據(jù)內(nèi)容11從CGRAM或DDRAM讀數(shù)11讀出的數(shù)據(jù)內(nèi)容 控制命令表1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實現(xiàn)的。(說明:1為高電平、0為低電平)指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控
44、制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。指令5:光標(biāo)或顯示移位 S/C:高電平時移動顯示的文字,低電平時移動光標(biāo)。指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。指令7:字符發(fā)生器RAM地址設(shè)置。指令8:DDRAM地址設(shè)置。指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。指令10:寫數(shù)據(jù)。指令11:讀數(shù)據(jù)。與HD44780相兼容的芯片時序表如下:讀狀態(tài)輸入RS=L,R/W=H,E=H輸出D0D7=狀態(tài)
45、字寫指令輸入RS=L,R/W=L,D0D7=指令碼,E=高脈沖輸出無讀數(shù)據(jù)輸入RS=H,R/W=H,E=H輸出D0D7=數(shù)據(jù)寫數(shù)據(jù)輸入RS=H,R/W=L,D0D7=數(shù)據(jù),E=高脈沖輸出無 基本操作時序表1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,下圖是1602的內(nèi)部顯示地址。1602LCD內(nèi)部顯示地址例如第二行第一個字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯
46、示地址時要求最高位D7恒定為高電平1所以實際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B(80H)=11000000B(C0H)。在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時光標(biāo)是自動右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,如下圖所示,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,
47、我們就能看到字母“A”圖10-58 字符代碼與圖形對應(yīng)圖1602LCD的一般初始化(復(fù)位)過程延時15mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)延時5mS寫指令38H(不檢測忙信號)以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號序號指令RSR/WD7D6D5D4D3D2D1D06置功能00001DLNF*指令6:功能設(shè)置命令 DL:高電平時為4位總線,低電平時為8位總線 N:低電平時為單行顯示,高電平時雙行顯示 F: 低電平時顯示5x7的點陣字符,高電平時顯示5x10的點陣字符。寫指令38H:顯示模式設(shè)置4顯示開/關(guān)控制0000001DCB指令4:顯示開關(guān)控制。 D
48、:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。寫指令08H:顯示關(guān)閉寫指令01H:顯示清屏寫指令06H:顯示光標(biāo)移動設(shè)置寫指令0CH:顯示開及光標(biāo)設(shè)置 1602LCD的軟硬件設(shè)計實例1 硬件原理圖1602液晶顯示模塊可以和單片機(jī)AT89C51直接接口,電路如圖10-60所示。 硬件原理圖2 程序流程圖 軟件流程圖3 軟件代碼#include <reg51.h>#include <intrins.h>sbit ds=P33;/溫度傳感器信號線typede
49、f unsigned char BYTE;typedef bit BOOL; typedef unsigned int uint;sbit LCD_RS = P20; sbit LCD_RW = P21;sbit LCD_EP = P22;uint temp;BYTE code dis1 = " temperature "BYTE data disdata5;delay(int ms) / 延時子程序int i;while(ms-) for(i = 0; i< 250; i+) _nop_(); _nop_(); _nop_(); _nop_(); BOOL lcd_
50、bz() / 測試LCD忙碌狀態(tài)BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P0 & 0x80);LCD_EP = 0;return result; lcd_wcmd(BYTE cmd) / 寫入指令數(shù)據(jù)到LCDwhile(lcd_bz();LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_(); P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0; lcd_pos(BYTE pos) /設(shè)定顯示位置lcd_wcmd(pos | 0
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融機(jī)構(gòu)風(fēng)險管理數(shù)字化轉(zhuǎn)型中的風(fēng)險管理與企業(yè)風(fēng)險管理風(fēng)險管理風(fēng)險管理風(fēng)險控制報告
- 全域旅游培訓(xùn)講座
- 憲法安全主題教育
- 腫瘤熱療后護(hù)理
- 2025年環(huán)保產(chǎn)業(yè)園循環(huán)經(jīng)濟(jì)模式下的區(qū)域生態(tài)環(huán)境治理報告
- 成人教育行業(yè)發(fā)展分析
- 2025年流媒體行業(yè)競爭格局分析報告:內(nèi)容創(chuàng)新引領(lǐng)
- 交通設(shè)備制造業(yè)數(shù)字化轉(zhuǎn)型中的智能交通設(shè)備智能交通應(yīng)急處理系統(tǒng)研究報告
- 2025年能源互聯(lián)網(wǎng)標(biāo)準(zhǔn)體系與規(guī)范研究報告
- 2025年腫瘤早篩技術(shù)臨床應(yīng)用中的患者隱私保護(hù)與倫理審查研究報告
- 茅臺銷售公司筆試題目答案
- 中醫(yī)診斷學(xué)中的慢性阻塞性肺疾病辨證
- 交通占道安全施工方案
- 《膠原蛋白介紹》課件
- 安全檢查:從新手到專家的進(jìn)階指南
- 代人貸款免責(zé)協(xié)議
- 移相變壓器計算程序標(biāo)準(zhǔn)版
- 開工“第一課”安全培訓(xùn)課件
- 腦挫裂傷臨床路徑
- 文明乘坐高鐵(課件)-(25)小學(xué)生主題班會通用版
- 【語文】重慶市沙坪壩區(qū)樹人小學(xué)一年級下冊期末復(fù)習(xí)試卷
評論
0/150
提交評論