版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于89C51單片機(jī)的數(shù)字溫度計設(shè)計</p><p><b> 1 引言</b></p><p> 本次課程設(shè)計的目的是設(shè)計一種數(shù)字溫度計,在設(shè)計方法要遵循模塊化的設(shè)計方法,該數(shù)字溫度計主要應(yīng)用于環(huán)境的溫度檢測,所以需要以下幾點(diǎn)要求:</p><p> ?。?)測量的溫度的范圍不宜過大,保證同時能夠測量零上溫度和零下溫
2、度。</p><p> ?。?)誤差應(yīng)當(dāng)小于物理溫度計由于觀察造成的誤差。</p><p> (3)該溫度計的數(shù)字界面要友好直觀在溫度計出現(xiàn)錯誤時要能夠報錯。</p><p> 2 設(shè)計方案及原理說明</p><p><b> 2.1設(shè)計方案</b></p><p> 本次可程設(shè)計的課題是
3、數(shù)字溫度計,我們的重點(diǎn)是溫度的采集即測溫電路。由此可以得到以下兩個方案:</p><p> 方案一:通過利用熱敏電阻的感溫效應(yīng),將隨被測溫度變化的電壓或電流采集過來,進(jìn)行A/D轉(zhuǎn)換后,用單片機(jī)對其進(jìn)行溫度處理,在顯示元件上顯示。優(yōu)點(diǎn):所用的電子元件容易得到,單片機(jī)處理程序簡單。缺點(diǎn):電路過于復(fù)雜,精度較差,容易受到外界環(huán)境的影響。</p><p> 方案二:使用DS18B20傳感器。該
4、傳感器可以測量-55℃至125℃范圍內(nèi)的溫度值,將采集的溫度數(shù)據(jù)轉(zhuǎn)換成16位二進(jìn)制數(shù),由單片機(jī)負(fù)責(zé)計算轉(zhuǎn)換成相應(yīng)溫度值,并且通過顯示元件上顯示。優(yōu)點(diǎn);精度較高,電路設(shè)計較為簡單,用到的電子元件較少。缺點(diǎn):對與軟件的要求比較高。綜上,選擇方案二更為合理。</p><p><b> 2.2設(shè)計原理</b></p><p> 有上述方案,我們可以將本次課程設(shè)計分為硬件設(shè)
5、計和軟件設(shè)計兩部分。其中硬件電路又分為DS18B20傳感器檢測電路、1602LCD顯示電路、包含復(fù)位電路及內(nèi)部時鐘電路的單片機(jī)控制電路。軟件設(shè)計通過使用C語言編程,利用Keil Uvision3對其進(jìn)行編譯并通過單片機(jī)開發(fā)板進(jìn)行仿真。</p><p> 該系統(tǒng)總的來說有三大模塊構(gòu)成,分別是傳感器模塊、顯示模塊以及單片機(jī)模塊。其組成原理是這樣的,單片機(jī)寫入讀取和控制傳感器的命令,使DS18B20采集溫度數(shù)據(jù)并將其
6、傳輸?shù)絾纹瑱C(jī)后單片機(jī)負(fù)責(zé)把接收到的數(shù)字量經(jīng)過數(shù)據(jù)的進(jìn)制轉(zhuǎn)換和相應(yīng)的計算,并且將其送入到顯示屏顯示。為了能夠顯示信息,單片機(jī)還通過自行編寫的程序來控制寫入地址,寫入數(shù)據(jù)及顯示命令來達(dá)到在1602LCD顯示屏上顯示溫度傳感器檢測到的溫度的功能。設(shè)計框圖如下圖1所示。</p><p> 圖1 數(shù)字溫度計設(shè)計框圖</p><p> 3 數(shù)字溫度計硬件電路設(shè)計</p><p
7、> 3.1數(shù)字溫度計設(shè)計芯片選擇</p><p> 本次課程設(shè)計用到了89C51單片機(jī)、DS18B20溫度傳感器和1602LCD屏。</p><p> 3.2數(shù)字溫度計硬件連接方法及原理</p><p> 該系統(tǒng)連接方法如下1602LCD 的DB口是雙向的數(shù)據(jù)線與單片機(jī)P0口連接,用單片機(jī)P 2.1,P2.2 ,P2.3來分別與1602LCD的RS、R
8、W、E三個管腳連接,VDD接5V電源,VEE與VSS接地即可。傳感器的DQ與單片機(jī)P3.3相連,晶振和復(fù)位電路不作說明,該系統(tǒng)連接圖如圖2所示</p><p> 圖2 數(shù)字溫度計硬件原理連接圖</p><p> 該系統(tǒng)是基于這樣的原理進(jìn)行設(shè)計:首先因為DS18B20傳感器采集的溫度數(shù)據(jù)是以兩個字節(jié)的數(shù)據(jù)存放,用DQ口串行傳輸并與單片機(jī)P3.3相連,通過這根線單片機(jī)讀取數(shù)據(jù)和寫入指令。
9、數(shù)據(jù)進(jìn)入單片機(jī)后經(jīng)處理由P0口送入顯示塊DB口,因為單片機(jī)的P2.1,P2.2,P2.3與液晶屏的RS、RW、E相連以起到對液晶屏命令寫入和數(shù)據(jù)讀取的控制作用使液晶塊實時讀入命令和數(shù)據(jù)。</p><p> 4 數(shù)字溫度計軟件設(shè)計</p><p> 軟件編寫有三個模塊,傳感器溫器度讀取和液晶屏數(shù)據(jù)顯示及單片機(jī)對采集來溫度數(shù)據(jù)的計算。因為DS18B20溫度傳感器與單片機(jī)之間單總線串行傳輸,
10、時序非常的重要,所以我們編寫的程序時序為:傳感器復(fù)位→發(fā)送存在脈沖→發(fā)送傳感器存儲器操作指令→執(zhí)行數(shù)據(jù)讀寫指令周→傳感器復(fù)位周而復(fù)始的做溫度的采集。因為是單片測量在溫度傳感器進(jìn)行測量流程圖中跳過ROM指令,傳感器流程序程圖如附錄A圖(a)所示。1602LCD與單片機(jī)之間有八條數(shù)據(jù)線負(fù)責(zé)二者之間的通信。這里我們要注意D7口是作為忙碌位,當(dāng)單片機(jī)在向液晶屏寫入數(shù)據(jù)時必須當(dāng)該位為檢測為低電平時才可以寫入數(shù)據(jù)。顯示模塊的程序流程圖如附錄圖A(b
11、)所示。綜上主程序流程如下圖3所示。源代碼詳見附錄C。</p><p> 圖3 主程序流程圖</p><p> 在Keil Uvision3上將編寫的源代碼錄入生成后綴名為.c的文件,經(jīng)過編譯可將生成的.hex格式的文件。程序編譯調(diào)試結(jié)果如附錄B圖所示。</p><p> 6 數(shù)字溫度計的硬件仿真調(diào)試及說明</p><p> 將生成
12、的.hex其燒入單片機(jī)后接通單片機(jī)電源,系統(tǒng)開始工作。剛開始界面會顯示85℃約有1秒,后恢復(fù)正常測得室溫下如圖4所示。經(jīng)過查詢資料得因為在初始化時傳感器的寄存器中會默認(rèn)一個國定數(shù)值,經(jīng)計算后顯示正好為85,所以不可避免但能通過修改延時程序改變其顯示時間。</p><p> 圖4 測量室內(nèi)溫度</p><p> 由上圖可知室內(nèi)溫度為24.13℃,為了證明其是否可以測量實時溫度用手捏住D
13、S18B20溫度傳感器,發(fā)現(xiàn)其溫度有所變化,上升至32.05℃,如下圖6所示。</p><p> 圖5 手捏住傳感器的溫度</p><p> 當(dāng)拔掉DS18B20溫度傳感器,重新啟動傳感器時,屏幕會顯示報錯信息,如下圖7所示.。</p><p> 圖7 報錯提示信息</p><p> 經(jīng)過認(rèn)真分析,實物仿真正確,達(dá)到之前的設(shè)計要求
14、。</p><p><b> 7 總結(jié)</b></p><p> 我在設(shè)計中遇到了這樣的問題,在程序編譯好之后無法在Protues軟件中仿真電路中實現(xiàn),但是程序卻可以在實物電路中正常運(yùn)行。經(jīng)過查資料終于解決,原因是我所使用的傳感器與仿真軟件中的傳感器型號相同,但是只能夠行程序時序不同,導(dǎo)致仿真結(jié)果不能正確顯示。我通過下載新版本的軟件完成了對該設(shè)計的仿真,由于篇幅所
15、限,這里未能展示出結(jié)果。</p><p> 通過本次課程設(shè)計在設(shè)計方法上我有以下幾點(diǎn)需要總結(jié):首先,是模塊化的設(shè)計思想,這一點(diǎn)對于我們以后的學(xué)習(xí)十分重要,因為無論工程有多么的龐大總是可以劃分成很多小模塊,只要將這些小模塊挨個解決,龐大的工程問題也就迎刃而解。其次是對于這次課程設(shè)計本身的結(jié)果,我同樣有很多收獲。首先在設(shè)計中我認(rèn)識了可以單片機(jī)控制的很多電子元器件比如1602LCD顯示屏和DS18B20溫度傳感器,還
16、有其工作的方式都有了很深的認(rèn)識,其次我還明白了時序?qū)τ诔绦蚝碗娮釉骷闹匾?,如果在程序中時序處理不好輕則會影響單片機(jī)處理數(shù)據(jù)的速度,重則還會導(dǎo)致元件無法正常工作。就拿這次來說DS18B20溫度傳感器和單片機(jī)的通信就需要嚴(yán)格的時序控制,必須用延時程序嚴(yán)格控制延時的子程序。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 王思明,張金敏,茍軍
17、年,張鑫,楊喬禮.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計[M].</p><p> 北京:科學(xué)出版社,2012</p><p> [2] 李群芳.單片機(jī)原理、接口及應(yīng)用[M].北京:清華大學(xué)出版社,2005</p><p> [3] 彭為等.單片機(jī)典型系統(tǒng)設(shè)計實例精講[M].北京:電子工業(yè)出版社,2006</p><p> [4] 杜洋,DS18B
18、20傳感器技術(shù)手冊[J].深圳市安特凌科技有限公司,2007</p><p> [5] 杜洋,通用1602液晶顯示模塊使用手冊[J].偉納電子科技有限公司,2009</p><p> 附錄A 子程序流程圖</p><p> 圖(a) 傳感器模塊流程圖 圖(b) 顯示平模塊流程圖</p><
19、p> 附錄B 程序調(diào)試結(jié)果圖</p><p> 圖(a) 程序編譯結(jié)果圖</p><p> 圖(b) 程序鏈接接結(jié)果圖</p><p> 附錄C 數(shù)字溫度計程序源代碼</p><p> #include<reg51.h> //包含單片機(jī)寄存器的頭文件</p><p> #includ
20、e<intrins.h> //包含_nop_()函數(shù)定義的頭文件</p><p> unsigned char code digit[10]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字</p><p> unsigned char code Str[]={" Thermomenter "}; //說明
21、顯示的是溫度</p><p> unsigned char code Error[]={"No Sensor check!"}; //說明沒有檢測到</p><p> unsigned char code Temp[]={"Temp:"}; //說明顯示的是溫度</p><p> unsi
22、gned char code Cent[]={"C"}; //溫度單位</p><p> sbit RS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳</p><p> sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳</p><p> sb
23、it E=P2^2; //使能信號位,將E位定義為P2.2引腳</p><p> sbit BF=P0^7; //忙碌標(biāo)志位,,將BF位定義為P0.7引腳</p><p> void delay1ms() //延時功能函數(shù)延時1ms</p><p><b> {</b></p>
24、<p> unsigned char i,j;</p><p> for(i=0;i<10;i++);</p><p> for(j=0;j<33;j++);</p><p><b> }</b></p><p> void delaynms(unsigned char n) //延
25、時功能函數(shù)延時n毫秒</p><p><b> {</b></p><p> unsigned char i;</p><p> for(i=0;i<n;i++);</p><p> delay1ms();</p><p><b> }</b></p&g
26、t;<p> bit BusyTest(void) //判斷液晶屏是否忙碌的函數(shù)</p><p><b> {</b></p><p> bit result;</p><p> RS=0; //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)</p><p><b> R
27、W=1;</b></p><p> E=1; //E=1,才允許讀寫</p><p> _nop_(); //空操作</p><p><b> _nop_();</b></p><p><b> _nop_(); </b></p><p>
28、; _nop_(); //空操作四個機(jī)器周期,給硬件反應(yīng)時間</p><p> result=BF; //將忙碌標(biāo)志電平賦給result</p><p> E=0; //將E恢復(fù)低電平</p><p> return result;</p><p><b> }</b></p>
29、;<p> void WriteInstruction (unsigned char dictate) //將指令和數(shù)據(jù)寫入液晶塊的操作</p><p><b> { </b></p><p> while(BusyTest()==1); //如果忙就等待</p><p> RS=0;
30、 //根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令</p><p><b> RW=0; </b></p><p> E=0; //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,</p><p> // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"</p>
31、<p><b> _nop_();</b></p><p> _nop_(); //空操作兩個機(jī)器周期,給硬件反應(yīng)時間</p><p> P0=dictate; //將數(shù)據(jù)送入P0口,即寫入指令或地址</p><p><b> _nop_();</b>
32、</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個機(jī)器周期,給硬件反應(yīng)時間</p><p> E=1; //E置高電平&l
33、t;/p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個機(jī)器周期,給硬件反應(yīng)時間</p&
34、gt;<p> E=0; //當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令</p><p><b> }</b></p><p> void WriteAddress(unsigned char x) //指定字符顯示的實際地址的函數(shù)</p><p><b> {</b
35、></p><p> WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"</p><p><b> }</b></p><p> void WriteData(unsigned char y) //將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊的函數(shù)</p&g
36、t;<p><b> {</b></p><p> while(BusyTest()==1); //液晶塊是否忙碌</p><p> RS=1; //RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)</p><p><b> RW=0;</b></p><p>
37、 E=0; //讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"</p><p> P0=y; //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p>
38、<p><b> _nop_();</b></p><p> _nop_(); //空操作四個機(jī)器周期,給硬件反應(yīng)時間</p><p> E=1; //E置高電平</p><p><b> _nop_();</b></p><p><b&g
39、t; _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個機(jī)器周期,給硬件反應(yīng)時間</p><p> E=0; //當(dāng)E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令</p><p><
40、b> }</b></p><p> void LcdInitiate(void) //LCD的顯示模式進(jìn)行初始化設(shè)置</p><p><b> {</b></p><p> delaynms(15); //延時15ms,首次寫指令時應(yīng)給LCD一段較長的反應(yīng)時間</p>&l
41、t;p> WriteInstruction(0x38); //設(shè)置模式:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接</p><p> delaynms(5); //延時5ms,給硬件一點(diǎn)反應(yīng)時間</p><p> WriteInstruction(0x38);</p><p> delaynms(5)
42、; //延時5ms,給硬件一點(diǎn)反應(yīng)時間</p><p> WriteInstruction(0x38); //連續(xù)三次,確保初始化成功</p><p> delaynms(5); //延時5ms,給硬件一點(diǎn)反應(yīng)時間</p><p> WriteInstruction(0x0c); //顯示
43、模式設(shè)置:顯示開,無光標(biāo),光標(biāo)不閃爍</p><p> delaynms(5); //延時5ms,給硬件一點(diǎn)反應(yīng)時間</p><p> WriteInstruction(0x06); //顯示模式設(shè)置:光標(biāo)右移,字符不移</p><p> delaynms(5); //延時5ms,給硬件一點(diǎn)反應(yīng)
44、時間</p><p> WriteInstruction(0x01); //清屏幕指令,將以前的顯示內(nèi)容清除</p><p> delaynms(5); //延時5ms,給硬件一點(diǎn)反應(yīng)時間</p><p><b> } </b></p><p> sbit DQ=P3^3;<
45、/p><p> unsigned char time; //設(shè)置全局變量,專門用于嚴(yán)格延時</p><p> bit Init_DS18B20(void)//DS18B20傳感器初始化,讀取應(yīng)答信號函數(shù)</p><p><b> {</b></p><p> bit flag; //儲存DS18
46、B20存在的標(biāo)志,flag=0存在;flag=1不存在</p><p> DQ = 1; //先將數(shù)據(jù)線拉高</p><p> for(time=0;time<2;time++) //略微延時約6微秒</p><p><b> ;</b></p><p> DQ = 0;
47、 //再將數(shù)據(jù)線從高拉低,要求保持480~960us</p><p> for(time=0;time<200;time++) //略微延時約600微秒</p><p> ; //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復(fù)位脈沖 </p><p> DQ = 1; //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) &
48、lt;/p><p> for(time=0;time<10;time++); //釋放總線后需等待30us讓其輸出存在脈沖</p><p> flag=DQ; //讓單片機(jī)檢測是否輸出了存在脈沖(DQ=0表示存在) </p><p> for(time=0;time<200;time++); //延時足夠長時間,等待存在
49、脈沖輸出完畢</p><p> return (flag); //返回檢測成功標(biāo)志</p><p><b> }</b></p><p> unsigned char ReadOneChar(void) //從DS18B20讀取一個字節(jié)數(shù)據(jù)的函數(shù)</p><p><b> {</b>&
50、lt;/p><p> unsigned char i=0;</p><p> unsigned char dat; //儲存讀出的一個字節(jié)數(shù)據(jù)</p><p> for (i=0;i<8;i++)</p><p><b> {</b></p><p> DQ =1; /
51、/ 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個機(jī)器周期 </p><p> DQ = 0; //單片機(jī)從DS18B20讀數(shù)據(jù)時,將數(shù)據(jù)線正跳便開始讀</p><p><b> dat>>=1;</b></p><p> _nop_(); //等待一個機(jī)
52、器周期 </p><p> DQ = 1; //將數(shù)據(jù)線拉高,為單片機(jī)檢測DS18B20的輸出作準(zhǔn)備</p><p> for(time=0;time<2;time++);//延時約6us,使主機(jī)在15us內(nèi)采樣</p><p><b> if(DQ==1)</b></p><p> dat
53、|=0x80; //如果讀到的數(shù)據(jù)是1,則將1存入dat</p><p><b> else</b></p><p> dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat</p><p> //將單片機(jī)檢測到的電平信號DQ存入r[i]</p><p> for(time=0;time<8;ti
54、me++);//延時14us,兩個讀時序間必須大于恢復(fù)期</p><p> } </p><p> return(dat); //返回讀出的十進(jìn)制數(shù)據(jù)</p><p><b> }</b></p><p> WriteOneChar(unsigned char da
55、t) //DS18B20寫入一個字節(jié)數(shù)據(jù)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> for (i=0; i<8; i++)</p><p><b> {</b></p><p> DQ =1
56、; // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個機(jī)器周期 </p><p> DQ=0; //將數(shù)據(jù)線從高拉低時即啟動寫時序 </p><p> DQ=dat&0x01; //利用與運(yùn)算取出要寫的某位二進(jìn)制數(shù)據(jù),</p><p> //并將
57、其送到數(shù)據(jù)線上等待DS18B20采樣</p><p> for(time=0;time<10;time++)</p><p> ;//延時約20us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣</p><p> DQ=1; //釋放數(shù)據(jù)線 </p><p> for(time=0;
58、time<1;time++);//延時2us,兩個寫時序間需要1us的恢復(fù)期</p><p> dat>>=1; //將dat中的各二進(jìn)制位數(shù)據(jù)右移1位</p><p><b> }</b></p><p> for(time=0;time<4;time++); //稍作延時,給硬件一點(diǎn)反應(yīng)時間<
59、/p><p><b> }</b></p><p> void display_error(void) //顯示沒有檢測到DS18B20的函數(shù)</p><p><b> {</b></p><p> unsigned char i;</p><p> WriteAddr
60、ess(0x00); //寫顯示地址,將在第1行第1列開始顯示</p><p> i = 0; //從第一個字符開始顯示</p><p> while(Error[i] != '\0') //只要沒有寫到結(jié)束標(biāo)志,就繼續(xù)寫</p><p><b> {</b></p&
61、gt;<p> WriteData(Error[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p><p> delaynms(100); //延時100ms較長時間 }</p><p> while(1) //進(jìn)入
62、死循環(huán),等待查明原因</p><p><b> ;</b></p><p><b> }</b></p><p> void display_explain(void) //顯示說明函數(shù)</p><p><b> {</b></p><
63、p> unsigned char i;</p><p> WriteAddress(0x00); //寫顯示地址,將在第1行第1列開始顯示</p><p> i = 0; //從第一個字符開始顯示</p><p> while(Str[i] != '\0') //只要沒有寫到結(jié)束標(biāo)志,就繼續(xù)寫<
64、;/p><p><b> {</b></p><p> WriteData(Str[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p><p> delaynms(100); </p><p>
65、;<b> }</b></p><p><b> }</b></p><p> void display_symbol(void) //顯示溫度符號</p><p><b> {</b></p><p> unsigned char i;</p>
66、<p> WriteAddress(0x40); //寫顯示地址,將在第2行第1列開始顯示</p><p> i = 0; //從第一個字符開始顯示</p><p> while(Temp[i] != '\0') //只要沒有寫到結(jié)束標(biāo)志,就繼續(xù)寫</p><p><b> {
67、</b></p><p> WriteData(Temp[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p><p> delaynms(50); //延時50ms給硬件一點(diǎn)反應(yīng)時間</p><p><b> }&l
68、t;/b></p><p><b> }</b></p><p> void display_dot(void) //顯示溫度的小數(shù)點(diǎn)</p><p> { </p><p> WriteAddress(0x49); //寫顯示地址,將在第2行第10列開始顯示 </
69、p><p> WriteData('.'); //將小數(shù)點(diǎn)的字符常量寫入LCD</p><p> delaynms(50); //延時50ms給硬件一點(diǎn)反應(yīng)時間</p><p><b> }</b></p><p> void display_minus(); (voi
70、d)</p><p> { </p><p> WriteAddress(0x45); //寫顯示地址,將在第2行第10列開始顯示 </p><p> WriteData('-'); //將小數(shù)點(diǎn)的字符常量寫入LCD</p><p> delaynms(50); /
71、/延時50ms給硬件一點(diǎn)反應(yīng)時間</p><p><b> }</b></p><p> void display_cent(void) //顯示溫度的單位函數(shù)</p><p><b> {</b></p><p> unsigned char i; </p>&
72、lt;p> WriteAddress(0x4c); //寫顯示地址在第2行第13列 i = 0; //從第一個字符開始顯示 </p><p> while(Cent[i] != '\0') //只要沒有寫到結(jié)束標(biāo)志,就繼續(xù)寫</p><p><b> {</b>
73、</p><p> WriteData(Cent[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p><p> delaynms(50); //延時50ms給硬件一點(diǎn)反應(yīng)時間</p><p><b> }</b><
74、;/p><p><b> }</b></p><p> void display_temp1(unsigned char x) //整數(shù)輸出部分</p><p><b> {</b></p><p> unsigned char j,k,l; //j,k,l分別儲存溫度的百位、十位和個
75、位</p><p> j=x/100; //取百位</p><p> k=(x%100)/10; //取十位</p><p> l=x%10; //取個位 </p><p> WriteAddress(0x46); //寫顯示地址,將在第2行第7列開始顯示</p&g
76、t;<p> WriteData(digit[j]); //將百位數(shù)字的字符常量寫入LCD</p><p> WriteData(digit[k]); //將十位數(shù)字的字符常量寫入LCD</p><p> WriteData(digit[l]); //將個位數(shù)字的字符常量寫入LCD</p><p> delaynms(50);
77、 //延時50ms給硬件一點(diǎn)反應(yīng)時間 </p><p><b> }</b></p><p> void display_temp2(unsigned char x) //顯示小數(shù)部分函數(shù)</p><p><b> {</b></p><p> unsigned c
78、har m,n;</p><p><b> m=x/10;</b></p><p><b> n=x%10; </b></p><p> WriteAddress(0x4a); //寫顯示地址,將在第2行第11列開始顯示</p><p> WriteData(digit[m]);
79、 //將小數(shù)部分的第一位數(shù)字字符常量寫入LCD</p><p> WriteData(digit[n]);</p><p> delaynms(50); //延時50ms給硬件一點(diǎn)反應(yīng)時間</p><p><b> }</b></p><p> void ReadyReadTemp(voi
80、d) //讀溫度準(zhǔn)備函數(shù)</p><p><b> {</b></p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); // 跳過讀序號列號的操作</p><p> WriteOneChar(0x44); // 啟動溫度轉(zhuǎn)換
81、 </p><p> for(time=0;time<100;time++); //溫度轉(zhuǎn)換需要一點(diǎn)時間</p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p> WriteOneChar(0x
82、BE); //讀取溫度寄存器,前兩個分別是溫度低位和高位</p><p><b> }</b></p><p> void main(void)</p><p><b> { </b></p><p> unsigned char TL; //儲存暫存器的溫度低位</p&
83、gt;<p> unsigned char TH; //儲存暫存器的溫度高位</p><p> unsigned char TN; //儲存溫度的整數(shù)部分</p><p> unsigned char TD; //儲存溫度的小數(shù)部分</p><p> LcdInitiate(); //將液晶初始化程序
84、包含顯示模式的設(shè)置</p><p> delaynms(5); //延時5ms給硬件一點(diǎn)反應(yīng)時間</p><p> if(Init_DS18B20()==1)</p><p> display_error();</p><p> display_explain();</p><p> disp
85、lay_symbol(); //顯示溫度說明</p><p> display_dot(); //顯示溫度的小數(shù)點(diǎn)</p><p> display_cent(); //顯示溫度的單位</p><p> while(1) //不斷檢測并顯示溫度</p><p><b>
86、 {</b></p><p> ReadyReadTemp(); //讀溫度準(zhǔn)備包括傳感器初始化和寫入讀溫和溫度轉(zhuǎn)換命令</p><p> TL=ReadOneChar(); //先讀的是溫度值低位</p><p> TH=ReadOneChar(); //接著讀的是溫度值高位</p><p> if
87、(TH&0xf8==0x00) //如果讀的溫度是零上溫度</p><p> { TN=TH*16+TL/16; //實際溫度值為(TH*256+TL)/16</p><p> //這樣得出的是溫度的整數(shù)部分,小數(shù)部分被舍去</p><p> TD=(TL%16)*100/16; //計算溫度的小數(shù)部分取整,</p&g
88、t;<p> //這樣得到的是溫度小數(shù)部分的兩位數(shù)字</p><p> display_temp1(TN); //顯示溫度的整數(shù)部分</p><p> display_temp2(TD); //顯示溫度的小數(shù)部分</p><p> delaynms(10); } </p><p> else
89、 //如果讀的溫度是零下溫度</p><p><b> {</b></p><p> TH=~TH;//溫度值高位取反</p><p> TL=~TL; //溫度值低位取反</p><p> TN=(TH*256+TL+1)/16; //得出零下溫度的整數(shù)值</p><p
90、> TD=((TL+1)%16)*100/16; //得出零下溫度的小數(shù)值</p><p> display_temp1(TN); //顯示溫度的整數(shù)部分</p><p> display_temp2(TD); //顯示溫度的小數(shù)部分</p><p> display_minus(); //顯示負(fù)號</p><
91、;p> delaynms(10);} </p><p><b> }</b></p><p><b> }</b></p><p> g an employment tribunal claim</p><p> Employment tribunals sort out disa
92、greements between employers and employees.</p><p> You may need to make a claim to an employment tribunal if:</p><p> you don't agree with the disciplinary action your employer has taken a
93、gainst you</p><p> your employer dismisses you and you think that you have been dismissed unfairly.</p><p> For more information about dismissal and unfair dismissal, see Dismissal.</p
94、><p> You can make a claim to an employment tribunal, even if you haven't appealed against the disciplinary action your employer has taken against you. However, if you win your case, the tribunal
95、 may reduce any compensation awarded to you as a result of your failure to appeal.</p><p> Remember that in most cases you must make an application to an employment tribunal within three months of the date
96、when the event you are complaining about happened. If your application is received after this time limit, the tribunal will not usually accept it.</p><p> If you are worried about how the time limits apply
97、to you, take advice from one of the organisations listed under Further help.</p><p> Employment tribunals are less formal than some other courts, but it is still a legal process and you will need to gi
98、ve evidence under an oath or affirmation.</p><p> Most people find making a claim to an employment tribunal challenging. If you are thinking about making a claim to an employment tribunal, you should get he
99、lp straight away from one of the organisations listed under Further help.</p><p> If you are being represented by a solicitor at the tribunal, they may ask you to sign an agreement where you pay their
100、fee out of your compensation if you win the case. This is known as a damages-based agreement. In England and Wales, your solicitor can't charge you more than 35% of your compensation if you win the case.&l
101、t;/p><p> If you are thinking about signing up for a damages-based agreement, you should make sure you're clear about the terms of the agreement. It might be best to get advice from an experienced ad
102、viser, for example, at a Citizens Advice Bureau. To find your nearest CAB, including those that give advice by e-mail, click on nearest CAB.</p><p> For more information about making a claim to a
103、n employment tribunal, see Employment tribunals.</p><p> The (lack of) air up there </p><p> Watch mCayman Islands-based Webb, the head of Fifa's anti-racism taskforce, is in London f
104、or the Football Association's 150th anniversary celebrations and will attend City's Premier League match at Chelsea on Sunday.</p><p> "I am going to be at the match tomorrow and I have asked t
105、o meet Yaya Toure," he told BBC Sport.</p><p> "For me it's about how he felt and I would like to speak to him first to find out what his experience was."</p><p> Uefa has
106、160;opened disciplinary proceedings against CSKA for the "racist behaviour of their fans" during City's 2-1 win.</p><p> Michel Platini, president of European football's governin
107、g body, has also ordered an immediate investigation into the referee's actions.</p><p> CSKA said they were "surprised and disappointed" by Toure's complaint. In a statement the Russian si
108、de added: "We found no racist insults from fans of CSKA."</p><p> Age has reached the end of the beginning of a word. May be guilty in his seems to passing a lot of different life became the appea
109、rance of the same day; May be back in the past, to oneself the paranoid weird belief disillusionment, these days, my mind has been very messy, in my mind constantly. Always feel oneself should go to do something, or writ
110、e something. Twenty years of life trajectory deeply shallow, suddenly feel something, do it.</p><p> 一字開頭的年齡已經(jīng)到了尾聲?;蛟S是愧疚于自己似乎把轉(zhuǎn)瞬即逝的很多個不同的日子過成了同一天的樣子;或許是追溯過去,對自己那些近乎偏執(zhí)的怪異信念的醒悟,這些天以來,思緒一直很凌亂,在腦海中不斷糾纏??傆X得自己自己似
111、乎應(yīng)該去做點(diǎn)什么,或者寫點(diǎn)什么。二十年的人生軌跡深深淺淺,突然就感覺到有些事情,非做不可了。</p><p> The end of our life, and can meet many things really do?</p><p> 而窮盡我們的一生,又能遇到多少事情是真正地非做不可?</p><p> During my childhood, th
112、ink lucky money and new clothes are necessary for New Year, but as the advance of the age, will be more and more found that those things are optional; Junior high school, thought to have a crush on just means that the re
113、al growth, but over the past three years later, his writing of alumni in peace, suddenly found that isn't really grow up, it seems is not so important; Then in high school, think don't want to give vent to out yo
114、ur inner voice can be in the high school chil</p><p> 童年時,覺得壓歲錢和新衣服是過年必備,但是隨著年齡的推進(jìn),會越來越發(fā)現(xiàn),那些東西根本就可有可無;初中時,以為要有一場暗戀才意味著真正的成長,但三年過去后,自己心平氣和的寫同學(xué)錄的時候,突然就發(fā)現(xiàn)是不是真正的成長了,好像并沒有那么重要了;然后到了高中,覺得非要吐露出自己的心聲才能為高中生涯里的懵懂情愫劃上
115、一個句點(diǎn),但畢業(yè)晚會的時候最終還是被梗塞在了咽喉,后來再次站在他曾經(jīng)揮汗如雨的球場,看著他投過籃球的球框時,突然間發(fā)現(xiàn)自己已經(jīng)想不起他的容顏。</p><p> Originally, this world, can produce a chemical reaction to an event, in addition to resolutely, have to do, and time.</p>
116、;<p> 原來,這個世界上,對某個事件能產(chǎn)生化學(xué)反應(yīng)的,除了非做不可的堅決,還有,時間。</p><p> A person's time, your ideas are always special to clear. Want, want, line is clear, as if nothing could shake his. Also once seemed to be de
117、termined to do something, but more often is he backed out at last. Dislike his cowardice, finally found that there are a lot of love, there are a lot of miss, like shadow really have been doomed. Those who do, just green
118、 years oneself give oneself an arm injection, or is a self-righteous spiritual.</p><p> 一個人的時候,自己的想法總是特別地清晰。想要的,不想要的,界限明確,好像沒有什么可以撼動自己。也曾經(jīng)好像已經(jīng)下定了決心去做某件事,但更多的時候是最后又打起了退堂鼓。嫌惡過自己的怯懦,最終卻發(fā)現(xiàn)有很多緣分,有很多錯過,好像冥冥之中真的已經(jīng)
119、注定。那些曾經(jīng)所謂的非做不可,只是青蔥年華里自己給自己注射的一支強(qiáng)心劑,或者說,是自以為是的精神寄托罷了。</p><p> At the moment, the sky is dark, the air is fresh factor after just rained. Suddenly thought of blue plaid shirt; Those were broken into various
120、shapes of stationery; From the corner at the beginning of deep friendship; Have declared the end of the encounter that haven't start planning... Those years, those days of do, finally, like youth, will end in our lif
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字溫度計課程設(shè)計---基于51單片機(jī)數(shù)字溫度計設(shè)計
- 溫度計課程設(shè)計---基于51單片機(jī)數(shù)字溫度計設(shè)計
- 數(shù)字溫度計課程設(shè)計---基于51單片機(jī)數(shù)字溫度計設(shè)計
- 基于單片機(jī)at89c51數(shù)字溫度計的設(shè)計
- 基于51單片機(jī)的數(shù)字溫度計課程設(shè)計
- 基于at89c51單片機(jī)的數(shù)字溫度計
- 89c51單片機(jī)課程設(shè)計
- 基于51單片機(jī)數(shù)字溫度計設(shè)計報告課程設(shè)計
- 課程設(shè)計--基于51單片機(jī)的數(shù)字溫度計的設(shè)計
- 基于at89c51的單片機(jī)的數(shù)字溫度計
- 基于51單片機(jī)的溫度計課程設(shè)計
- 51單片機(jī)課程設(shè)計數(shù)字溫度計報告
- 基于89c51單片機(jī)的秒表課程設(shè)計
- 基于單片機(jī)數(shù)字溫度計課程設(shè)計
- 課程設(shè)計--基于單片機(jī)數(shù)字溫度計設(shè)計
- 單片機(jī)課程設(shè)計-- 基于單片機(jī)的數(shù)字溫度計設(shè)計
- 單片機(jī)課程設(shè)計--數(shù)字溫度計
- 單片機(jī)課程設(shè)計--數(shù)字溫度計
- 單片機(jī)課程設(shè)計-數(shù)字溫度計
- 單片機(jī)課程設(shè)計—數(shù)字溫度計
評論
0/150
提交評論