版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 課程設計報告</b></p><p> 名 稱:數(shù)字氣壓計 </p><p> 專 業(yè): </p><p> 年 級: 09級 </p><p> 學 號: </p
2、><p><b> 學生姓名: </b></p><p> 指導老師: </p><p> 完成日期:2012年 05月15 日</p><p> 摘要:氣壓表在現(xiàn)實生活中的使用并不是很明顯,大部分人在一生中很少甚至是沒有接觸過氣壓表,但是氣壓表在某一些工作領域確實是不可或缺的重要物件
3、,例如國防領域、醫(yī)療領域、工業(yè)領域。本設計介紹了一種基于氣壓傳感器MPX4115的數(shù)字氣壓系統(tǒng)的實時顯示電路設備。它首先通過傳感器MPX4115獲得與大氣壓相對于的模擬電壓值,其次它經過電壓頻率轉換模塊轉換為數(shù)字脈沖,單片機接受該數(shù)字脈沖信號后,由得到的單位時間內獲得的脈沖數(shù)依據電壓與頻率的線性關系式計算出對應的實際氣壓值,最后在單片機的控制下在液晶顯示模塊上顯示實時的氣壓值。</p><p> 關鍵詞:單片機
4、;氣壓傳感器;液晶顯示器;V/F轉換器</p><p> 引言:1643年,托里查理實驗的成功,標志著人類開始意識到大氣壓的存在并開始著手研究大氣壓給我們的生活帶來的影響。最古老的氣壓計應屬水銀氣壓計和無液氣壓計。</p><p> 傳統(tǒng)的氣壓計往往體積會比較大,而且在對氣壓的測量時也無法直觀的讀出其大小,其精度較低,容易受環(huán)境影響。二十一世紀是一個信息飛速發(fā)展的時代,傳統(tǒng)的氣壓計由于
5、其自身缺陷已無法適應當今時代的需求,對其改革成為了必然趨勢,因此,對數(shù)字氣壓計的研究和設計對氣壓測量而言有了十分實際的意義。</p><p> 二十一世紀追求的是飛躍式的技術發(fā)展,特別是隨著電子制造技術的進步,使氣壓計趨向于向數(shù)字化、小型化方向發(fā)展成為了可能。數(shù)字化和小型化的氣壓計的出現(xiàn)使得各個領域對氣壓的測量更加便捷和直觀。例如汽車氣壓計,使得汽車愛好者更懂得如何保護自己的愛車。輪胎是汽車安全行駛的一個沖要部
6、件,由于輪胎的原因造成的安全事故的后果是極其嚴重的,胎壓是輪胎的生命,所以要隨時保證在正確的胎壓下行駛,是對車主人身安全的負責。胎壓過低會導致不正常磨損或輪胎內部損傷,胎壓過高則會使得輪胎及輪胎圈較容易受到不平地面的沖擊而變形,甚至會導致爆胎。胎壓必須隨時檢查,而且要在輪胎冷卻的情況下進行,否則高溫會使氣壓升高,導致測量結果不準確。</p><p> 由此可見,數(shù)字氣壓計對我們的生活帶來的影響是巨大的。<
7、/p><p><b> 一,功能要求</b></p><p> 該課程設計數(shù)字氣壓計的主要功能是顯示當前的氣壓。</p><p> 該課題的主要技術指標是LCD1602上顯示的氣壓是否準確,如果有波動,波動范圍是否在可控制范圍之內。</p><p><b> 二、系統(tǒng)設計</b></p&g
8、t;<p><b> 1整體設計思想</b></p><p> 本設計主要的功能是使整個電路能夠完成液晶顯示器上能顯示出正確的氣壓讀數(shù)。設計系統(tǒng)結構時,需要考慮整體的穩(wěn)定性、復雜程度、整體造價及調試時要考慮的難易程度等因數(shù)。圖1-1所示框圖中的每一部分對應一個電路單元,各部分電路可獨立完成各自功能。各模塊之間沒有復雜的信號傳輸,干擾較小,系統(tǒng)較穩(wěn)定。本設計是基于MPX411
9、5的數(shù)字氣壓計的設計,主要包括對軟硬件的設計和調試。軟件部分應用C語言及單片機知識根據系統(tǒng)特點寫出需要的單片機程序。硬件部分主要包括四大塊,即大氣壓的非電信號數(shù)據的采集、轉換、處理以及顯示。</p><p><b> 2系統(tǒng)總框圖</b></p><p> 氣壓計硬件部分由四部分構成,它們分別是:信息采集模塊,數(shù)據轉換模塊,信息處理模塊和數(shù)據顯示模塊。下圖為系統(tǒng)總
10、框圖。</p><p><b> 1-1系統(tǒng)總框圖</b></p><p> 三、主要元器件的功能作用</p><p> 1 .氣壓傳感器MPX4115</p><p> MPX4115系列壓電電阻傳感器是一個硅壓力傳感器。這個傳感器結合高級的微電機技術,薄膜鍍金屬。還能為高水準模擬輸出信號提供一個均衡壓力。在0
11、℃-85℃的溫度下誤差不超過1.5%,溫度補償是-40℃-125℃。</p><p> MPX4115具有溫度補償作用,穩(wěn)定性和抗干擾能力很強。且可以產生與所加氣壓呈線性關系的高精度模擬輸出電壓。具體輸出關系如下:</p><p> Vout = Vs ( 0. 01059 P - 0. 1528) ±Error</p><p> 式中, Vs 是工
12、作電壓, P 是大氣壓值, Vout 為輸出電壓。</p><p> 2. 數(shù)據轉換芯片LM331</p><p> 氣壓傳感器MPX4115輸出的是模擬電壓,因此,必須進行模擬到數(shù)字的轉換才能交由單片機處理。</p><p> LM331是一款高精度電壓頻率轉換芯片。LM331芯片的突出特點就是它能夠把模擬電壓轉換成抗干擾能力強、可以遠距離傳輸并能直接輸入到
13、單片機接口的脈沖序列。通過測量V/F輸出頻率,可以實現(xiàn)A/D轉換功能。</p><p> LM331 各引腳功能說明如下:腳1 為脈沖電流輸出端,內部相當于脈沖恒流源,脈沖寬度與內部單穩(wěn)態(tài)電路相同;腳2 為輸出端脈沖電流幅度調節(jié),RS 越小,輸出電流越大;腳3 為脈沖電壓輸出端,OC 門結構,輸出脈沖寬度及相位同單穩(wěn)態(tài),不用時可懸空或接地;腳4 為地;腳5 為單穩(wěn)態(tài)外接定時時間常數(shù)RC ;腳6 為單穩(wěn)態(tài)觸發(fā)脈沖
14、輸入端,低于腳7 電壓觸發(fā)有效,要求輸入負脈沖寬度小于單穩(wěn)態(tài)輸出脈沖寬度Tw ;腳7 為比較器基準電壓,用于設置輸入脈沖的有效觸發(fā)電平高低;腳8 為電源Vcc , 正常工作電壓范圍為4~40V。線性度好, 最大非線性失真小于0. 01 % , 工作頻率低到0. 1Hz 時尚有較好的線性;變換精度高數(shù)字分辨率可達12 位;外接電路簡單, 只需接入幾個外部元件就可方便構成V/ F 或F/ V 等變換電路,并且容易保證轉換精度。</p&
15、gt;<p><b> 四、模塊設計</b></p><p><b> 1.A/D轉換模塊</b></p><p> 單片機接受傳感器的電壓值為模擬信號,它要和A/D轉換模塊的脈沖波發(fā)生裝置發(fā)送過來的標準模擬信號相比較,即通過P1.0和P1.1引腳進行比較,同時開發(fā)定時器0,當待測模擬信號超過標準模擬信號時,P3.4引腳信號將
16、會發(fā)生變化,此時的定時器0的值通過量綱轉化就得到了相應的數(shù)字信號。</p><p><b> 2.數(shù)據處理模塊</b></p><p> 數(shù)據處理模塊主要是對A/D轉換模塊的數(shù)據進行多次采集,并且對采集的數(shù)據進行處理,此處理過程主要是對采集的數(shù)據進行初值定義以及相應的移位處理,并且把處理好的數(shù)據送入相應的緩沖區(qū),為后面的顯示模塊作好準備。</p>&
17、lt;p><b> 3.顯示模塊</b></p><p> 用單片機芯片STC89C52的P0.0/AD0-P0.7/AD7端口與LCD顯示屏的D0-D7腳相連接,通過STC89C52的P2.0-P2.2端口來控制選通LCD顯示屏的位選端。在數(shù)據的顯示模塊中,我們采用的是1602LCD液晶顯示。</p><p> 以下為各個模塊的詳細情況:</p&g
18、t;<p><b> 1信息采集模塊</b></p><p> 信息采集模塊主要應用的器件是MPX4115氣壓傳感器。MPX4115系列壓電電阻傳感器是一個硅壓力傳感器。這個系列傳感器結合了高級的微電機技術和薄膜鍍金屬技術,還能為高水準模擬輸出信號提供一個均衡壓力。在0℃-85℃的溫度下誤差不超過1.5%,溫度補償是-40℃-125℃。</p><p&g
19、t; 數(shù)據采集模塊由氣壓傳感器MPX4115構成,采集的是大氣壓值。其中1腳是輸出信號端,輸出的是與氣壓值相對應的模擬電壓信號。數(shù)據采集模塊的原理如圖2-1所示。</p><p> 圖3-1 數(shù)據采集模塊原理圖</p><p><b> 2數(shù)據轉換模塊</b></p><p> 氣壓傳感器MPX4115輸出的是模擬電壓,因此,必須進行模
20、擬到數(shù)字的轉換才能交由單片機處理。在數(shù)據轉換模塊選用的是LM331芯片,它是一款高精度電壓頻率轉換芯片。</p><p> V/F器件的作用是將輸入電壓的幅值轉換成頻率與輸入電壓幅值成正比的脈沖序列,雖然V/F器件本身還不能算作量化器,但加上定時器與計數(shù)器以后也可以實現(xiàn)A/D轉換。V/F器件的突出特點就是它能夠把模擬電壓轉換成抗干擾能力強、可以遠距離傳輸并能直接輸入到單片機接口的脈沖序列。通過測量V/F輸出頻率
21、,可以實現(xiàn)A/D轉換功能。</p><p> LM331構成的V/F轉換器的電路如圖2-2所示。其中圖中的7號引腳Vin是數(shù)據轉換模塊的數(shù)據輸入端,接到上一個數(shù)據采集模塊的輸出端。而3號引腳F0是數(shù)據轉換模塊的輸出端。</p><p> 圖3-2 數(shù)據轉換模塊原理圖</p><p> LM331是性能價格比比較高的集成芯片。它是當前最簡單的一種高精度V/F轉換
22、器、A/D轉換器、線性頻率調制解調、長時間積分器以及其它相關的器件。</p><p><b> 3 數(shù)據處理模塊</b></p><p> 對于LM331輸出的頻率信號要經過單片機的數(shù)據處理,通過頻率與氣壓之間的關系計算出氣壓值。本設計應用的是單片機芯片是STC89C52。STC89C52單片機最為核心的部分是中央處理器CPU,它由運算器和控制邏輯構成,其中包括若
23、干特殊功能寄存器。STC89C52單片機有8K字節(jié)程序存儲空間,512字節(jié)數(shù)據存儲空間,和內帶2K字節(jié)EEPROM存儲空間。而普通的51系列單片機芯片僅帶有8K字節(jié)程序存儲空間和256字節(jié)數(shù)據存儲空間,沒有內帶的EEPROM存儲空間。STC系列是增強型的51單片機,可以兼容標準51系列的,但反過來AT51系列的未必能兼容STC的某些功能。兩者的下載器不一樣,AT型號用并行口下載,一般的AVR下載器就可以使用;而STC的是串口下載,兩者下
24、載器不兼容。</p><p> 單片機部分的原理如下圖所示。 </p><p> 圖 3-3 單片機的部分應用原理圖</p><p> STC89C52的引腳如圖2-4所示。</p><p> 圖3-4 單片機引腳圖</p><p> 本設計中單片機的主要功能是對上一A/D轉換模塊的數(shù)據進行多次采集并出來
25、,其處理過程主要是對采集的數(shù)據進行初值定義以及相應的移位處理,把處理好的數(shù)據送入相應的緩沖區(qū),為后面的模塊做準備。</p><p><b> 4顯示模塊</b></p><p> 本設計使用的顯示器件為液晶顯示器。液晶顯示器簡稱LCD顯示器,它是利用液晶經過處理后能夠改變光線的傳輸方向的特性實現(xiàn)顯示信息的,液晶顯示模塊具有體積小、功耗低、顯示內容豐富超薄輕巧等優(yōu)點
26、,在單片機應用系統(tǒng)中得到日益廣泛的應用。</p><p> 本設計中選擇字符型液晶顯示器LCD1602。LCD1602可以顯示兩行,每行16個字符,采用+5V電源供電,外圍電路配置簡單。LCD1602是一種專門用于顯示字母、數(shù)字、符號等點陣式LCD。 </p><p> 顯示器部分的電路如圖2.5所示。</p><p> 圖3-5 顯
27、示模塊原理圖</p><p> 如圖所示,10K的滑阻用于調節(jié)LCD液晶顯示屏的背光,使其能工作在更好的狀態(tài)下。RS、RW、E分別連接STC89C52的P2.1、P2.2、P2.0相連接,控制LCD顯示的讀寫狀態(tài);而DB0-DB7與STC89C52的P0口相連接進行數(shù)據傳輸。</p><p><b> 五、 總體原理圖</b></p><p&g
28、t;<b> 六、程序流程圖</b></p><p> 單片機實現(xiàn)數(shù)字氣壓計的程序流程如圖5.1所示。</p><p> 圖5.1 程序流程圖</p><p><b> 七、單片機調試仿真</b></p><p> 根據以上程序流程圖,參考了網上的一些程序,自己在Keil軟件上運行,編譯
29、,得到最后所需的程序。</p><p> 這里我們采用proteus的系統(tǒng)總體執(zhí)行效果調試方法,調試單片機的供應電源和復位電路部分。這里單片機時鐘工作在11.0592MHZ,電源電路、晶振電路和復位電路是整個系統(tǒng)正常工作的基礎,應首先保證它們的正常工作。其仿真圖如下圖5-1:</p><p><b> 圖5-1</b></p><p>
30、PCB應用Protel軟件進行繪制,并使用電氣規(guī)則功能(ERC)檢查原理圖的連接是否合理和正確。 若有錯誤,可根據錯誤提示進行反復調試和改正,可得最終的PCB電路原理圖如下圖5-2所示:</p><p> 封裝后得到的PCB圖:</p><p> 封裝之后打印出來的電路圖如圖</p><p><b> 八、調試及性能分析</b></
31、p><p><b> 1、調試過程</b></p><p> 我們按照設計好的電路圖焊出了我們組的第一塊電路板,然后按照電路圖將每一部分接線用跳線連接好,將程序下載到單片機芯片上,開始對電路板進行調試。但是在程序成功下載的情況下,我們發(fā)現(xiàn)LCD1602顯示屏上沒有顯示任何東西,但有顯示屏顯示確實有接上電源。排除了LCD顯示屏損壞的可能,考慮到可能是LCD顯示屏沒有調好
32、的可能,我們對10K滑阻進行調節(jié)并對1602LCD顯示屏進行觀察,發(fā)現(xiàn)顯示屏依然沒有任何變化,于是我們沒有再調節(jié)電阻,然后提出了電路焊接出現(xiàn)錯誤的可能性。于是,我們用萬用表檢查接線是否有錯誤,線路是否有短路等,仔細檢查了半天也沒發(fā)現(xiàn)可能性比較大的錯誤,向老師請教過之后也沒有找出問題的所在,于是我們幾個組員進行討論之后,覺得可以找一個單獨的可以實現(xiàn)的LCD1602顯示程序下載進去之后,發(fā)現(xiàn)還是沒有什么進展,由于也沒有想到其他的解決辦法,我
33、們第一天的調試也就先告一段落。</p><p> 第二天我們重復著第一天的步驟,把編譯好的程序下載到單片機上,嘗試性的再次調節(jié)滑阻,結果顯示屏開始發(fā)生變化,LCD顯示屏上顯示了我們實驗所要顯示的頻率值和電壓值。我們查找了一下泉州最近的氣壓值,發(fā)現(xiàn)顯示的結果和實際還是有些誤差。接著,我們就嘗試調節(jié)了用于改變LM331增益的滑阻,但是調試的結果顯示雖然顯示值有變化,但和實際值的誤差還是挺大的。明確了這一點后,我們把
34、重心放在了程序的調試上。</p><p> 我們發(fā)現(xiàn)程序出現(xiàn)的第一個問題,就是通過單片機計算出來的頻率的值是以二進制的形式顯示的,而我們使用頻率計算氣壓時的公式是十進制的,所以我們在程序調試時將二進制轉換成了十進制。在解決了這個問題后,我們覺得LCD1602顯示的位置不是很好,于是我們在LCD液晶顯示部分的顯示程序進行修改,通過不斷的調試,我們發(fā)現(xiàn)只要將顯示的位置全部向左移一位(除了單位)來顯示就可以達到很好的
35、視覺效果。</p><p> 這樣,我們完成了我們預定的實驗目標。在時間充沛的情況下,我們小組一致認為可以在顯示部分再加上顯示時間的功能,所以我們又開始對我們的程序進行修改,可能是使用不當?shù)年P系,在進行時間顯示功能的測試中,我們組共用的傳感器開始出現(xiàn)故障,甚至不能再進行正常的工作,至此,我們的課程設計也只能暫時終止,后在經過小組討論之后,我們?yōu)槲覀兇舜蔚恼n程設計畫上了句號,雖然它并不完美。</p>
36、<p><b> 2、性能分析</b></p><p> 由于本次實驗所有過程都是在實驗室里進行,實驗室內開著的風扇,實驗室可能存在的會影響氣壓的東西,再加上本身焊接可能存在的問題及元器件的性能不穩(wěn)定等因數(shù),LCD1602顯示屏顯示的氣壓值會在一個交小的范圍內波動,這應屬于正?,F(xiàn)象。而且這樣基本上達到了我們剛開始預期的結果。</p><p> 由于我
37、們做完這個還有幾天時間,于是我們想在加一個功能,就是在LCD1602的第一行顯示時間,加上我們的硬件已經完成,我們只能在軟件程序上下功夫啦,可是由于我們的最小系統(tǒng)板上的按鍵是矩陣式的,而我們大多數(shù)人只寫了獨立式按鍵的時鐘顯示,,我們又得繼續(xù)修改??刹辉氲?,在我們一次次上電測試的時候,氣壓傳感器MPX4115時不時的不工作啦,我們只能停下啦,沒能完成后面我們想加的時鐘顯示功能是我們本次課程設計的一大遺憾,但最起碼我們完成了最初的設想,本
38、次課程設計算是基本上滿足要求啦。</p><p><b> 九、結 論</b></p><p> 為期兩個星期的單片機課程設計結束啦。這次課程設計做的是數(shù)字氣壓計,數(shù)字氣壓計現(xiàn)在的產品不是很多,但由于其精度高、讀數(shù)準確簡單等優(yōu)點,相信在今后會得到廣泛的運用。</p><p> 在這兩個星期中,我們小組從剛開始的茫然到最后把作品做出來,其
39、中經歷的許多,雖然最終的作品不是很滿意,但其基本上還是滿足了剛開始的設計,在者,我們從中學到了不少。</p><p> 首先我能夠用幾個軟件(Keil。Protel,Protel),能夠自己畫PCB板,腐蝕,打印電路板,還有就是編程,通過自己的努力把作品做出來,當然這其中和小組其他人的作用是分不開的,我們能夠共同努力,一起探討。這才是最重要的。</p><p> 這次課程設計做的是數(shù)字
40、氣壓計,數(shù)字氣壓計現(xiàn)在的產品不是很多,但由于其精度高、讀數(shù)準確簡單等優(yōu)點,相信在今后會得到廣泛的運用。</p><p><b> 十、參考文獻:</b></p><p> [1] 曹丙霞. Protel99SE原理圖與PCB設計 電子工業(yè)出版社,2000</p><p> [2] 戴佳. 51單片機C語言應用程序設計實例精講 電子工業(yè)出版
41、社,2006</p><p> [3] 徐愛均. 單片機高級語言C51應用程序設計 電子工業(yè)出版社,2004</p><p> [4] 周興華. 手把手教你學單片機C程序設計 北京航空航天大學出版社,2004</p><p> [5] 嚴天峰. 單片機應用系統(tǒng)設計與仿真調試 北京航空航天大學出版社,2001</p><p><b&
42、gt; 附錄 程序代碼</b></p><p> #include <reg52.h> </p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> #define ulong unsigned long
43、</p><p> #define K 2000</p><p> #define LCD_DATA P0 </p><p><b> uint Pa;</b></p><p> uchar T0count; </p><p> uchar timecount; </p&g
44、t;<p> uint flag; </p><p> ulong fo; </p><p> sbit LCD_RS = P2^0; </p><p> sbit LCD_RW = P2^1;</p><p> sbit LCD_E = P2^2;</p><p> //LCD顯
45、示內容,定義到代碼段</p><p> uchar code LcdBuf1[]= {" welcom! LM331"};</p><p> uchar code LcdBuf2[]= {" Voltage test!"};</p><p> uchar temp[8]; </p><p> u
46、char dispbuf[8]={0,0,0,0,0,0,10,10}; </p><p><b> //函數(shù)聲明</b></p><p> void lcd_init(void);</p><p> void display_string(unsigned char x,unsigned char y,unsigned cha
47、r *s);</p><p> void display_char(unsigned char x,unsigned char y,unsigned char dat);</p><p> void delay(uint z)//延時1ms</p><p><b> {</b></p><p><b&
48、gt; uint x,y;</b></p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p> /******************************************
49、********</p><p> ** 函數(shù)名稱: dellay</p><p> ** 入口參數(shù):h(unsigned int型)</p><p><b> ** 出口參數(shù):無</b></p><p> ** 功能描述: 短暫延時,使用11.0592晶體,約0.01MS</p><p>
50、; ****************************************************/</p><p> void dellay(unsigned int h)</p><p><b> {</b></p><p> while(h--); //0.01MS</p><p><
51、;b> }</b></p><p> /**************************************************</p><p> ** 函數(shù)名稱: WriteDataLcd</p><p> ** 入口參數(shù):wdata(unsigned char型)</p><p><b>
52、 ** 出口參數(shù):無</b></p><p> ** 功能描述: 寫數(shù)據到LCD</p><p> ****************************************************/</p><p> void WriteDataLcd(unsigned char wdata)</p><p>
53、<b> {</b></p><p><b> LCD_RS=1;</b></p><p> LCD_DATA=wdata;</p><p> dellay(100); //短暫延時,代替檢測忙狀態(tài)</p><p><b> LCD_E=1;</b></
54、p><p> dellay(100); //短暫延時,代替檢測忙狀態(tài)</p><p><b> LCD_E=0;</b></p><p><b> }</b></p><p> /**************************************************<
55、/p><p> ** 函數(shù)名稱: WriteCommandLcd</p><p> ** 入口參數(shù):wdata(unsigned char型)</p><p><b> ** 出口參數(shù):無</b></p><p> ** 功能描述: 寫命令到LCD</p><p> ***********
56、******************************************/</p><p> void WriteCommandLcd(unsigned char wdata)</p><p><b> {</b></p><p><b> LCD_RS=0;</b></p><p
57、> LCD_DATA=wdata;</p><p> dellay(100); //短暫延時,代替檢測忙狀態(tài)</p><p><b> LCD_E=1;</b></p><p> dellay(100); //短暫延時,代替檢測忙狀態(tài)</p><p><b> LCD_E=0
58、;</b></p><p><b> }</b></p><p><b> //LCD初始化</b></p><p> void lcd_init (void)</p><p><b> {</b></p><p><b>
59、; LCD_E=0;</b></p><p> WriteCommandLcd(0x38);</p><p> WriteCommandLcd(0x38); //顯示模式設置 WriteCommandLcd(0x08); //關閉顯示</p><p> WriteCommandLcd (0x0c);</p><p>
60、 WriteCommandLcd(0x06); //顯示光標移動設置</p><p> WriteCommandLcd(0x01); //顯示清屏</p><p> WriteCommandLcd(0x01);</p><p> WriteCommandLcd(0x90); //顯示開及光標移動設置</p><p><b>
61、 }</b></p><p> /**************************************************</p><p> ** 函數(shù)名稱: display_xy</p><p> ** 入口參數(shù):x(unsigned char型),y(unsigned char型)</p><p>&l
62、t;b> ** 出口參數(shù):無</b></p><p> ** 功能描述: 設置光標位置, x是列號,y是行號</p><p> ****************************************************/</p><p> void display_xy(unsigned char x,unsigned
63、char y)</p><p><b> { </b></p><p><b> if(y==1)</b></p><p><b> x+=0x40;</b></p><p><b> x+=0x80;</b></p><p&g
64、t; WriteCommandLcd(x);</p><p><b> }</b></p><p> /********************************************************************</p><p> ** 函數(shù)名稱: display_char</p><p&
65、gt; ** 入口參數(shù):x(unsigned char型),y(unsigned char型),dat(unsigned char型)</p><p><b> ** 出口參數(shù):無</b></p><p> ** 功能描述: 在具體位置顯示單個字符,x是列號,y是行號</p><p> **********************
66、************************************************/</p><p> void display_char(unsigned char x,unsigned char y,unsigned char dat)</p><p><b> {</b></p><p> display_xy
67、(x,y);</p><p> WriteDataLcd(dat);</p><p><b> }</b></p><p> /*********************************************************************</p><p> ** 函數(shù)名稱: displ
68、ay_string</p><p> ** 入口參數(shù):x(unsigned char型),y(unsigned char型),s(指針型)</p><p><b> ** 出口參數(shù):無</b></p><p> ** 功能描述: 在具體位置顯示字符串,以/0結束,x是列號,y是行號</p><p> ****
69、******************************************************************/</p><p> void display_string(unsigned char x,unsigned char y,unsigned char *s)</p><p><b> {</b></p>&l
70、t;p> display_xy(x,y);</p><p><b> while(*s)</b></p><p><b> {</b></p><p> WriteDataLcd(*s);</p><p><b> s++;</b></p><
71、;p><b> }</b></p><p><b> }</b></p><p> void main(void) </p><p><b> { </b></p><p> unsigned char i; </p><p><b
72、> LCD_RW=0;</b></p><p> delay(100);</p><p> lcd_init();</p><p> display_string(0,0,LcdBuf1); //顯示第一行,從第3個位置開始</p><p> display_string(0,1,LcdBuf2); //顯示第
73、二行,從第0個位置開始 </p><p> delay(3000);</p><p> TMOD=0x15; //初始化定時器工作方式</p><p><b> TH0=0; </b></p><p> TL0=0; //初始化定時器0值</p><p> TH1=(65536-5000
74、0)/256; //初始化定時器0值</p><p> TL1=(65536-50000)%256; </p><p> TR1=1; //啟動定時器1</p><p> TR0=1; //啟動定時器0</p><p> ET0=1; //定時器0使能</p><p> ET1=1; //定時器1使能<
75、/p><p> EA=1; //總中斷允許</p><p> WriteCommandLcd(0x01);</p><p> WriteCommandLcd(0x01); //顯示清屏</p><p><b> while(1) </b></p><p><b> { </b
76、></p><p> if(flag==1) //1S標志到</p><p><b> { </b></p><p> flag=0; //清1S標志</p><p> fo=T0count*65536+TH0*256+TL0;// 計算頻率值</p><p> Pa = (ui
77、nt)(20*(fo)/K+9); </p><p> for(i=0;i<8;i++) //循環(huán)八次</p><p><b> { </b></p><p> temp[i]=0; //將八個顯示換沖區(qū)清零</p><p><b> } </b></p><p
78、><b> i=0; </b></p><p> while(fo/10) //計算每一位數(shù)值緩沖區(qū)</p><p><b> { </b></p><p> temp[i]=fo%10; </p><p> fo=fo/10; </p><p><b
79、> i++; </b></p><p><b> } </b></p><p> temp[i]=fo; </p><p> for(i=0;i<6;i++) //循環(huán)六次</p><p><b> { </b></p><p> disp
80、buf[i]=temp[i]; //將數(shù)值緩沖區(qū)中的數(shù)存入顯示緩沖區(qū)</p><p><b> } </b></p><p> for(i=0;i<6;i++) //循環(huán)六次</p><p> display_char(i+5,0,dispbuf[5-i]+'0');</p><p> d
81、isplay_string(12,0,"HZ");</p><p> for(i=0;i<8;i++) //循環(huán)八次</p><p><b> { </b></p><p> temp[i]=0; //將八個顯示換沖區(qū)清零</p><p><b> } </b>&
82、lt;/p><p><b> i=0; </b></p><p> while(Pa/10) //計算每一位數(shù)值緩沖區(qū)</p><p><b> { </b></p><p> temp[i]=Pa%10; </p><p> Pa=Pa/10; </p>
83、<p><b> i++; </b></p><p><b> } </b></p><p> temp[i]=Pa; </p><p> for(i=0;i<6;i++) //循環(huán)六次</p><p><b> { </b></p>
84、<p> dispbuf[i]=temp[i]; //將數(shù)值緩沖區(qū)中的數(shù)存入顯示緩沖區(qū)</p><p><b> } </b></p><p> display_string(9,1,". KPA");</p><p> display_char(6,1,dispbuf[3]+'0')
85、;</p><p> display_char(7,1,dispbuf[2]+'0');</p><p> display_char(8,1,dispbuf[1]+'0');</p><p> display_char(9,1,'.');</p><p> display_char(10
86、,1,dispbuf[0]+'0');</p><p> timecount=0; //200次計數(shù)值清零</p><p> T0count=0; //脈沖計數(shù)值清零</p><p> TH0=0; //T0計數(shù)值清零</p><p> TL0=0; //T0計數(shù)值清零</p><p> TR
87、0=1; //再次啟動下一次的計數(shù)</p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> void t0(void) interrupt 1 using 0 </p>&l
88、t;p><b> { </b></p><p> T0count++; //定時器0中斷,滿65536個脈沖,則T0count++;</p><p><b> } </b></p><p> void t1(void) interrupt 3 using 0 </p><p><
89、b> { </b></p><p> TH1=(65536-50000)/256; //重新規(guī)定TH計數(shù)初值為50ms</p><p> TL1=(65536-50000)%256; </p><p> timecount++; </p><p> if(timecount==20) //如果滿足20個50MS
90、,即1S到</p><p><b> { </b></p><p> TR0=0; //定時器0停止</p><p> timecount=0; //時間標志位清零</p><p> flag=1; //1S標志位置1</p><p><b> } </b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機氣壓計課程設計
- 畢業(yè)設計(論文)-基于單片機的氣壓計設計
- 基于單片機的數(shù)字氣壓計設計-畢業(yè)設計
- 畢業(yè)設計——基于單片機的數(shù)字氣壓計設計
- 基于單片機的數(shù)字氣壓計的設計與實現(xiàn)
- 基于單片機的數(shù)字氣壓計設計畢業(yè)論文
- 溫度計課程設計---單片機課程設計報告
- 單片機課程設計報告---頻率計
- 單片機控制的數(shù)字氣壓計的設計與實現(xiàn)畢業(yè)設計
- 單片機課程設計報告--- 基于單片機的頻率計設計
- 單片機課程設計報告---基于單片機的數(shù)字溫度計設計
- 單片機簡易頻率計課程設計報告
- 單片機課程設計報告數(shù)字溫度計
- 單片機課程設計報告--數(shù)字溫度計
- 單片機課程設計報告-簡易頻率計
- 單片機課程設計報告--數(shù)字溫度計
- 單片機課程設計報告--基于單片機的數(shù)字溫度計設計
- 單片機課程設計報告---數(shù)字溫度計設計
- 單片機頻率計課程設計
- 單片機課程設計---單片機數(shù)字顯示溫度計
評論
0/150
提交評論