




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、板外的第一個(gè)擴(kuò)展DS18B20溫度測(cè)量(1)理論知識(shí)DS18B20數(shù)字溫度測(cè)量傳感器,網(wǎng)上介紹很多,我就不羅嗦了。見(jiàn)圖DS18B20與前產(chǎn)品DS1820的不同:DS18B20繼承了DS1820的全部?jī)?yōu)點(diǎn),并做了如下改進(jìn) 1.供電范圍擴(kuò)大為。2.溫度分辨力可編程。3.轉(zhuǎn)換速率有很大提高.4.內(nèi)部存儲(chǔ)器映射關(guān)系發(fā)生變化。5.具有電源反接保護(hù)電路。5.體積減小一半。 對(duì)我們使用來(lái)說(shuō)最大的不同就是DS18B20可以程序設(shè)定912位的分辨率數(shù)字值,而DS1820為固定的9位數(shù)字值,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。電路的接法:DS18B20說(shuō)明書上介紹了幾種電路的接法,但我這里就說(shuō)最常用的一種
2、接法見(jiàn)圖:先介紹一下DS18B20內(nèi)部的結(jié)構(gòu):常規(guī)的內(nèi)部邏輯圖我就不說(shuō)了,只說(shuō)說(shuō)跟我們使用直接相關(guān)的內(nèi)容。DS18B20的內(nèi)部存儲(chǔ)資源分為8個(gè)字節(jié)的ROM、9個(gè)字節(jié)的RAM、3個(gè)字節(jié)的EEPROM如下圖:一、ROM:在DS18B20內(nèi)部光刻了一個(gè)長(zhǎng)度為64bit的ROM,這個(gè)編碼是器件的身份識(shí)別標(biāo)志。如下圖:64位光刻ROM的排列是:開(kāi)始(最低)8位是產(chǎn)品類型標(biāo)號(hào),對(duì)于DS18B20來(lái)說(shuō)就是(28H),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接
3、多個(gè)DS18B20的目的。二、RAM:高速暫存存儲(chǔ)器(RAM)由9個(gè)字節(jié)組成,包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測(cè)得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是溫度高限TH、溫度低限TL暫存區(qū),第五個(gè)字節(jié)是配置寄存器暫存區(qū),第6、7、8字節(jié)是系統(tǒng)保留用,就相當(dāng)于DS18B20的運(yùn)算內(nèi)存,第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。其分配如下表所示。、第0和第1字節(jié):當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在高速暫存存儲(chǔ)器的第0和第1個(gè)字節(jié)。單片機(jī)可通過(guò)單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后。對(duì)應(yīng)的溫度計(jì)算:當(dāng)符號(hào)位S=0時(shí),直接將二進(jìn)制位
4、轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測(cè)得的溫度大于0,這5位為0,只要將測(cè)到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測(cè)到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。看下圖例如+125的數(shù)字輸出為07D0H,十進(jìn)制是2000,乘以0.0625就等于125。同樣+25.0625的數(shù)字輸出為0191H,十進(jìn)制為401,乘以0.0625就得出25.0625了。-55的數(shù)字輸出為FC90H,因?yàn)榉?hào)位為1,先將取反,得1101101111
5、,再加一得1101110000,十進(jìn)制為880,乘以0.0625就得55,為負(fù)值,即55。第2第3字節(jié):RAM的第2、3、4字節(jié)和EEPROM的三個(gè)字節(jié)是對(duì)應(yīng)的,內(nèi)容是相同的,只是RAM因?yàn)槭菚捍嫫?,失電后?shù)據(jù)就丟失了。而EEPROM是電擦除只讀存儲(chǔ)器,失電后數(shù)據(jù)不會(huì)丟失。在工作時(shí)得到復(fù)位命令后就從EEPROM復(fù)制一份數(shù)據(jù)到RAM的第2、3、4字節(jié)內(nèi),作為我們進(jìn)行報(bào)警搜索、改寫報(bào)警值和改寫器件設(shè)置用,我們從外部只能對(duì)RAM進(jìn)行操作,EEPROM只能從RAM復(fù)制而得到要保存的數(shù)據(jù)。第2字節(jié)為報(bào)警值高限TH,第3字節(jié)為報(bào)警值低限。DS18B20完成一次溫度轉(zhuǎn)換后,就拿溫度值和存儲(chǔ)在TH和TL中的值
6、進(jìn)行比較,因?yàn)檫@些寄存器是8位的,所以小數(shù)位被忽略不計(jì)。TH或TL的最高有效位直接對(duì)應(yīng)16位溫度寄存器的符號(hào)位。如果測(cè)得的溫度高于TH或低于TL,器件內(nèi)部就會(huì)置位一個(gè)報(bào)警標(biāo)識(shí)。每進(jìn)行一次測(cè)溫就對(duì)這個(gè)標(biāo)識(shí)進(jìn)行一次更新。當(dāng)報(bào)警標(biāo)識(shí)置位時(shí),DS18B20會(huì)對(duì)報(bào)警搜索命令有反應(yīng)。這樣就允許許多DS18B20并聯(lián)在一起同時(shí)測(cè)溫,如果某個(gè)地方溫度超過(guò)了限定值。報(bào)警的器件就會(huì)被立即識(shí)別出來(lái)并讀取。而不用讀未報(bào)警的器件。第4字節(jié) 配置寄存器:第4字節(jié)的配置寄存器是用來(lái)設(shè)置DS18B20的工作模式和測(cè)量精度的,其內(nèi)容如下圖:低五位一直都是"1",TM是測(cè)試模式位,用于設(shè)置DS18B20在工作
7、模式還是在測(cè)試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來(lái)設(shè)置分辨率,如下圖所示:(DS18B20出廠時(shí)被設(shè)置為12位)我們使用時(shí)可以跟據(jù)實(shí)際需要通過(guò)修改RAM第4字節(jié)的R0和R1的值來(lái)DS18B20的溫度測(cè)量精度。需要保存這種設(shè)置時(shí),還要用一條復(fù)制命令將RAM內(nèi)的數(shù)據(jù)復(fù)制到EEPROM內(nèi)。第5、6、7、8字節(jié):前面我們已經(jīng)說(shuō)過(guò)。RAM的第5、6、7字節(jié)是器件的保留字節(jié),就相當(dāng)于器件內(nèi)部轉(zhuǎn)換運(yùn)算時(shí)所用的內(nèi)存。第8字節(jié)是循環(huán)冗余校驗(yàn)字節(jié)。它是前面8個(gè)字節(jié)的CRC值。起著對(duì)前面字節(jié)的校驗(yàn)作用。三、EEPROM:EEPROM只有三個(gè)字節(jié),和RAM的第2、3、4字節(jié)的內(nèi)容
8、相對(duì)應(yīng),它的作用就是存儲(chǔ)RAM第2、3、4字節(jié)的內(nèi)容,以使這些數(shù)據(jù)在掉電后不丟失。可能通過(guò)幾條命令將RAM的該3個(gè)字節(jié)內(nèi)容復(fù)制到EEPROM或從EEPROM將該3個(gè)字節(jié)內(nèi)容復(fù)制到RAM的第2、3、4字節(jié)去。因?yàn)槲覀儚耐獠肯敫膶憟?bào)警值和器件的設(shè)置都是只對(duì)RAM進(jìn)行操作的。要保存這些設(shè)置后的數(shù)據(jù)就還要用相應(yīng)的命令將RAM的數(shù)據(jù)復(fù)制到EEPROM去。好了,下面說(shuō)說(shuō)對(duì)DS18B20的操作都有哪些命令:對(duì)DS18B20的操作分為對(duì)ROM的操作和對(duì)RAM的操作。列表見(jiàn)下圖:實(shí)際操作的具體實(shí)現(xiàn):DS18B20是單總線器件,通訊協(xié)議包括幾種單線信號(hào)類型:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0、讀1。所有這些信號(hào)
9、,除存在脈沖外,其余都是由總線控制器(單片機(jī))發(fā)出的。根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成一次操作經(jīng)過(guò)三個(gè)步驟:要對(duì)DS18B20進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。對(duì)DS18B20復(fù)位操作:主機(jī)(單片機(jī))和DS18B20間的任何通訊都需要以初始化序列開(kāi)始,初始化序列就是主機(jī)發(fā)出一個(gè)復(fù)位脈沖跟著檢測(cè)一個(gè)DS18B20的存在脈沖,表明DS18B20已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)。初始化序列見(jiàn)下圖:主機(jī)首先發(fā)出一個(gè)480960微秒的低電平脈沖,然后釋放總線變?yōu)楦唠娖剑⒃陔S后的480微秒時(shí)間內(nèi)對(duì)總線進(jìn)行檢測(cè)
10、,如果有低電平出現(xiàn)說(shuō)明總線上有器件已做出應(yīng)答。若無(wú)低電平出現(xiàn)一直都是高電平說(shuō)明總線上無(wú)器件應(yīng)答。做為從器件的DS18B20在一上電后就一直在檢測(cè)總線上是否有480960微秒的低電平出現(xiàn),如果有,在總線轉(zhuǎn)為高電平后等待1560微秒后將總線電平拉低60240微秒做出響應(yīng)存在脈沖,告訴主機(jī)本器件已做好準(zhǔn)備。若沒(méi)有檢測(cè)到就一直在檢測(cè)等待。對(duì)DS18B20的寫和讀操作:接下來(lái)就是主機(jī)發(fā)出各種操作命令,但各種操作命令都是向DS18B20寫0和寫1組成的命令字節(jié),接收數(shù)據(jù)時(shí)也是從DS18B20讀取0或1的過(guò)程。因此首先要搞清主機(jī)是如何進(jìn)行寫0、寫1、讀0和讀1的。寫周期最少為60微秒,最長(zhǎng)不超過(guò)120微秒。
11、寫周期一開(kāi)始做為主機(jī)先把總線拉低1微秒表示寫周期開(kāi)始。隨后若主機(jī)想寫0,則繼續(xù)拉低電平最少60微秒直至寫周期結(jié)束,然后釋放總線為高電平。若主機(jī)想寫1,在一開(kāi)始拉低總線電平1微秒后就釋放總線為高電平,一直到寫周期結(jié)束。而做為從機(jī)的DS18B20則在檢測(cè)到總線被拉底后等待15微秒然后從15us到45us開(kāi)始對(duì)總線采樣,在采樣期內(nèi)總線為高電平則為1,若采樣期內(nèi)總線為低電平則為0。對(duì)于讀數(shù)據(jù)操作時(shí)序也分為讀0時(shí)序和讀1時(shí)序兩個(gè)過(guò)程。讀時(shí)隙是從主機(jī)把單總線拉低之后,在1微秒之后就得釋放單總線為高電平,以讓DS18B20把數(shù)據(jù)傳輸?shù)絾慰偩€上。DS18B20在檢測(cè)到總線被拉低1微秒后,便開(kāi)始送出數(shù)據(jù),若是要
12、送出0就把總線拉為低電平直到讀周期結(jié)束。若要送出1則釋放總線為高電平。主機(jī)在一開(kāi)始拉低總線1微秒后釋放總線,然后在包括前面的拉低總線電平1微秒在內(nèi)的15微秒時(shí)間內(nèi)完成對(duì)總線進(jìn)行采樣檢測(cè),采樣期內(nèi)總線為低電平則確認(rèn)為0。采樣期內(nèi)總線為高電平則確認(rèn)為1。完成一個(gè)讀時(shí)序過(guò)程,至少需要60us才能完成。(為什么不可以像寫時(shí)序那樣將采樣時(shí)間放在讀周期開(kāi)始后的第15微秒到45微秒之間呢。雖然目前這樣也不是不可以,但總覺(jué)得不安全。有點(diǎn)懸?。。〥S18B20的說(shuō)明書上也說(shuō),由于主機(jī)拉低總線電平時(shí)間Tint、釋放總線時(shí)的恢復(fù)時(shí)間TRC與采樣時(shí)間Tsample之和必須小于15微秒。如下圖13。為了使讀出數(shù)據(jù)更可靠
13、,說(shuō)明書上建議Tint和TRC保持時(shí)間盡可能小,把控制器采樣時(shí)間放到15微秒周期的最后。如下圖14。(要是像寫周期那樣不就從容了,何必搞得緊緊張張的,唉?。┖茫∨辶巳绾螐?fù)位,如何寫1寫0和讀1讀0,我們現(xiàn)在就要看看在總線上如何進(jìn)行實(shí)際的運(yùn)用。例如,我們做兩個(gè)操作,第一個(gè)是讓DS18B20進(jìn)行一次溫度的轉(zhuǎn)換。第二是讀取RAM內(nèi)的溫度。讓DS18B20進(jìn)行一次溫度的轉(zhuǎn)換。前面已經(jīng)講過(guò)每一個(gè)對(duì)DS18B20的操作都要有三個(gè)步驟。一是復(fù)位操作。二是對(duì)ROM的操作。三是對(duì)RAM的操作?,F(xiàn)在我們要做的是讓DS18B20進(jìn)行一次溫度的轉(zhuǎn)換,那具體的操作就是:1、主機(jī)先作個(gè)復(fù)位操作,2、主機(jī)再寫跳過(guò)ROM的
14、操作(CCH)命令,3、然后主機(jī)接著寫個(gè)轉(zhuǎn)換溫度的操作命令,后面釋放總線至少一秒,讓DS18B20完成轉(zhuǎn)換的操作。在這里要注意的是每個(gè)命令字節(jié)在寫的時(shí)候都是低字節(jié)先寫,例如CCH的二進(jìn)制為11001100,在寫到總線上時(shí)要從低位開(kāi)始寫,寫的順序是“零、零、壹、壹、零、零、壹、壹”。整個(gè)操作的總線狀態(tài)如下圖。讀取RAM內(nèi)的溫度數(shù)據(jù)。同樣,這個(gè)操作也要接照三個(gè)步驟。1、主機(jī)發(fā)出復(fù)位操作并接收DS18B20的應(yīng)答(存在)脈沖。2、主機(jī)發(fā)出跳過(guò)對(duì)ROM操作的命令(CCH)。3、主機(jī)發(fā)出讀取RAM的命令(BEH),隨后主機(jī)依次讀取DS18B20發(fā)出的從第0一第8,共九個(gè)字節(jié)的數(shù)據(jù)。如果只想讀取溫度數(shù)據(jù),
15、那在讀完第0和第1個(gè)數(shù)據(jù)后就不再理會(huì)后面DS18B20發(fā)出的數(shù)據(jù)即可。同樣讀取數(shù)據(jù)也是低位在前的。整個(gè)操作的總線狀態(tài)如下圖:在這里得說(shuō)明一下,第二步跳過(guò)對(duì)ROM操作的命令是在總線上只有一個(gè)器件時(shí),為節(jié)省時(shí)間而簡(jiǎn)化的操作,若總線上不止一個(gè)器件,那么跳過(guò)ROM操作命令將會(huì)使幾器件同時(shí)響應(yīng),這樣就會(huì)出現(xiàn)數(shù)據(jù)沖突。板外的第一個(gè)擴(kuò)展DS18B20溫度測(cè)量(2)實(shí)際制做這個(gè)擴(kuò)展,電路很簡(jiǎn)單,板子就不用做了吧!把電路焊好就行了。這個(gè)是原理圖:實(shí)際接線圖如下:接好的實(shí)物圖如下:接下來(lái)就是寫程序了,我們還是一步步地來(lái)完成:向總線發(fā)出復(fù)位信號(hào):sbit TMDAT=P11;/設(shè)P1.1為TMDATvoid tmr
16、eset(void)uint i;TMDAT=0; /將總線拉低i=103;while(i>0) i-; /延時(shí)700微秒TMDAT=1; /釋放總線i=4;while(i>0) i-; /延時(shí)40微秒 檢測(cè)總線上是否有器件應(yīng)答(是否有存在信號(hào)):void tmpre(void)uint i;while(TMDAT); /檢測(cè)低電平的存在。否則一直循環(huán)。wh
17、ile(TMDAT); /檢測(cè)高電平的存在。否則一直循環(huán)。i=4;while(i>0) i-; /延時(shí)這段程序就是檢測(cè)一個(gè)先低后高的脈沖的存在。說(shuō)明有器件應(yīng)答了。 從DS18B20上讀一個(gè)bitbit tmrbit(void)uint i;bit dat;TMDAT=0; /先將總線拉低i+; /延時(shí)一微秒TMDAT=1; /釋放總線i+;
18、i+; /延時(shí)兩微秒dat=TMDAT; /讀取總線i=8;while(i>0) i-; /延時(shí)return(dat); 向總線寫一個(gè)bitvoid tmwbit(bit testb)if(testb)
19、0; /如果是1 TMDAT=0; /先拉低總線 i+; i+; /延時(shí)2微秒 TMDAT=1;
20、 /釋放總線 i=8; while(i>0) i-; /延時(shí)40微秒 else
21、; /如果是0 TMDAT=0; /先拉低總線 i=8; while(i>0) i-; /延時(shí)40微秒
22、 TMDAT=1; /釋放總線 i+; i+; /延時(shí)2微秒 我這么寫大家能看懂吧!與單片機(jī)連接圖:好!現(xiàn)在上完整的程序:(要慢慢的讀了)/LCD12864/*/連線表: CPU=89C51
23、SysClock=12MHz */RS=P2.0 R/W=P2.1 E=P2.2 CS1=P2.3 CS2=P2.4 */DB0-DB7=P3.0-P3.7
24、 /Reset=InBoard */*/DS18B20/*/連線表: CPU=89C51 SysClock=12MHz &
25、#160; */單總線: TMDAT=P1.1/ /* #include <reg52.h>#include <stdlib.h>#include <intrins.h>#include <stdio.h> #include <math.h>#define uchar unsign
26、ed char#define uint unsigned int/*LCD引腳定義*/ #define DataPort P3 /LCD128*64 I/O 信號(hào)管腳sbit RS =P20; /數(shù)據(jù)指令sbit RW =P21; /讀寫sbit E =P22;
27、160; /使能sbit CSL =P23; /左片選sbit CSR =P24; /右片選 uchar Page; /頁(yè) 地址uchar Col;
28、; /列 地址 uchar code ASC_5x7; /5×7陣點(diǎn)字模uchar str4; /char的值轉(zhuǎn)換成字符串/*DS18B20引腳定義*/ sbit TMDAT=P11;/*DS18B20函數(shù)定義*/void dmsec(uint count);/延時(shí)(count)毫秒void tmreset(void);
29、0; /產(chǎn)生復(fù)位信號(hào)void tmpre(void); /檢測(cè)器件應(yīng)答信號(hào)bit tmrbit(void); /從總線讀一個(gè)bituchar tmrbyte(void); /從總線讀一個(gè)字節(jié)void mwbyte(uchar dat);/向總線寫一個(gè)字節(jié)void tmstart(void); /啟動(dòng)一次溫度轉(zhuǎn)換uchar tmrtemp(void); /讀取溫度數(shù)據(jù)/*LCD函數(shù)定義*/voi
30、d BusyL(void); /左屏檢測(cè)忙void BusyR(void); /右屏檢測(cè)忙void CheckBusy(void); /讀取忙信號(hào)void Delay(uint MS); /延時(shí)void Locatexy(void);
31、60; /將屏幕橫向0-12縱向07轉(zhuǎn)換成左、右屏的的X、Yvoid WriteCommandL( uchar CommandByte ); /向左屏寫入指令void WriteCommandR( uchar CommandByte ); /向右屏寫入指令uchar ReadData( void ); /讀數(shù)據(jù)void WriteData( uchar DataByte );
32、60; /寫數(shù)據(jù)void LcmClear( void ); /清屏void LcmInit( void ); /初始化uchar * uchartostr(unsigned char unm); /將值轉(zhuǎn)成字符串void LcmPutAsc( uchar asc );
33、60; /顯示一個(gè)5×7的ASC字符void LcmPutstr( uchar row,uchar y,uchar * str ); /在設(shè)定位置顯示字符串/*DS18B20函數(shù)體定義*/void dmsec(uint count)uint i;while(count-) for(i=0;i<125;i+) void tmreset(void)uint i;TMDAT=0;i=103;while(i>0) i-;TMDAT=1;i=4;while(i&g
34、t;0) i-;void tmpre(void)uint i;while(TMDAT);while(TMDAT);i=4;while(i>0) i-;bit tmrbit(void)uint i;bit dat;TMDAT=0;i+;TMDAT=1;i+;i+;dat=TMDAT;i=8;while(i>0) i-;return(dat);uchar tmrbyte(void)uchar i,j,dat;dat=0;for(i=1;i<=8;i+) j=tmrbit(); dat=(j<<7)|(dat>>1);re
35、turn(dat);void tmwbyte(uchar dat)uint i;uchar j;bit testb;for(j=1;j<=8;j+) testb=dat & 0x01; dat=dat>>1; if(testb) TMDAT=0; i+; i+;
36、 TMDAT=1; i=8; while(i>0) i-; else TMDAT=0; &
37、#160; i=8; while(i>0) i-; TMDAT=1; i+; i+; void tmstart(void)tmreset();tmpre();dmsec(1
38、);tmwbyte(0xcc);tmwbyte(0x44);uchar tmrtemp(void)uchar a,b,y1,y2,y3;tmreset();tmpre();dmsec(1);tmwbyte(0xcc);tmwbyte(0xbe);a=tmrbyte();b=tmrbyte();y1=a>>4;y2=b<<4;y3=y1|y2;return(y3);/*LCD12864函數(shù)體*/*/*檢查Busy
39、60; */*/void BusyL(void) CSL= 1; CSR= 0; CheckBusy(); void BusyR(void) CSL= 0; &
40、#160; CSR= 1; CheckBusy(); void CheckBusy(void) RS = 0; /指令 RW = 1;DataPort= 0xFF; /輸出0xff以
41、便讀取正確 E = 1; _nop_(); while(0);/DataPort & 0x80); /Status Read Bit7 = BUSY E = 0;
42、; _nop_(); /*/*根據(jù)設(shè)定的坐標(biāo)數(shù)據(jù),定位LCM上的下一個(gè)操作單元位置 */*/void Locatexy(void) uchar x,y; switch (Col&0xc0) /* col.and.0xC0 &
43、#160; */ /*條件分支執(zhí)行 */
44、60; case 0: BusyL();break;/*左區(qū) */ case 0x40: BusyR();break;/*右區(qū) */
45、 x = Col&0x3F|0x40; /* col.and.0x3f.or.Set Y Address*/ y = Page&0x07|0xB8; /* row.and.0x07.or.set Page
46、60; */ CheckBusy(); /* waitting for enable */ RS = 0; &
47、#160; /指令 RW = 0; /寫 DataPort = y;
48、160; /設(shè)置頁(yè)面地址 E = 1; _nop_(); E = 0; _nop_(); CheckBusy
49、(); /* waitting for enable */ RS = 0; RW = 0; DataPort = x; &
50、#160; /設(shè)置列地址 E = 1; _nop_(); E = 0; _nop_(); /*/*寫指令
51、60; */*/void WriteCommandL( uchar CommandByte ) BusyL(); DataPort = CommandByte;
52、0; RS = 0; /指令 RW = 0; E = 1; _nop_(); E = 0;
53、60; _nop_(); void WriteCommandR( uchar CommandByte ) BusyR(); DataPort = CommandByte; RS = 0; /指令
54、 RW = 0; E = 1; _nop_(); E = 0; _nop_(); /*/*讀數(shù)據(jù) &
55、#160; */*/uchar ReadData( void ) uchar DataByte; Locatexy(); /*坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變 */
56、160; RS = 1; /*數(shù)據(jù)輸出*/ RW = 1; /*讀入 */ DataPort = 0xFF;
57、 /輸出0xff以便讀取正確 E = 1; /*讀入到LCM*/ _nop_(); DataByte = DataPort; /*數(shù)據(jù)讀出到數(shù)據(jù)口P1 */
58、 E = 0; _nop_(); return DataByte; /*/*寫數(shù)據(jù) */*/void WriteData( uchar DataByte ) &
59、#160; Locatexy(); /*坐標(biāo)定位,返回時(shí)保留分區(qū)狀態(tài)不變 */ RS = 1; /*數(shù)據(jù)輸出*/ RW = 0;
60、160; /*寫輸出 */ DataPort = DataByte; /*數(shù)據(jù)輸出到數(shù)據(jù)口 */ E = 1; /*寫入到LCM*/ _nop_();
61、60; E = 0; _nop_(); void LcmClear( void ) Page = 0; Col = 0; for(Page=0;Page<8;Page+)
62、60; for(Col=0;Col<128;Col+) WriteData(0); void LcmInit( void ) Delay(200);
63、160; /等待復(fù)位 WriteCommandL(0x3f); /開(kāi)顯示 WriteCommandR(0x3f); WriteCommandL(0xc0); /設(shè)置起始
64、地址=0 WriteCommandR(0xc0); WriteCommandL(0x3f); /開(kāi)顯示 WriteCommandR(0x3f); LcmClear();
65、 Col = 0; Page= 0; Locatexy();uchar * uchartostr(uchar unm)uchar x00,xx,x0,x,n;x00=unm/100;xx=unm%100;x0=xx/10;x=xx%10;n=0;if(x00!=0) strn=x00+48; /值加48即為字符 n+;if(!(x00=0&
66、;x0=0) strn=x0+48; n+;strn=x+48;n+;strn='0' return str;void LcmPutAsc( uchar asc ) uchar j; uint x; x = 5*(asc-32);
67、60; for(j=0;j<5;j+) WriteD
68、ata(ASC_5x7x); x+; Col+;
69、 WriteData(0x00); Col+;void LcmPutstr( uchar row,uchar y,uchar * str )
70、unsigned char * x; x=str;Page=row;Col=y;while(*x!='0') LcmPutAsc( *x ); x+;void Delay(uint MS) uchar us,usn; while(MS!=0)
71、160; usn = 2; /for 12M while(usn!=0)
72、 us=0xf6;
73、160; while (us!=0)us-; usn-; &
74、#160; MS-; void Main( void ) uchar last; LcmInit(); LcmClear();
75、60; dmsec(1); tmstart(); dmsec(1000); last=tmrtemp(); LcmPutstr( 4,76,uchartostr(last) ); LcmPutstr( 2,42,"DS18B20" ); LcmPutstr( 4,2,"Temper
76、ature" ); LcmPutstr( 4,92,"'C" ); LcmPutstr( 7,42,"" ); while(1) dmsec(1); tms
77、tart(); dmsec(1000); last=tmrtemp(); LcmPutstr( 4,76,uchartostr(last) ); /Delay(1000); unsigned char code ASC_5x7=
78、0x00, 0x00, 0x00, 0x00, 0x00, /0x00, 0x00, 0x4F, 0x00, 0x00, /0x00, 0x07, 0x00, 0x07, 0x00, /0x14, 0x7F, 0x14, 0x7F, 0x14, /0x24, 0x2A, 0x7F, 0x2A, 0x12, /0x23, 0x13, 0x08, 0x64, 0x62, /0x36, 0x49, 0x55, 0x22, 0x50, /0x00, 0x05, 0x03, 0x00, 0x00, /0x00, 0x1C, 0x22, 0x41, 0x00, /0x00, 0x41, 0x22, 0x1C, 0x00, /0x14, 0x08, 0x3E, 0x08, 0x14, /0x08, 0x08, 0x3E, 0x08, 0x08, /0x00, 0x50, 0x30, 0x00, 0x00, /0x08, 0x08, 0x08, 0x08, 0x00, /0x00, 0x60, 0x60, 0x00, 0x00, /0x2
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同解除條件合同范本
- 反擔(dān)保合同范例app
- 小學(xué)課題申報(bào)書 寫字
- 高校省級(jí)課題申報(bào)書
- 員工合同范本表
- 師德建設(shè)課題申報(bào)書
- 企業(yè)員工租房合同范本
- 吉安農(nóng)村生意轉(zhuǎn)讓合同范例
- 申報(bào)課題沒(méi)申報(bào)書
- 醫(yī)療務(wù)工合同范本武威市
- 復(fù)婚合同協(xié)議書模板
- U8-EAI二次開(kāi)發(fā)說(shuō)明
- 2006 年全國(guó)高校俄語(yǔ)專業(yè)四級(jí)水平測(cè)試試卷
- 浙江省勞動(dòng)保障監(jiān)察員培訓(xùn)監(jiān)察執(zhí)法程序(林琳)
- 新人教版數(shù)學(xué)四年級(jí)下冊(cè)全冊(cè)表格式教案
- 閩教版(2020版)六年級(jí)下冊(cè)信息技術(shù)整冊(cè)教案
- ad-hoc第二章-ad-hoc網(wǎng)絡(luò)中的MAC協(xié)議
- 二手房買賣合同正式版空白
- 食品銷售經(jīng)營(yíng)者食品安全管理制度(零售)
- 通信電源-概述ppt課件
- 法大民商考博真題匯總
評(píng)論
0/150
提交評(píng)論