版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 題目:基于AT89S52和DS18B20的數(shù)字溫度計設計</p><p><b> 一 、設計要求</b></p><p> 數(shù)字式溫度計要求測溫范圍為-55~125°C,精度誤差在±0.5°C以內,液晶顯示。</p><p><b> 二 、方案確定</b><
2、;/p><p> 根據(jù)系統(tǒng)的設計要求,選擇DS18B20作為本系統(tǒng)的溫度傳感器,選擇單片機AT89S52為測控系統(tǒng)的核心來完成數(shù)據(jù)采集、處理、顯示功能。選用數(shù)字溫度傳感器DS18B20,省卻了采樣/保持電路、運放、數(shù)/模轉換電路以及進行長距離傳輸時的串/并轉換電路,簡化了電路,縮短了系統(tǒng)的工作時間,降低了系統(tǒng)的硬件成本。</p><p> 該系統(tǒng)的總體設計思路如下:溫度傳感器DS18B20
3、把所測得的溫度信號發(fā)送到AT89S52單片機上,經(jīng)過單片機處理,然后在1602LCD上進行顯示。其溫度測量及顯示電路原理圖如下:</p><p> 220V轉5V電路原理圖如下:</p><p> 2.1 元器件的介紹</p><p> 2.1.1 單片機的選擇</p><p> AT89S52是一種低功耗、高性能CMOS8位微控制器
4、,具有8K 在系統(tǒng)可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業(yè)80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52單片機結構見圖2.1:</p><p> 圖2.1 AT89S52結構
5、圖</p><p> 2.2.2 傳感器的選擇</p><p> DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。</p><p> DS18B20內部結構主要由四部分組成:64位光刻ROM、溫度傳感器、
6、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的管腳排列、各種封裝形式,DQ 為數(shù)據(jù)輸入/輸出引腳。開漏單總線接口引腳。當被用著在寄生電源下,也可以向器件提供電源;GND為地信號;VDD為可選擇的VDD引腳。當工作于寄生電源時,此引腳必須接地。</p><p> 2.2.3 LCD的選擇</p><p> 此設計中采用1602LCD對溫度進行顯示。</p>
7、<p> 圖2.2 1602LCD實物示意圖</p><p> 2.2 溫度檢測電路</p><p> DS18B20 最大的特點是單總線數(shù)據(jù)傳輸方式,DS18B20 的數(shù)據(jù)I/O 均由同一條線來完成。DS18B20 的電源供電方式有2 種: 外部供電方式和寄生電源方式。工作于寄生電源方式時, VDD 和GND 均接地, 他在需要遠程溫度探測和空間受限的場合特別有用, 原理
8、是當1 W ire 總線的信號線DQ 為高電平時, 竊取信號能量給DS18B20 供電, 同時一部分能量給內部電容充電, 當DQ為低電平時釋放能量為DS18B20 供電。但寄生電源方式需要強上拉電路, 軟件控制變得復雜(特別是在完成溫度轉換和拷貝數(shù)據(jù)到E2PROM 時) , 同時芯片的性能也有所降低。因此, 在條件允許的場合, 盡量采用外供電方式。無論是內部寄生電源還是外部供電,I/O口線要接5KΩ左右的上拉電。</p>
9、<p> 外部電源供電方式是DS18B20最佳的工作方式,工作穩(wěn)定可靠,抗干擾能力強,而且電路也比較簡單,可以開發(fā)出穩(wěn)定可靠的多點溫度監(jiān)控系統(tǒng)。在開發(fā)中使用外部電源供電方式,畢竟比寄生電源方式只多接一根VCC引線。在外接電源方式下,可以充分發(fā)揮DS18B20寬電源電壓范圍的優(yōu)點,即使電源電壓VCC 降到3V 時,依然能夠保證溫度量精度。</p><p> 由于DS18B20 只有一根數(shù)據(jù)線,因此它和
10、主機(單片機)通信是需要串行通信,而AT89S51 有兩個串行端口,所以可以不用軟件來模擬實現(xiàn)。經(jīng)過單線接口訪問DC18B20 必須遵循如下協(xié)議:初始化、ROM 操作命令、存儲器操作命令和控制操作。要使傳感器工作,一切處理均嚴格按照時序。</p><p><b> 三 、軟件設計</b></p><p><b> 3.1 概述</b><
11、/p><p> 整個系統(tǒng)的功能是由硬件電路配合軟件來實現(xiàn)的,當硬件基本定型后,軟件的功能也就基本定下來了。從軟件的功能不同可分為兩大類:一是監(jiān)控軟件(主程序),它是整個控制系統(tǒng)的核心,專門用來協(xié)調各執(zhí)行模塊和操作者的關系。二是執(zhí)行軟件(子程序),它是用來完成各種實質性的功能如測量、計算、顯示、通訊等。每一個執(zhí)行軟件是一個小的功能執(zhí)行模塊。這里將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進行功能定義和接口定義。各執(zhí)行模塊
12、規(guī)劃好后,就可以規(guī)劃監(jiān)控程序了。首先要根據(jù)系統(tǒng)的總體功能選擇一種最合適的監(jiān)控程序結構,然后根據(jù)實時性的要求,合理地安排監(jiān)控軟件和各執(zhí)行模塊之間地調度關系。</p><p><b> 3.2 程序模塊</b></p><p> 主程序需要調用2子程序,各模塊程序功能如下:</p><p> ●LCD顯示程序:向LCD的顯示送數(shù),控制系統(tǒng)的顯
13、示部分。</p><p> ●溫度測試及處理程序:對溫度芯片送過來的數(shù)據(jù)進行處理和顯示。</p><p> 主程序流程見圖3.1。</p><p> 圖3.1主程序流程圖 圖3.2 DS18B20初始化流程</p><p> 3.3 各模塊流程設計</p><p> 下面對主要子程
14、序的流程圖做介紹。</p><p> 3.3.1溫度檢測流程</p><p> DS18B20在單片機控制下分三個階段:</p><p> ●18B20 初始化:初始化流程圖見圖 3.2;</p><p> ●讀18B20時序:讀DS18B20流程見圖 3.3;</p><p> ●寫18B20時序:寫DS1
15、8B20流程見圖 3.4;</p><p> 圖3.3 讀18B20流程圖 圖3.4 寫18B20流程圖</p><p> 3.3.2 液晶顯示的設置</p><p> 顯示模式的設置:寫入指令碼WriteInstruction(0x38),設置功能16*2顯示,5*7點陣,8位數(shù)據(jù)接口;</p><p>
16、 顯示/開關及光標設置:寫入指令碼WriteInstruction (0x0c),設置開顯示,不顯示光標,光標不閃爍;</p><p> 寫入指令碼WriteInstruction(0x06),設置:光標右移,字符不移;</p><p> 寫入指令碼WriteInstruction(0x01),清屏幕指令,將以前的顯示內容清除;</p><p> 寫入指令碼
17、函數(shù)WriteInstruction( ),寫指令過程:輸入:RS=0,D0-D7=指令碼,E=高脈沖;</p><p> 寫入數(shù)據(jù)函數(shù)WriteData( ), 寫指令過程:輸入:RS=1,D0-D7=數(shù)據(jù),E=高脈沖;</p><p> 數(shù)據(jù)指針設置: 指令碼80H+地址碼(0-27H)顯示第一行的字符,指令碼80H+地址碼(40H-67H)顯示的第二行字符。</p>
18、<p><b> 四、硬件的調試</b></p><p> 完成的硬件焊接電路見附錄。</p><p> 在硬件調試過程中,出現(xiàn)了許多問題。在設計電源電路中使用了整流橋進行整流,但是在硬件焊接完畢后,測得的輸出電壓不正常。后來利用四個二極管搭建一個整流橋接入電路,輸出的電壓就正常。此外,電路中使用了78L05穩(wěn)壓管將從整流橋出來的電壓穩(wěn)在5V,可是7
19、8L05輸出的電壓不是5V,因此自己加了了1K的可調電阻將輸出的電壓進行轉換來給單片機供電。</p><p> 在焊接外圍電路(1602LCD顯示電路和18B20數(shù)字測溫電路)之前,通過在單片的P2.7口接入一個發(fā)光二極管,來調試單片機的最小系統(tǒng)是否能正常工作。單片機中燒入的程序來控制LED的亮和滅。一步調試很成功。</p><p> 接下來自己將外圍電路焊接進去,可是1602LCD不
20、顯示。經(jīng)過自己對各個接口端功能的認真分析,發(fā)現(xiàn)自己將背光電壓調的太高導致1602LCD亮度太高,所以顯示的字符看不見,就誤認成電路連接有誤。在調低背光電壓后,正常顯示。</p><p> 最后出現(xiàn)的問題是在一切正常的情況下1602LCD上顯示的是沒有找到DS18B20傳感器,請檢查電路。經(jīng)過認真仔細檢查電路后,沒有發(fā)現(xiàn)任何錯誤。硬件檢查沒問題,只能是軟件程序編寫有錯,經(jīng)過認真查看所編程序,發(fā)現(xiàn)里面對DS18B2
21、0的信號輸入接口設置錯了。改正后,重新編譯燒進單片機,電源打開后,能正常顯示溫度了。</p><p> 經(jīng)過以上過程,自己設計的電路達到了開始設想的功能,課程設計圓滿結束。</p><p><b> 總結和體會</b></p><p> 本設計利用AT89S52 芯片控制溫度傳感器DS18B20,再輔之以部分外圍電路實現(xiàn)對環(huán)境溫度的測控,
22、性能穩(wěn)定,精度教高,而且擴展性能很強大。由于DS18B20的測量精度只有±0.5 度,往往很多場合需要更加精確的溫度,在所測溫度精度不變的基礎上必須對數(shù)據(jù)進行校正。由于DS18B20 是基于帶隙結構的數(shù)字式溫度傳感器,PN 結增量電壓正比于IC 絕對溫度(PTAT),它的測溫精度較高,但存在著一定的誤差.不過,其誤差在時間和外部環(huán)境變化的條件下,保持相當高的穩(wěn)定性。它充分利用監(jiān)控計算機的處理能力,在監(jiān)控計算機上用線性插補的數(shù)學
23、方法對其進行誤差校正補償,能輕易地將其提高其精度。</p><p> 在本次設計的過程中,我發(fā)現(xiàn)很多的問題,這次設計真的讓我長進了很多,單片機C語言課程設計重點就在于軟件算法的設計,需要有很巧妙的程序算法,這一次,我全部用的都是16進制的數(shù)直接加減,感覺效果比較好,有好多的東西,只有我們去試著做了,才能真正的掌握。五、元件清單(名稱、型號、數(shù)量)</p><p><b> 附
24、錄:</b></p><p><b> 程序:</b></p><p> //DS18B20溫度檢測及其液晶顯示</p><p> #include<reg51.h> //包含單片機寄存器的頭文件</p><p> #include<intrins.h> //包含_no
25、p_()函數(shù)定義的頭文件</p><p> unsigned char code digit[10]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字</p><p> unsigned char code Str[]={"Test by DS18B20"}; //說明顯示的是溫度</p><p>
26、 unsigned char code Error[]={"Error!Check!"}; //說明沒有檢測到DS18B20</p><p> unsigned char code Temp[]={"Temp:"}; //說明顯示的是溫度</p><p> unsigned char code Cent[]={&q
27、uot;Cent"}; //溫度單位</p><p> /*******************************************************************************</p><p> 以下是對液晶模塊的操作程序</p><p> **********************
28、*********************************************************/</p><p> sbit RS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳</p><p> sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳</p><p> sb
29、it E=P2^2; //使能信號位,將E位定義為P2.2引腳</p><p> sbit BF=P0^7; //忙碌標志位,,將BF位定義為P0.7引腳</p><p> /*****************************************************</p><p> 函數(shù)功能:延時1m
30、s</p><p> (3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒</p><p> ***************************************************/</p><p> void delay1ms()</p><p><b> {&l
31、t;/b></p><p> unsigned char i,j;</p><p> for(i=0;i<4;i++)</p><p> for(j=0;j<33;j++)</p><p><b> ; </b></p><p><b> }</b
32、></p><p> /*****************************************************</p><p> 函數(shù)功能:延時若干毫秒</p><p><b> 入口參數(shù):n</b></p><p> **********************************
33、*****************/</p><p> void delaynms(unsigned char n)</p><p><b> {</b></p><p> unsigned char i;</p><p> for(i=0;i<n;i++)</p><p> de
34、lay1ms();</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)</p><p> 返回值:result。result=1,忙碌;result
35、=0,不忙</p><p> ***************************************************/</p><p> bit BusyTest(void)</p><p><b> {</b></p><p> bit result;</p><p>
36、 RS=0; //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài)</p><p><b> RW=1;</b></p><p> E=1; //E=1,才允許讀寫</p><p> _nop_(); //空操作</p><p><b> _nop_();</b&g
37、t;</p><p><b> _nop_(); </b></p><p> _nop_(); //空操作四個機器周期,給硬件反應時間</p><p> result=BF; //將忙碌標志電平賦給result</p><p> E=0; //將E恢復低電平</p><
38、p> return result;</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:將模式設置指令或顯示地址寫入液晶模塊</p><p> 入口參數(shù):dicta
39、te</p><p> ***************************************************/</p><p> void WriteInstruction (unsigned char dictate)</p><p><b> { </b></p><p> while(
40、BusyTest()==1); //如果忙就等待</p><p> RS=0; //根據(jù)規(guī)定,RS和R/W同時為低電平時,可以寫入指令</p><p><b> RW=0; </b></p><p> E=0; //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖
41、,</p><p> // 就是讓E從0到1發(fā)生正跳變,所以應先置"0"</p><p><b> _nop_();</b></p><p> _nop_(); //空操作兩個機器周期,給硬件反應時間</p><p> P0=dictate;
42、//將數(shù)據(jù)送入P0口,即寫入指令或地址</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作
43、四個機器周期,給硬件反應時間</p><p> E=1; //E置高電平</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b><
44、;/p><p> _nop_(); //空操作四個機器周期,給硬件反應時間</p><p> E=0; //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令</p><p><b> }</b></p><p> /********************
45、*********************************</p><p> 函數(shù)功能:指定字符顯示的實際地址</p><p><b> 入口參數(shù):x</b></p><p> ***************************************************/</p><p> vo
46、id WriteAddress(unsigned char x)</p><p><b> {</b></p><p> WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"</p><p><b> }</b></p><p&g
47、t; /*****************************************************</p><p> 函數(shù)功能:將數(shù)據(jù)(字符的標準ASCII碼)寫入液晶模塊</p><p> 入口參數(shù):y(為字符常量)</p><p> ***************************************************/&
48、lt;/p><p> void WriteData(unsigned char y)</p><p><b> {</b></p><p> while(BusyTest()==1); </p><p> RS=1; //RS為高電平,RW為低電平時,可以寫入數(shù)據(jù)</p><
49、p><b> RW=0;</b></p><p> E=0; //E置低電平(根據(jù)表8-6,寫指令時,E為高脈沖,</p><p> // 就是讓E從0到1發(fā)生正跳變,所以應先置"0"</p><p> P0=y; //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊</p
50、><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作四個機器周期,給硬件反應時間</p><p&g
51、t; E=1; //E置高電平</p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p><b> _nop_();</b></p><p> _nop_(); //空操作
52、四個機器周期,給硬件反應時間</p><p> E=0; //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令</p><p><b> }</b></p><p> /*****************************************************</p><p>
53、 函數(shù)功能:對LCD的顯示模式進行初始化設置</p><p> ***************************************************/</p><p> void LcdInitiate(void)</p><p><b> {</b></p><p> delaynms(15
54、); //延時15ms,首次寫指令時應給LCD一段較長的反應時間</p><p> WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數(shù)據(jù)接口</p><p> delaynms(5); //延時5ms ,給硬件一點反應時間</p><
55、p> WriteInstruction(0x38);</p><p> delaynms(5); //延時5ms ,給硬件一點反應時間</p><p> WriteInstruction(0x38); //連續(xù)三次,確保初始化成功</p><p> delaynms(5); //延時5ms
56、 ,給硬件一點反應時間</p><p> WriteInstruction(0x0c); //顯示模式設置:顯示開,無光標,光標不閃爍</p><p> delaynms(5); //延時5ms ,給硬件一點反應時間</p><p> WriteInstruction(0x06); //顯示模式設置:光標右移,字符不
57、移</p><p> delaynms(5); //延時5ms ,給硬件一點反應時間</p><p> WriteInstruction(0x01); //清屏幕指令,將以前的顯示內容清除</p><p> delaynms(5); //延時5ms ,給硬件一點反應時間</p><
58、;p><b> } </b></p><p> /************************************************************************</p><p> 以下是DS18B20的操作程序</p><p> **********************************
59、**************************************/ </p><p> sbit DQ=P2^3;</p><p> unsigned char time; //設置全局變量,專門用于嚴格延時</p><p> /*****************************************************</
60、p><p> 函數(shù)功能:將DS18B20傳感器初始化,讀取應答信號</p><p> 出口參數(shù):flag </p><p> ***************************************************/</p><p> bit Init_DS18B20(void)</p><p>&
61、lt;b> {</b></p><p> bit flag; //儲存DS18B20是否存在的標志,flag=0,表示存在;flag=1,表示不存在</p><p> DQ = 1; //先將數(shù)據(jù)線拉高</p><p> for(time=0;time<2;time++) //略微延時約6微秒<
62、;/p><p><b> ;</b></p><p> DQ = 0; //再將數(shù)據(jù)線從高拉低,要求保持480~960us</p><p> for(time=0;time<200;time++) //略微延時約600微秒</p><p> ; //以向DS18B20發(fā)出一
63、持續(xù)480~960us的低電平復位脈沖 </p><p> DQ = 1; //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高) </p><p> for(time=0;time<10;time++)</p><p> ; //延時約30us(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)</p><p> fl
64、ag=DQ; //讓單片機檢測是否輸出了存在脈沖(DQ=0表示存在) </p><p> for(time=0;time<200;time++) //延時足夠長時間,等待存在脈沖輸出完畢</p><p><b> ;</b></p><p> return (flag); //返回檢測成功標志&l
65、t;/p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:從DS18B20讀取一個字節(jié)數(shù)據(jù)</p><p><b> 出口參數(shù):dat</b></p&g
66、t;<p> ***************************************************/ </p><p> unsigned char ReadOneChar(void)</p><p><b> {</b></p><p> unsigned char i=0;</p>&
67、lt;p> unsigned char dat; //儲存讀出的一個字節(jié)數(shù)據(jù)</p><p> for (i=0;i<8;i++)</p><p><b> {</b></p><p> DQ =1; // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個機器周
68、期 </p><p> DQ = 0; //單片機從DS18B20讀書據(jù)時,將數(shù)據(jù)線從高拉低即啟動讀時序</p><p><b> dat>>=1;</b></p><p> _nop_(); //等待一個機器周期 </p><p> DQ = 1; //將數(shù)據(jù)線&
69、quot;人為"拉高,為單片機檢測DS18B20的輸出電平作準備</p><p> for(time=0;time<2;time++)</p><p> ; //延時約6us,使主機在15us內采樣</p><p><b> if(DQ==1)</b></p><p> dat|=0x8
70、0; //如果讀到的數(shù)據(jù)是1,則將1存入dat</p><p><b> else</b></p><p> dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat</p><p> //將單片機檢測到的電平信號DQ存入r[i]</p><p> for(time=0;time<8;time++)
71、</p><p> ; //延時3us,兩個讀時序之間必須有大于1us的恢復期</p><p> } </p><p> return(dat); //返回讀出的十進制數(shù)據(jù)</p><p><b> }</b></p><
72、p> /*****************************************************</p><p> 函數(shù)功能:向DS18B20寫入一個字節(jié)數(shù)據(jù)</p><p><b> 入口參數(shù):dat</b></p><p> ******************************************
73、*********/ </p><p> WriteOneChar(unsigned char dat)</p><p><b> {</b></p><p> unsigned char i=0;</p><p> for (i=0; i<8; i++)</p><p><
74、b> {</b></p><p> DQ =1; // 先將數(shù)據(jù)線拉高</p><p> _nop_(); //等待一個機器周期 </p><p> DQ=0; //將數(shù)據(jù)線從高拉低時即啟動寫時序 </p><p> DQ=dat&0x01; /
75、/利用與運算取出要寫的某位二進制數(shù)據(jù),</p><p> //并將其送到數(shù)據(jù)線上等待DS18B20采樣</p><p> for(time=0;time<10;time++)</p><p> ;//延時約30us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣</p><p> DQ=1; /
76、/釋放數(shù)據(jù)線 </p><p> for(time=0;time<1;time++)</p><p> ;//延時3us,兩個寫時序間至少需要1us的恢復期</p><p> dat>>=1; //將dat中的各二進制位數(shù)據(jù)右移1位</p><p><b> }</b>&l
77、t;/p><p> for(time=0;time<4;time++)</p><p> ; //稍作延時,給硬件一點反應時間</p><p><b> }</b></p><p> /***************************************************************
78、***************</p><p> 以下是與溫度有關的顯示設置</p><p> ******************************************************************************/</p><p> /*******************************************
79、**********</p><p> 函數(shù)功能:顯示沒有檢測到DS18B20</p><p> ***************************************************/ </p><p> void display_error(void)</p><p><b> {</b>
80、</p><p> unsigned char i;</p><p> WriteAddress(0x00); //寫顯示地址,將在第1行第1列開始顯示</p><p> i = 0; //從第一個字符開始顯示</p><p> while(Error[i] != '\0') //
81、只要沒有寫到結束標志,就繼續(xù)寫</p><p><b> {</b></p><p> WriteData(Error[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p><p> delaynms(100);
82、//延時100ms較長時間,以看清關于顯示的說明</p><p><b> }</b></p><p> while(1) //進入死循環(huán),等待查明原因</p><p><b> ;</b></p><p><b> }</b></p&
83、gt;<p> /*****************************************************</p><p> 函數(shù)功能:顯示說明信息</p><p> ***************************************************/ </p><p> void display_ex
84、plain(void)</p><p><b> {</b></p><p> unsigned char i;</p><p> WriteAddress(0x00); //寫顯示地址,將在第1行第1列開始顯示</p><p> i = 0; //從第一個字符開始顯示<
85、/p><p> while(Str[i] != '\0') //只要沒有寫到結束標志,就繼續(xù)寫</p><p><b> {</b></p><p> WriteData(Str[i]); //將字符常量寫入LCD</p><p> i++; //指向
86、下一個字符</p><p> delaynms(100); //延時100ms較長時間,以看清關于顯示的說明</p><p><b> }</b></p><p><b> }</b></p><p> /***********************************
87、******************</p><p> 函數(shù)功能:顯示溫度符號</p><p> ***************************************************/ </p><p> void display_symbol(void)</p><p><b> {</b>
88、;</p><p> unsigned char i;</p><p> WriteAddress(0x40); //寫顯示地址,將在第2行第1列開始顯示</p><p> i = 0; //從第一個字符開始顯示</p><p> while(Temp[i] != '\0') //
89、只要沒有寫到結束標志,就繼續(xù)寫</p><p><b> {</b></p><p> WriteData(Temp[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p><p> delaynms(50); //
90、延時1ms給硬件一點反應時間</p><p><b> }</b></p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:顯示溫度的小數(shù)點</p
91、><p> ***************************************************/ </p><p> void display_dot(void)</p><p> { </p><p> WriteAddress(0x49); //寫顯示地址,將在第2行第10列開始顯示
92、 </p><p> WriteData('.'); //將小數(shù)點的字符常量寫入LCD</p><p> delaynms(50); //延時1ms給硬件一點反應時間</p><p><b> }</b></p><p> /********************
93、*********************************</p><p> 函數(shù)功能:顯示溫度的單位(Cent)</p><p> ***************************************************/ </p><p> void display_cent(void)</p><p>
94、<b> {</b></p><p> unsigned char i; </p><p> WriteAddress(0x4c); //寫顯示地址,將在第2行第13列開始顯示</p><p> i = 0; //從第一個字符開始顯示 </p><p>
95、 while(Cent[i] != '\0') //只要沒有寫到結束標志,就繼續(xù)寫</p><p><b> {</b></p><p> WriteData(Cent[i]); //將字符常量寫入LCD</p><p> i++; //指向下一個字符</p&
96、gt;<p> delaynms(50); //延時1ms給硬件一點反應時間</p><p><b> }</b></p><p><b> }</b></p><p> /*****************************************************<
97、;/p><p> 函數(shù)功能:顯示溫度的整數(shù)部分</p><p><b> 入口參數(shù):x</b></p><p> ***************************************************/ </p><p> void display_temp1(unsigned char x)<
98、/p><p><b> {</b></p><p> unsigned char j,k,l; //j,k,l分別儲存溫度的百位、十位和個位</p><p> j=x/100; //取百位</p><p> k=(x%100)/10; //取十位</p><
99、p> l=x%10; //取個位 </p><p> WriteAddress(0x46); //寫顯示地址,將在第2行第7列開始顯示</p><p> WriteData(digit[j]); //將百位數(shù)字的字符常量寫入LCD</p><p> WriteData(digit[k]); //將十位數(shù)字的字
100、符常量寫入LCD</p><p> WriteData(digit[l]); //將個位數(shù)字的字符常量寫入LCD</p><p> delaynms(50); //延時1ms給硬件一點反應時間 </p><p><b> }</b></p><p> /***************
101、**************************************</p><p> 函數(shù)功能:顯示溫度的小數(shù)數(shù)部分</p><p><b> 入口參數(shù):x</b></p><p> ***************************************************/ </p><p>
102、; void display_temp2(unsigned char x)</p><p><b> {</b></p><p> WriteAddress(0x4a); //寫顯示地址,將在第2行第11列開始顯示</p><p> WriteData(digit[x]); //將小數(shù)部分的第一位數(shù)字字符常量寫入LCD
103、</p><p> delaynms(50); //延時1ms給硬件一點反應時間</p><p><b> }</b></p><p> /*****************************************************</p><p> 函數(shù)功能:做好讀溫度的準備&l
104、t;/p><p> ***************************************************/ </p><p> void ReadyReadTemp(void)</p><p><b> {</b></p><p> Init_DS18B20(); //將DS18B20初始化
105、</p><p> WriteOneChar(0xCC); // 跳過讀序號列號的操作</p><p> WriteOneChar(0x44); // 啟動溫度轉換 </p><p> for(time=0;time<100;time++)</p><p> ; //溫度轉換需要一點時間</p><p&
106、gt; Init_DS18B20(); //將DS18B20初始化</p><p> WriteOneChar(0xCC); //跳過讀序號列號的操作</p><p> WriteOneChar(0xBE); //讀取溫度寄存器,前兩個分別是溫度的低位和高位</p><p><b> }</b></p><
107、p> /*****************************************************</p><p><b> 函數(shù)功能:主函數(shù)</b></p><p> ***************************************************/ </p><p> void main(
108、void)</p><p><b> { </b></p><p> unsigned char TL; //儲存暫存器的溫度低位</p><p> unsigned char TH; //儲存暫存器的溫度高位</p><p> unsigned char TN; //儲存溫度的整數(shù)部
109、分</p><p> unsigned char TD; //儲存溫度的小數(shù)部分</p><p> LcdInitiate(); //將液晶初始化</p><p> delaynms(5); //延時5ms給硬件一點反應時間</p><p> if(Init_DS18B20()==1)<
110、;/p><p> display_error();</p><p> display_explain();</p><p> display_symbol(); //顯示溫度說明</p><p> display_dot(); //顯示溫度的小數(shù)點</p><p> display_cent()
111、; //顯示溫度的單位</p><p> while(1) //不斷檢測并顯示溫度</p><p><b> {</b></p><p> ReadyReadTemp(); //讀溫度準備</p><p> TL=ReadOneChar(); //先讀的是溫
112、度值低位</p><p> TH=ReadOneChar(); //接著讀的是溫度值高位</p><p> TN=TH*16+TL/16; //實際溫度值=(TH*256+TL)/16,即:TH*16+TL/16</p><p> //這樣得出的是溫度的整數(shù)部分,小數(shù)部分被丟棄了</p><p> TD=(TL%16)
113、*10/16; //計算溫度的小數(shù)部分,將余數(shù)乘以10再除以16取整,</p><p> //這樣得到的是溫度小數(shù)部分的第一位數(shù)字(保留1位小數(shù))</p><p> display_temp1(TN); //顯示溫度的整數(shù)部分</p><p> display_temp2(TD); //顯示溫度的小數(shù)部分</p><p&g
114、t; delaynms(10); </p><p><b> }</b></p><p><b> }</b></p><p><b> 附件</b></p><p><b> 目 錄</b></p>
115、<p> 大學本科生畢業(yè)論文(設計)</p><p> 管理規(guī)定 (2013年11月修訂)……………………1</p><p> 大學本科畢業(yè)論文(設計)</p><p> 格式和打印要求…………………………………17</p><p> 大學本科畢業(yè)論文(設計)</p><p> 封面及表格………
116、………………………………27</p><p> 大學本科畢業(yè)論文(設計)</p><p> 指導教師職責……………………………………47</p><p> 大學本科畢業(yè)論文(設計)</p><p> 管理人員職責……………………………………50</p><p> 大學校級優(yōu)秀本科畢業(yè)論文(設計)</p&
117、gt;<p> 評選的有關規(guī)定…………………………………51</p><p> 大學關于本科生到校外做畢業(yè)論文(設計)</p><p> 的有關規(guī)定………………………………………56</p><p> 大學本科生畢業(yè)論文(設計)</p><p><b> 管理規(guī)定</b></p>&
118、lt;p> 二○一三年十一月修訂</p><p> 本科生畢業(yè)論文(設計)【以下簡稱畢業(yè)論文(設計)】是實現(xiàn)高等學校人才培養(yǎng)目標的重要教學環(huán)節(jié),是培養(yǎng)學生創(chuàng)新意識和創(chuàng)新能力的重要手段,是理論學習與社會實踐相結合的重要體現(xiàn)。</p><p> 為進一步規(guī)范畢業(yè)論文(設計)管理,提高畢業(yè)論文(設計)質量,提高我校人才培養(yǎng)工作水平,特制定本規(guī)定。本規(guī)定適用于我校對全校全日制本科生畢業(yè)
119、論文(設計)的管理,是各學院開展畢業(yè)論文管理和學校進行教學質量評價的依據(jù)。</p><p><b> 一、指導思想</b></p><p> 畢業(yè)論文(設計)的目的,是鞏固學生所學專業(yè)基礎知識,加強學生基本技能訓練,通過知識和技能的綜合運用,培養(yǎng)學生嚴謹求實的治學方法和刻苦鉆研、勇于探索的精神,提高學生獲取新知識的能力和創(chuàng)新能力。</p><p
120、> 畢業(yè)論文(設計)具有學術論文性質,是學生科研能力與學識水平的體現(xiàn)。學生撰寫的畢業(yè)論文(設計),在內容上應當符合《中華人民共和國學位條例》中所規(guī)定的“已較好地掌握本門學科的基礎理論、專門知識和基本技能,具有從事科學研究工作或擔負專門技術工作的初步能力”的水平要求,在形式上應當符合學術論文的規(guī)范格式。</p><p> 在畢業(yè)論文(設計)選題與寫作中,指導教師要引導學生面向經(jīng)濟社會發(fā)展的需要,注重理論聯(lián)
121、系實際,加強對學生創(chuàng)新意識和創(chuàng)新能力的培養(yǎng),既要遵循科學研究的一般規(guī)律,又要符合本科教學的基本要求,以實現(xiàn)本科專業(yè)人才的培養(yǎng)目標。</p><p><b> 二、組織管理</b></p><p> 畢業(yè)論文(設計)的管理采取學院具體負責,教務處宏觀指導的體制,實行在主管教學校長領導下,由教務處和各學院共同管理和組織實施的校、院二級管理。</p>&l
122、t;p> 1. 教務處負責制定畢業(yè)論文(設計)管理的基本規(guī)則和要求,對畢業(yè)論文(設計)管理工作進行指導和監(jiān)督,遴選校級優(yōu)秀畢業(yè)論文(設計)和天津市級優(yōu)秀畢業(yè)論文(設計)。</p><p> 2. 學院根據(jù)教育部關于畢業(yè)論文(設計)的指導意見和學校的總體要求,結合本專業(yè)特點和人才培養(yǎng)需要,制定相應的畢業(yè)論文(設計)撰寫要求,并負責該項工作的組織和管理,以及對工作開展情況進行自查。</p>&
123、lt;p> 3. 學院應當成立畢業(yè)論文(設計)管理工作領導小組,由主管教學的學院領導任組長,負責對畢業(yè)論文(設計)工作的領導和管理。在領導小組下指定專人負責,按照《管理人員職責》要求,為學生協(xié)調畢業(yè)論文(設計)指導教師和答辯時間,安排學生在撰寫畢業(yè)論文(設計)期間的學習和課程。</p><p> 4. 在進行畢業(yè)論文(設計)研究階段,學校和學院應當為學生提供查閱資料和進行實驗的條件。</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于89c51和ds18b20的數(shù)字溫度計設計畢業(yè)論文
- 畢業(yè)設計----ds18b20數(shù)字溫度計論文
- ds18b20數(shù)字溫度計的設計
- 畢業(yè)設計---ds18b20數(shù)字溫度計的設計
- 基于ds18b20的溫度計設計
- ds18b20 數(shù)字溫度計外文翻譯
- 課程設計--ds18b20數(shù)字溫度計
- 基于at89s52智能語音溫度計設計畢業(yè)論文
- 基于at89s52并行口的數(shù)字溫度計設計畢業(yè)論文
- 外文翻譯---ds18b20 數(shù)字溫度計
- ds18b20數(shù)字溫度計設計課程設計
- 基于at89s52單片機的數(shù)字溫度計設計畢業(yè)論文
- 基于89c51與ds18b20溫度計
- 基于ds18b20的數(shù)字溫度計設計與實現(xiàn)
- 基于ds18b20的單總線數(shù)字溫度計畢業(yè)設計
- 課程設計-基于ds18b20數(shù)字溫度計的設計
- ds18b20 數(shù)字溫度計外文資料翻譯
- 基于at89s52并行口的數(shù)字溫度計的設計畢業(yè)論文
- 畢業(yè)設計---ds18b20數(shù)字溫度計(含外文翻譯)
- ds18b20溫度計課程設計
評論
0/150
提交評論