版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于89C51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)</p><p><b> 1 引言</b></p><p> 本次課程設(shè)計(jì)的目的是設(shè)計(jì)一種數(shù)字溫度計(jì),在設(shè)計(jì)方法要遵循模塊化的設(shè)計(jì)方法,該數(shù)字溫度計(jì)主要應(yīng)用于環(huán)境的溫度檢測(cè),所以需要以下幾點(diǎn)要求:</p><p> ?。?)測(cè)量的溫度的范圍不宜過(guò)大,保證同時(shí)能夠測(cè)量零上溫度和零下溫
2、度。</p><p> (2)誤差應(yīng)當(dāng)小于物理溫度計(jì)由于觀察造成的誤差。</p><p> ?。?)該溫度計(jì)的數(shù)字界面要友好直觀在溫度計(jì)出現(xiàn)錯(cuò)誤時(shí)要能夠報(bào)錯(cuò)。</p><p> 2 設(shè)計(jì)方案及原理說(shuō)明</p><p><b> 2.1設(shè)計(jì)方案</b></p><p> 本次可程設(shè)計(jì)的課題是
3、數(shù)字溫度計(jì),我們的重點(diǎn)是溫度的采集即測(cè)溫電路。由此可以得到以下兩個(gè)方案:</p><p> 方案一:通過(guò)利用熱敏電阻的感溫效應(yīng),將隨被測(cè)溫度變化的電壓或電流采集過(guò)來(lái),進(jìn)行A/D轉(zhuǎn)換后,用單片機(jī)對(duì)其進(jìn)行溫度處理,在顯示元件上顯示。優(yōu)點(diǎn):所用的電子元件容易得到,單片機(jī)處理程序簡(jiǎn)單。缺點(diǎn):電路過(guò)于復(fù)雜,精度較差,容易受到外界環(huán)境的影響。</p><p> 方案二:使用DS18B20傳感器。該
4、傳感器可以測(cè)量-55℃至125℃范圍內(nèi)的溫度值,將采集的溫度數(shù)據(jù)轉(zhuǎn)換成16位二進(jìn)制數(shù),由單片機(jī)負(fù)責(zé)計(jì)算轉(zhuǎn)換成相應(yīng)溫度值,并且通過(guò)顯示元件上顯示。優(yōu)點(diǎn);精度較高,電路設(shè)計(jì)較為簡(jiǎn)單,用到的電子元件較少。缺點(diǎn):對(duì)與軟件的要求比較高。綜上,選擇方案二更為合理。</p><p><b> 2.2設(shè)計(jì)原理</b></p><p> 有上述方案,我們可以將本次課程設(shè)計(jì)分為硬件設(shè)
5、計(jì)和軟件設(shè)計(jì)兩部分。其中硬件電路又分為DS18B20傳感器檢測(cè)電路、1602LCD顯示電路、包含復(fù)位電路及內(nèi)部時(shí)鐘電路的單片機(jī)控制電路。軟件設(shè)計(jì)通過(guò)使用C語(yǔ)言編程,利用Keil Uvision3對(duì)其進(jìn)行編譯并通過(guò)單片機(jī)開(kāi)發(fā)板進(jìn)行仿真。</p><p> 該系統(tǒng)總的來(lái)說(shuō)有三大模塊構(gòu)成,分別是傳感器模塊、顯示模塊以及單片機(jī)模塊。其組成原理是這樣的,單片機(jī)寫入讀取和控制傳感器的命令,使DS18B20采集溫度數(shù)據(jù)并將其
6、傳輸?shù)絾纹瑱C(jī)后單片機(jī)負(fù)責(zé)把接收到的數(shù)字量經(jīng)過(guò)數(shù)據(jù)的進(jìn)制轉(zhuǎn)換和相應(yīng)的計(jì)算,并且將其送入到顯示屏顯示。為了能夠顯示信息,單片機(jī)還通過(guò)自行編寫的程序來(lái)控制寫入地址,寫入數(shù)據(jù)及顯示命令來(lái)達(dá)到在1602LCD顯示屏上顯示溫度傳感器檢測(cè)到的溫度的功能。設(shè)計(jì)框圖如下圖1所示。</p><p> 圖1 數(shù)字溫度計(jì)設(shè)計(jì)框圖</p><p> 3 數(shù)字溫度計(jì)硬件電路設(shè)計(jì)</p><p
7、> 3.1數(shù)字溫度計(jì)設(shè)計(jì)芯片選擇</p><p> 本次課程設(shè)計(jì)用到了89C51單片機(jī)、DS18B20溫度傳感器和1602LCD屏。</p><p> 3.2數(shù)字溫度計(jì)硬件連接方法及原理</p><p> 該系統(tǒng)連接方法如下1602LCD 的DB口是雙向的數(shù)據(jù)線與單片機(jī)P0口連接,用單片機(jī)P 2.1,P2.2 ,P2.3來(lái)分別與1602LCD的RS、R
8、W、E三個(gè)管腳連接,VDD接5V電源,VEE與VSS接地即可。傳感器的DQ與單片機(jī)P3.3相連,晶振和復(fù)位電路不作說(shuō)明,該系統(tǒng)連接圖如圖2所示</p><p> 圖2 數(shù)字溫度計(jì)硬件原理連接圖</p><p> 該系統(tǒng)是基于這樣的原理進(jìn)行設(shè)計(jì):首先因?yàn)镈S18B20傳感器采集的溫度數(shù)據(jù)是以兩個(gè)字節(jié)的數(shù)據(jù)存放,用DQ口串行傳輸并與單片機(jī)P3.3相連,通過(guò)這根線單片機(jī)讀取數(shù)據(jù)和寫入指令。
9、數(shù)據(jù)進(jìn)入單片機(jī)后經(jīng)處理由P0口送入顯示塊DB口,因?yàn)閱纹瑱C(jī)的P2.1,P2.2,P2.3與液晶屏的RS、RW、E相連以起到對(duì)液晶屏命令寫入和數(shù)據(jù)讀取的控制作用使液晶塊實(shí)時(shí)讀入命令和數(shù)據(jù)。</p><p> 4 數(shù)字溫度計(jì)軟件設(shè)計(jì)</p><p> 軟件編寫有三個(gè)模塊,傳感器溫器度讀取和液晶屏數(shù)據(jù)顯示及單片機(jī)對(duì)采集來(lái)溫度數(shù)據(jù)的計(jì)算。因?yàn)镈S18B20溫度傳感器與單片機(jī)之間單總線串行傳輸,
10、時(shí)序非常的重要,所以我們編寫的程序時(shí)序?yàn)椋簜鞲衅鲝?fù)位→發(fā)送存在脈沖→發(fā)送傳感器存儲(chǔ)器操作指令→執(zhí)行數(shù)據(jù)讀寫指令周→傳感器復(fù)位周而復(fù)始的做溫度的采集。因?yàn)槭菃纹瑴y(cè)量在溫度傳感器進(jìn)行測(cè)量流程圖中跳過(guò)ROM指令,傳感器流程序程圖如附錄A圖(a)所示。1602LCD與單片機(jī)之間有八條數(shù)據(jù)線負(fù)責(zé)二者之間的通信。這里我們要注意D7口是作為忙碌位,當(dāng)單片機(jī)在向液晶屏寫入數(shù)據(jù)時(shí)必須當(dāng)該位為檢測(cè)為低電平時(shí)才可以寫入數(shù)據(jù)。顯示模塊的程序流程圖如附錄圖A(b
11、)所示。綜上主程序流程如下圖3所示。源代碼詳見(jiàn)附錄C。</p><p> 圖3 主程序流程圖</p><p> 在Keil Uvision3上將編寫的源代碼錄入生成后綴名為.c的文件,經(jīng)過(guò)編譯可將生成的.hex格式的文件。程序編譯調(diào)試結(jié)果如附錄B圖所示。</p><p> 6 數(shù)字溫度計(jì)的硬件仿真調(diào)試及說(shuō)明</p><p> 將生成
12、的.hex其燒入單片機(jī)后接通單片機(jī)電源,系統(tǒng)開(kāi)始工作。剛開(kāi)始界面會(huì)顯示85℃約有1秒,后恢復(fù)正常測(cè)得室溫下如圖4所示。經(jīng)過(guò)查詢資料得因?yàn)樵诔跏蓟瘯r(shí)傳感器的寄存器中會(huì)默認(rèn)一個(gè)國(guó)定數(shù)值,經(jīng)計(jì)算后顯示正好為85,所以不可避免但能通過(guò)修改延時(shí)程序改變其顯示時(shí)間。</p><p> 圖4 測(cè)量室內(nèi)溫度</p><p> 由上圖可知室內(nèi)溫度為24.13℃,為了證明其是否可以測(cè)量實(shí)時(shí)溫度用手捏住D
13、S18B20溫度傳感器,發(fā)現(xiàn)其溫度有所變化,上升至32.05℃,如下圖6所示。</p><p> 圖5 手捏住傳感器的溫度</p><p> 當(dāng)拔掉DS18B20溫度傳感器,重新啟動(dòng)傳感器時(shí),屏幕會(huì)顯示報(bào)錯(cuò)信息,如下圖7所示.。</p><p> 圖7 報(bào)錯(cuò)提示信息</p><p> 經(jīng)過(guò)認(rèn)真分析,實(shí)物仿真正確,達(dá)到之前的設(shè)計(jì)要求
14、。</p><p><b> 7 總結(jié)</b></p><p> 我在設(shè)計(jì)中遇到了這樣的問(wèn)題,在程序編譯好之后無(wú)法在Protues軟件中仿真電路中實(shí)現(xiàn),但是程序卻可以在實(shí)物電路中正常運(yùn)行。經(jīng)過(guò)查資料終于解決,原因是我所使用的傳感器與仿真軟件中的傳感器型號(hào)相同,但是只能夠行程序時(shí)序不同,導(dǎo)致仿真結(jié)果不能正確顯示。我通過(guò)下載新版本的軟件完成了對(duì)該設(shè)計(jì)的仿真,由于篇幅所
15、限,這里未能展示出結(jié)果。</p><p> 通過(guò)本次課程設(shè)計(jì)在設(shè)計(jì)方法上我有以下幾點(diǎn)需要總結(jié):首先,是模塊化的設(shè)計(jì)思想,這一點(diǎn)對(duì)于我們以后的學(xué)習(xí)十分重要,因?yàn)闊o(wú)論工程有多么的龐大總是可以劃分成很多小模塊,只要將這些小模塊挨個(gè)解決,龐大的工程問(wèn)題也就迎刃而解。其次是對(duì)于這次課程設(shè)計(jì)本身的結(jié)果,我同樣有很多收獲。首先在設(shè)計(jì)中我認(rèn)識(shí)了可以單片機(jī)控制的很多電子元器件比如1602LCD顯示屏和DS18B20溫度傳感器,還
16、有其工作的方式都有了很深的認(rèn)識(shí),其次我還明白了時(shí)序?qū)τ诔绦蚝碗娮釉骷闹匾裕绻诔绦蛑袝r(shí)序處理不好輕則會(huì)影響單片機(jī)處理數(shù)據(jù)的速度,重則還會(huì)導(dǎo)致元件無(wú)法正常工作。就拿這次來(lái)說(shuō)DS18B20溫度傳感器和單片機(jī)的通信就需要嚴(yán)格的時(shí)序控制,必須用延時(shí)程序嚴(yán)格控制延時(shí)的子程序。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 王思明,張金敏,茍軍
17、年,張?chǎng)?楊喬禮.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)[M].</p><p> 北京:科學(xué)出版社,2012</p><p> [2] 李群芳.單片機(jī)原理、接口及應(yīng)用[M].北京:清華大學(xué)出版社,2005</p><p> [3] 彭為等.單片機(jī)典型系統(tǒng)設(shè)計(jì)實(shí)例精講[M].北京:電子工業(yè)出版社,2006</p><p> [4] 杜洋,DS18B
18、20傳感器技術(shù)手冊(cè)[J].深圳市安特凌科技有限公司,2007</p><p> [5] 杜洋,通用1602液晶顯示模塊使用手冊(cè)[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ù)字溫度計(jì)程序源代碼</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 "}; //說(shuō)明
21、顯示的是溫度</p><p> unsigned char code Error[]={"No Sensor check!"}; //說(shuō)明沒(méi)有檢測(cè)到</p><p> unsigned char code Temp[]={"Temp:"}; //說(shuō)明顯示的是溫度</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; //使能信號(hào)位,將E位定義為P2.2引腳</p><p> sbit BF=P0^7; //忙碌標(biāo)志位,,將BF位定義為P0.7引腳</p><p> void delay1ms() //延時(shí)功能函數(shù)延時(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í)功能函數(shù)延時(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為高電平時(shí),可以讀狀態(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_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</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同時(shí)為低電平時(shí),可以寫入指令</p><p><b> RW=0; </b></p><p> E=0; //E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,</p><p> // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"</p>
31、<p><b> _nop_();</b></p><p> _nop_(); //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</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_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</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_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p&
34、gt;<p> E=0; //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令</p><p><b> }</b></p><p> void WriteAddress(unsigned char x) //指定字符顯示的實(shí)際地址的函數(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í),可以寫入數(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_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</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_(); //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間</p><p> E=0; //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開(kāi)始執(zhí)行命令</p><p><
40、b> }</b></p><p> void LcdInitiate(void) //LCD的顯示模式進(jìn)行初始化設(shè)置</p><p><b> {</b></p><p> delaynms(15); //延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間</p>&l
41、t;p> WriteInstruction(0x38); //設(shè)置模式:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接</p><p> delaynms(5); //延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x38);</p><p> delaynms(5)
42、; //延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x38); //連續(xù)三次,確保初始化成功</p><p> delaynms(5); //延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x0c); //顯示
43、模式設(shè)置:顯示開(kāi),無(wú)光標(biāo),光標(biāo)不閃爍</p><p> delaynms(5); //延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> WriteInstruction(0x06); //顯示模式設(shè)置:光標(biāo)右移,字符不移</p><p> delaynms(5); //延時(shí)5ms,給硬件一點(diǎn)反應(yīng)
44、時(shí)間</p><p> WriteInstruction(0x01); //清屏幕指令,將以前的顯示內(nèi)容清除</p><p> delaynms(5); //延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> } </b></p><p> sbit DQ=P3^3;<
45、/p><p> unsigned char time; //設(shè)置全局變量,專門用于嚴(yán)格延時(shí)</p><p> bit Init_DS18B20(void)//DS18B20傳感器初始化,讀取應(yīng)答信號(hào)函數(shù)</p><p><b> {</b></p><p> bit flag; //儲(chǔ)存DS18
46、B20存在的標(biāo)志,flag=0存在;flag=1不存在</p><p> DQ = 1; //先將數(shù)據(jù)線拉高</p><p> for(time=0;time<2;time++) //略微延時(shí)約6微秒</p><p><b> ;</b></p><p> DQ = 0;
47、 //再將數(shù)據(jù)線從高拉低,要求保持480~960us</p><p> for(time=0;time<200;time++) //略微延時(shí)約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ī)檢測(cè)是否輸出了存在脈沖(DQ=0表示存在) </p><p> for(time=0;time<200;time++); //延時(shí)足夠長(zhǎng)時(shí)間,等待存在
49、脈沖輸出完畢</p><p> return (flag); //返回檢測(cè)成功標(biāo)志</p><p><b> }</b></p><p> unsigned char ReadOneChar(void) //從DS18B20讀取一個(gè)字節(jié)數(shù)據(jù)的函數(shù)</p><p><b> {</b>&
50、lt;/p><p> unsigned char i=0;</p><p> unsigned char dat; //儲(chǔ)存讀出的一個(gè)字節(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_(); //等待一個(gè)機(jī)器周期 </p><p> DQ = 0; //單片機(jī)從DS18B20讀數(shù)據(jù)時(shí),將數(shù)據(jù)線正跳便開(kāi)始讀</p><p><b> dat>>=1;</b></p><p> _nop_(); //等待一個(gè)機(jī)
52、器周期 </p><p> DQ = 1; //將數(shù)據(jù)線拉高,為單片機(jī)檢測(cè)DS18B20的輸出作準(zhǔn)備</p><p> for(time=0;time<2;time++);//延時(shí)約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ī)檢測(cè)到的電平信號(hào)DQ存入r[i]</p><p> for(time=0;time<8;ti
54、me++);//延時(shí)14us,兩個(gè)讀時(shí)序間必須大于恢復(fù)期</p><p> } </p><p> return(dat); //返回讀出的十進(jìn)制數(shù)據(jù)</p><p><b> }</b></p><p> WriteOneChar(unsigned char da
55、t) //DS18B20寫入一個(gè)字節(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_(); //等待一個(gè)機(jī)器周期 </p><p> DQ=0; //將數(shù)據(jù)線從高拉低時(shí)即啟動(dòng)寫時(shí)序 </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> ;//延時(shí)約20us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣</p><p> DQ=1; //釋放數(shù)據(jù)線 </p><p> for(time=0;
58、time<1;time++);//延時(shí)2us,兩個(gè)寫時(shí)序間需要1us的恢復(fù)期</p><p> dat>>=1; //將dat中的各二進(jìn)制位數(shù)據(jù)右移1位</p><p><b> }</b></p><p> for(time=0;time<4;time++); //稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間<
59、/p><p><b> }</b></p><p> void display_error(void) //顯示沒(méi)有檢測(cè)到DS18B20的函數(shù)</p><p><b> {</b></p><p> unsigned char i;</p><p> WriteAddr
60、ess(0x00); //寫顯示地址,將在第1行第1列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示</p><p> while(Error[i] != '\0') //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫</p><p><b> {</b></p&
61、gt;<p> WriteData(Error[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(100); //延時(shí)100ms較長(zhǎng)時(shí)間 }</p><p> while(1) //進(jìn)入
62、死循環(huán),等待查明原因</p><p><b> ;</b></p><p><b> }</b></p><p> void display_explain(void) //顯示說(shuō)明函數(shù)</p><p><b> {</b></p><
63、p> unsigned char i;</p><p> WriteAddress(0x00); //寫顯示地址,將在第1行第1列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示</p><p> while(Str[i] != '\0') //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫<
64、;/p><p><b> {</b></p><p> WriteData(Str[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(100); </p><p>
65、;<b> }</b></p><p><b> }</b></p><p> void display_symbol(void) //顯示溫度符號(hào)</p><p><b> {</b></p><p> unsigned char i;</p>
66、<p> WriteAddress(0x40); //寫顯示地址,將在第2行第1列開(kāi)始顯示</p><p> i = 0; //從第一個(gè)字符開(kāi)始顯示</p><p> while(Temp[i] != '\0') //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫</p><p><b> {
67、</b></p><p> WriteData(Temp[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(50); //延時(shí)50ms給硬件一點(diǎn)反應(yīng)時(shí)間</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列開(kāi)始顯示 </
69、p><p> WriteData('.'); //將小數(shù)點(diǎn)的字符常量寫入LCD</p><p> delaynms(50); //延時(shí)50ms給硬件一點(diǎn)反應(yīng)時(shí)間</p><p><b> }</b></p><p> void display_minus(); (voi
70、d)</p><p> { </p><p> WriteAddress(0x45); //寫顯示地址,將在第2行第10列開(kāi)始顯示 </p><p> WriteData('-'); //將小數(shù)點(diǎn)的字符常量寫入LCD</p><p> delaynms(50); /
71、/延時(shí)50ms給硬件一點(diǎn)反應(yīng)時(shí)間</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; //從第一個(gè)字符開(kāi)始顯示 </p><p> while(Cent[i] != '\0') //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫</p><p><b> {</b>
73、</p><p> WriteData(Cent[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個(gè)字符</p><p> delaynms(50); //延時(shí)50ms給硬件一點(diǎn)反應(yīng)時(shí)間</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分別儲(chǔ)存溫度的百位、十位和個(gè)
75、位</p><p> j=x/100; //取百位</p><p> k=(x%100)/10; //取十位</p><p> l=x%10; //取個(gè)位 </p><p> WriteAddress(0x46); //寫顯示地址,將在第2行第7列開(kāi)始顯示</p&g
76、t;<p> WriteData(digit[j]); //將百位數(shù)字的字符常量寫入LCD</p><p> WriteData(digit[k]); //將十位數(shù)字的字符常量寫入LCD</p><p> WriteData(digit[l]); //將個(gè)位數(shù)字的字符常量寫入LCD</p><p> delaynms(50);
77、 //延時(shí)50ms給硬件一點(diǎn)反應(yīng)時(shí)間 </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列開(kāi)始顯示</p><p> WriteData(digit[m]);
79、 //將小數(shù)部分的第一位數(shù)字字符常量寫入LCD</p><p> WriteData(digit[n]);</p><p> delaynms(50); //延時(shí)50ms給硬件一點(diǎn)反應(yīng)時(shí)間</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); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p> WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
81、 </p><p> for(time=0;time<100;time++); //溫度轉(zhuǎn)換需要一點(diǎn)時(shí)間</p><p> Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作</p><p> WriteOneChar(0x
82、BE); //讀取溫度寄存器,前兩個(gè)分別是溫度低位和高位</p><p><b> }</b></p><p> void main(void)</p><p><b> { </b></p><p> unsigned char TL; //儲(chǔ)存暫存器的溫度低位</p&
83、gt;<p> unsigned char TH; //儲(chǔ)存暫存器的溫度高位</p><p> unsigned char TN; //儲(chǔ)存溫度的整數(shù)部分</p><p> unsigned char TD; //儲(chǔ)存溫度的小數(shù)部分</p><p> LcdInitiate(); //將液晶初始化程序
84、包含顯示模式的設(shè)置</p><p> delaynms(5); //延時(shí)5ms給硬件一點(diǎn)反應(yīng)時(shí)間</p><p> if(Init_DS18B20()==1)</p><p> display_error();</p><p> display_explain();</p><p> disp
85、lay_symbol(); //顯示溫度說(shuō)明</p><p> display_dot(); //顯示溫度的小數(shù)點(diǎn)</p><p> display_cent(); //顯示溫度的單位</p><p> while(1) //不斷檢測(cè)并顯示溫度</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; //實(shí)際溫度值為(TH*256+TL)/16</p><p> //這樣得出的是溫度的整數(shù)部分,小數(shù)部分被舍去</p><p> TD=(TL%16)*100/16; //計(jì)算溫度的小數(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ù)號(hào)</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> 一字開(kāi)頭的年齡已經(jīng)到了尾聲。或許是愧疚于自己似乎把轉(zhuǎn)瞬即逝的很多個(gè)不同的日子過(guò)成了同一天的樣子;或許是追溯過(guò)去,對(duì)自己那些近乎偏執(zhí)的怪異信念的醒悟,這些天以來(lái),思緒一直很凌亂,在腦海中不斷糾纏。總覺(jué)得自己自己似
111、乎應(yīng)該去做點(diǎn)什么,或者寫點(diǎn)什么。二十年的人生軌跡深深淺淺,突然就感覺(jué)到有些事情,非做不可了。</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> 童年時(shí),覺(jué)得壓歲錢和新衣服是過(guò)年必備,但是隨著年齡的推進(jìn),會(huì)越來(lái)越發(fā)現(xiàn),那些東西根本就可有可無(wú);初中時(shí),以為要有一場(chǎng)暗戀才意味著真正的成長(zhǎng),但三年過(guò)去后,自己心平氣和的寫同學(xué)錄的時(shí)候,突然就發(fā)現(xiàn)是不是真正的成長(zhǎng)了,好像并沒(méi)有那么重要了;然后到了高中,覺(jué)得非要吐露出自己的心聲才能為高中生涯里的懵懂情愫劃上
115、一個(gè)句點(diǎn),但畢業(yè)晚會(huì)的時(shí)候最終還是被梗塞在了咽喉,后來(lái)再次站在他曾經(jīng)揮汗如雨的球場(chǎng),看著他投過(guò)籃球的球框時(shí),突然間發(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> 原來(lái),這個(gè)世界上,對(duì)某個(gè)事件能產(chǎn)生化學(xué)反應(yīng)的,除了非做不可的堅(jiān)決,還有,時(shí)間。</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> 一個(gè)人的時(shí)候,自己的想法總是特別地清晰。想要的,不想要的,界限明確,好像沒(méi)有什么可以撼動(dòng)自己。也曾經(jīng)好像已經(jīng)下定了決心去做某件事,但更多的時(shí)候是最后又打起了退堂鼓。嫌惡過(guò)自己的怯懦,最終卻發(fā)現(xiàn)有很多緣分,有很多錯(cuò)過(guò),好像冥冥之中真的已經(jīng)
119、注定。那些曾經(jīng)所謂的非做不可,只是青蔥年華里自己給自己注射的一支強(qiáng)心劑,或者說(shuō),是自以為是的精神寄托罷了。</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. 本站所有資源如無(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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 數(shù)字溫度計(jì)課程設(shè)計(jì)---基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 基于單片機(jī)at89c51數(shù)字溫度計(jì)的設(shè)計(jì)
- 基于51單片機(jī)的數(shù)字溫度計(jì)課程設(shè)計(jì)
- 基于at89c51單片機(jī)的數(shù)字溫度計(jì)
- 89c51單片機(jī)課程設(shè)計(jì)
- 基于51單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)報(bào)告課程設(shè)計(jì)
- 課程設(shè)計(jì)--基于51單片機(jī)的數(shù)字溫度計(jì)的設(shè)計(jì)
- 基于at89c51的單片機(jī)的數(shù)字溫度計(jì)
- 基于51單片機(jī)的溫度計(jì)課程設(shè)計(jì)
- 51單片機(jī)課程設(shè)計(jì)數(shù)字溫度計(jì)報(bào)告
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì)
- 基于單片機(jī)數(shù)字溫度計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)--基于單片機(jī)數(shù)字溫度計(jì)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-- 基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)--數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)-數(shù)字溫度計(jì)
- 單片機(jī)課程設(shè)計(jì)—數(shù)字溫度計(jì)
評(píng)論
0/150
提交評(píng)論