基于MCS-51單片機的壓力傳感器實驗
《基于MCS-51單片機的壓力傳感器實驗》由會員分享,可在線閱讀,更多相關《基于MCS-51單片機的壓力傳感器實驗(34頁珍藏版)》請在裝配圖網上搜索。
1、 燕山大學 課 程 設 計 說 明 書 題目: 壓力傳感器實驗 學院(系): 里仁學院 年級專業(yè): 儀表10-2 學 號: 學生姓名: 指導教師: 教師職稱: 燕山大學課程設計(論文)任務書 院(系):電氣工程學院 基層教學單位:儀器科學與工程系 學 號 學生姓名 專
2、業(yè)(班級) 設計題目 壓力傳感器實驗 設 計 技 術 參 數 研究壓力傳感器電路的工作原理和弱信號傳感器電路。熟悉A/D變換電路的工作原理。利用試驗板上提供的壓力傳感器電路,完成壓力的采樣和顯示。 設 計 要 求 設計測量和顯示的硬件電路;編制相應的程序。 工 作 量 設計的內容滿足課程設計的教學目的與要求,設計題目的難度和工作量適合學生的知識和能力狀況,工作量飽滿。 工 作 計 劃 查閱資料進行設計準備、設計硬件電路、編制程序,編制程序、驗證設計、撰寫任務書。 參 考 資 料 單片微型計算機接口技術及其應用 張淑清 國防
3、工業(yè)出版社 單片機原理及應用技術 張淑清 單片機應用技術匯編 指導教師簽字 基層教學單位主任簽字 說明:此表一式四份,學生、指導教師、基層教學單位、系部各一份。 年 月 日 摘要 此次設計是基于8051單片機的壓力檢測系統,簡要介紹了壓力傳感器電路的工作原理和弱信號傳感器電路以及A/D變換電路的工作原理,通過壓力傳感器將需要測量的位置的壓力信號轉化為電信號,再經過運算放大器進行信號放大,送至8位A/D轉換器ADC0808,然后將模擬信
4、號轉換成單片機可以識別的數字信號,再經單片機轉換成LED顯示器可以識別的信息,最后顯示輸出。 關鍵詞: 8051單片機 壓力傳感器 A/D變換電路 LED顯示器 目錄 摘要---------------------------- -------------------------------------------------------------------------2 關鍵字---------------- ----------------------------------------
5、------------------------------------------2 第一章 總體設計方案及模塊劃分---------------------------------------------------------------4 1.1總體設計方案--------------------------------------------------------------------------------4 1.2模塊劃分--------------------------------------------------------------------
6、------------------4 1.3設計框圖如下圖所示-----------------------------------------------------------------------5 第二章各模塊設計參數-------------------------------------------------------------------------------5 2.1傳感器元件模塊------------------------------------------------------------------------------5 2.
7、2 A/D轉換模塊---------------------------------------------------------------------------------8 2.3控制器處理模塊-----------------------------------------------------------------------------14 第三章 壓力傳感器實驗數據采集、顯示及程序---------------------------------------------20 3.1數據采集及顯示-------------------------
8、----------------------------------------------------20 3.2程序設計--------------------------------------------------------------------------------------20 第四章 心得體會--------------------------------------------------------------------------------------29 參考文獻資料-------------------------------------
9、-----------------------------------------------------30 第一章總體設計方案及模塊劃分 1.1 總體設計方案 本次設計是基于8051單片機的測量與顯示。電路采用ADC0809模數轉換電路,ADC0809是CMOS工藝,采用逐次逼近法的8位A/D轉換芯片,片內有帶鎖存功能的8路模擬電子開關,先用ADC0809的轉換器對各路電壓值進行采樣,然后將模擬信號轉換成單片機可以識別的數字信號,再經單片機轉換成LED顯示器可以識別的信息,最后顯示輸出。本次設計是以單片機組成的壓力測量,系統中必須有前向通道作為電信號的輸入通道,用
10、來采集輸入信息。壓力的測量,需要傳感器,利用傳感器將壓力轉換成電信號后,再經放大并經A/D轉換為數字量后才能由計算機進行有效處理。然后用LED進行顯示。本設計的最終結果是,將軟件下載到硬件上調試出來了需要顯示的數據,當輸入的模擬信號發(fā)生變化的時候,通過A/D轉換后,LED將顯示不同的數值。 1.2 模塊劃分 (1) 傳感器元件模塊 傳感器元件主要是對壓力這樣的物理量轉變成電信號。 (2) A/D轉換電路模塊 A/D轉換電路是將模擬量轉換為數字量,便于單片機的處理。 (3) 控制器處理模塊 控制器是通過51系列單片機對數字信號,按照預定目的
11、進行處理。 (4) 顯示與報告模塊 顯示與報告是對于最終輸出結果進行直觀的表達。 1.3設計框圖如下圖所示: 圖1.3.1 設計框圖 第二章 各模塊設計參數 2.1傳感器元件模塊 壓力傳感器是壓力檢測系統中的重要組成部分,由各種壓力敏感元件將被測壓力信號轉換成容易測量的電信號作輸出,給顯示儀表顯示壓力值,或供控制和報警使用。力學傳感器的種類繁多,如電阻應變片壓力傳感器、半導體應變片壓力傳感器、壓阻式壓力傳感器、電感式壓力傳感器、電容式壓力傳感器諧振式壓力傳感器及電容式加速度傳感器等。 而電阻應變式傳感器具有悠久的歷史。由于它具有結構簡單、體積小、使用方
12、便、性能穩(wěn)定、可靠、靈敏度高動態(tài)響應快、適合靜態(tài)及動態(tài)測量、測量精度高等諸多優(yōu)點,因此是目前應用最廣泛的傳感器之一,本實驗采用電阻應變式傳感器作為壓力傳感器。 壓力傳感器構成: 電阻應變式傳感器由彈性元件和電阻應變片構成,當彈性元件感受到物理量時,其表面產生應變,粘貼在彈性元件表面的電阻應變片的電阻值將隨著彈性元件的應變而相應變化。通過測量電阻應變片的電阻值變化,可以用來測量位移加速度、力、力矩、壓力等各種參數。 壓力傳感器的工作原理: 本質上是惠斯通電橋,這里采用的是最常見的電阻應變片式的壓力傳感器。它得到廣泛應用的原因是溫度特性好,減小溫度變化帶來的誤差。膜片上的壓力使得電
13、橋不平衡,從而產生一個差動的輸出信號,這種結構的基本特性之一是它的差動輸出電壓U與偏置電壓U成正比關系,這種關系隱含壓力測量精度直接決定偏置電源的容限值,當四個橋臂電阻達到相應的關系時,電橋輸出為零,或則就有電壓輸出同時,它也能提供一種溫度補償最通用的方法。本實驗研究壓力傳感器電路如圖2.1.1所示,為壓力傳感器的電路,其由三部分組成(1)電源電路部分;(2)電橋電路部分;(3)放大電路部分。 圖2.1.1壓力傳感器電路 如圖示,傳感器采用恒壓源供電,為+15V,經過與分壓(電容起濾波作用),點5、6、7三點處有相同
14、電壓: (2.1.1) 根據上式,帶入數據 , ,,求得。 經過電路電橋部分,簡化如下圖2.1.2 UO 圖2.1.2壓力傳感器電橋電路 設橋臂電阻分別為, ,,則當壓力傳感器受力時,電阻變化對應的輸出電壓值為,由于<<1,則上式可化簡為 (2.1.2) 帶入電阻、電壓值得 .
15、 (2.1.3) 最后經過放大部分,如圖2.1.3,為壓力傳感器的微弱電壓輸出的放大電路。分析它是一個差分放大電路,其放大倍數為 ,那么放大后的電壓值為 又,選定材料,這里取,代入式(4.1.3)得.因為A∕D轉換器的最大輸入電壓為5v,所以該壓力傳感器的測量范圍為0~80N。 UO UO 圖2.1.3放大電路 2.2. A/D轉換模塊 模擬量輸入通道的任務是將模
16、擬量轉換成數字量。能夠完成這一任務的器件稱之為模數轉換器,簡稱A/D轉換器。本次設計的中A/D轉換器的任務是將放大器輸出的模擬信號轉換位數字量進行輸出。 A/D轉換電路的核心元件是ADC0808芯片 ADC0808是ADC0809的簡化版本,功能基本相同。一般在硬件仿真時采用ADC0808進行A/D轉換,實際使用時采用ADC0809進行A/D轉換。ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。 2.2.1 ADC0809的內部邏輯結構 由下圖可知,ADC0809由一個8路模擬開關、一個
17、地址鎖存與譯碼器、一個A/D轉換器和一個三態(tài)輸出鎖存器組成。多路開關可選通8個模擬通道,允許8路模擬量分時輸入,共用A/D轉換器進行轉換。三態(tài)輸出鎖器用于鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態(tài)輸出鎖存器取走轉換完的數據。 圖2.2.1 2.2.2 ADC0809的引腳結構 ADC0809各腳功能如下: D7-D0:8位數字量輸出引腳 IN0-IN7:8位模擬量輸入引腳 VCC:+5V工作電壓 GND:地 REF(+):參考電壓正端 REF(-):參考電壓負端 START:A/D轉換啟動信號輸入
18、端。當ST上跳沿時,所有內部寄存器清零;下跳沿時,開始進行A/D轉換;在轉換期間,ST應保持低電平。 ALE:地址鎖存允許信號輸入端,高電平有效。當ALE線為高電平時,地址鎖存與譯碼器將A,B,C三條地址線的地址信號進行鎖存,經譯碼后被選中的通道的模擬量進入轉換器進行轉換。 EOC:轉換結束信號輸出引腳。當EOC為高電平時,表明轉換結束;否則,表明正在進行A/D轉換。 OE:輸出允許控制端,用以打開三態(tài)數據輸出鎖存器。 CLK:時鐘信號輸入端(一般為500KHz)。 A、B、C:地址輸入線,用于選通IN0-IN7上的一路模擬量輸入。 ADC0809對輸入模擬量要求:信號單極性,電壓
19、范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。 2.2.3 ADC0809應用說明 1) ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。 2) 初始化時,使ST和OE信號全為低電平。 3) 送要轉換的哪一通道的地址到A,B,C端口上。 4) 在ST端給出一個至少有100ns寬的正脈沖信號。 5) 是否轉換完畢,我們根據EOC信號來判斷。 6) 當EOC變?yōu)楦唠娖綍r,這時給OE為高電平,轉換的數據就輸出給單片機了。 (4) ADC08
20、09工作時序圖 在ALE=1期間,模擬開關的地址(ADDC、ADDB和ADDA)存入地址鎖存。輸入啟動信號START的上升沿復位ADC0809,下降沿啟動A/D轉換。EOC為輸出的轉換結束信號,正在轉換時為0,轉換結束時為1。OE為輸出允許控制端,在轉換完成后用來打開輸出三態(tài)門,以便從ADC0809輸出這次轉換的結果。 ADC0809的時序圖如下圖 2.2.4.接口電路的設計 實驗電路及接線如下圖示 : 連線 連接孔1 連接孔2 1 IN0 壓力傳感器輸出 2 AD_CS CS2 圖2.2.3
21、接線框圖 圖2.2.4 實驗電路連線圖 A/D轉換器的結構及連線圖如上圖所示,AD0809的工作過程如下:首先用指令選擇0809的一個模擬輸入通道,當執(zhí)行MOVX @DPTR,A時,產生一個啟動信號給START引腳送入脈沖,開始對選中通道轉換。當轉換結束后發(fā)出結束信號,置EOC引腳信號為高電平,該信號可以作為中斷申請信號,當讀允許信號到,OE端有高電平,則可以讀出轉換的數字量,利用MOVX A,@DPTR把該通道轉換結果讀到累加器A中。轉換電壓為0—5V,調節(jié)橋路中的
22、電位器,使其輸出電壓為0—5V,可以在較小范圍內波動,當滿量程輸出時對應八個1的輸出,由于前邊計算的電壓變化和電阻變化成正比關系,而且電阻變化和應變成正比,進而得出的壓力和電壓是成正比的。傳感器橋路輸出的電壓經過比例變換后轉換成二進制碼的形式送入P0口。 其程序框圖如下: 等待中斷 初始化程序 初始化LCD 進入開機界面 開始 清屏 啟動AD0809 工程量代換轉換為壓力值 將結果分位成十進制 調用LCD顯示子程序(先顯示最高位) 產生中斷
23、 圖五 主程序流程圖 圖六 中斷子程序 2.3控制器處理模塊 本實驗采用8051單片機,其管腳圖如下: 圖4.4.1 8051管腳圖 其管腳功能如下: 1.電源 (1)VCC - 芯片電源,接+5V; (2)VSS - 接地端; 2.時鐘 XTAL1、XTAL2 - 晶體振蕩電路反相輸入端和輸出端。 3.控制線(4根) (1)ALE/PROG:地址鎖
24、存允許/片內EPROM編程脈沖。 ① ALE功能:用來鎖存P0口送出的低8位地址。 ② PROG功能:片內有EPROM的芯片,在EPROM編程期間,此引腳輸入編程脈沖。 (2)PSEN:外ROM讀選通信號。 (3)RST/VPD:復位/備用電源。 ① RST(Reset)功能:復位信號輸入端。 ② VPD功能:在Vcc掉電情況下,接備用電源。 (4)EA/Vpp:內外ROM選擇/片內EPROM編程電源。 ① EA功能:內外ROM選擇端。 ② Vpp功能:片內有EPROM
25、的芯片,在EPROM編程期間,施加編程電源Vpp。 4.I/O線 80C51共有4個8位并行I/O端口:P0、P1、P2、P3口,共32個引腳。P3口還有 第二功能,用于特殊信號輸入輸出和控制信號(屬控制總線)。 2.4顯示與報告模塊-----------LCD1602的顯示操作 2.4.1四種基本操作 LCD有四種基本操作,具體如表2.4.1所示。 表2.4.1 LCD與單片機之間有四種基本操作 RS R/W 操作 0 0 寫命令操作(初始化,光標定位等) 0 1 讀狀態(tài)操作(讀忙標志位) 1 0 寫數據操作
26、(要顯示內容) 1 1 讀數據操作(可以把顯示存儲區(qū)中的數據反讀出來) (1)讀狀態(tài)字 執(zhí)行讀狀態(tài)字操作,如表2.4.2滿足RS=0,R/W=1。根據管腳功能,當為有效電平時,狀態(tài)命令字可從LCD模塊傳輸到數據總線。同時可以保持一段時間,從而實現讀狀態(tài)字的功能。讀狀態(tài)字流程如圖2.4.1所示。 圖2.4.1 讀入狀態(tài)字流程圖 (2)命令字 表2.4.2所示為命令字,其主要介紹了指令名稱、控制信號及控制代碼。其指令名稱是指要實現的功能;控制代號是采用的十六進制的數值表示的。 1)清零操作是指輸入某命令字后即能將整個屏幕顯示的內容全部清除; 2)歸home位:將光標送到初始
27、位;其中的*號為任意,高低電平均可; 3)輸入方式:設光標移動方向并指定整體顯示,是否移動。I/D=0:減量方式,S=1:移位方式,S=0:不移位; 4)顯示狀態(tài):D指設置整體顯示開關;C指設置光標顯示開關;B指設置光標的字符閃耀; 5)光標畫面滾動:R/L指右移或左移;S/C指移動總體或光標; 6)功能設置:DL接口數位,L指顯示行數,F顯示字型;如DL=1:8位=0,4位N=1:2行=0:1行,G=1:510=0:57(點陣) 7)CGRAM地址設制:相當于一個數據庫,可以在其中選擇所需要的符號; 8)DDRAM地址設制:顯示定位; 9)讀BF和AC:B為最高位忙的標志,F為
28、標志位; 10)寫數據:將數據按要求寫入到對應的單元; 11)讀數據:讀相應單元內的數據; 表2.4.2 命令字 指令名稱 控制信號 控制代碼 RS RW D7 D6 D5 D4 D3 D2 D1 D0 清屏 0 0 0 0 0 0 0 0 0 1 歸HOME位 0 0 0 0 0 0 0 0 1 * 輸入方式設制 0 0 0 0 0 0 0 1 I/D S 顯示狀態(tài)設制 0 0 0 0 0 0 1 D C B 無標畫面滾動 0 0 0 0 0 1 S/C
29、 RL * * 功能設置 0 0 0 0 1 DL N F * * CGRAM地址設制 0 0 0 1 A5 A4 A3 A2 A1 A0 DDRAM地址設制 0 0 1 A6 A5 A4 A3 A2 A1 A0 讀BF和AC 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 寫數據 1 0 數 據 讀數據 1 1 數 據 (3)寫命令字 由表2.4.2可知當RS=0,R/W=0時,才可以通過單片機或用戶指令把數據寫到LCD模塊,此時就對LCD進行調制??刹捎貌?/p>
30、詢方式:先讀入狀態(tài)字,再判斷忙標志位,最后寫命令字。圖2.4.2所示為寫命令字的流程圖。 圖2.4.2 寫命令字流程圖 1)定義光標位置 顯示數據的某位,就是把顯示數據寫在相應的DDRAM地址中,DDRAM地址占7位。Set DDRAM address命令如表2.4.3所示。光標定位,寫入一個顯示字符后,DDRAM地址會自動加1或減1,加或減由輸入方式設置。 表2.4.3 Set DDRAM address命令 RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 AC6 AC5 AC4 AC3 AC2 AC
31、1 AC0 第1行DDRAM地址與第2行DDRAM地址并不連續(xù),如表2.4.4所示。 表2.4.4 DDRAM地址 row 1 2 3 4 5 … 14 15 16 line1 80H 81H 82H 83H 84H … 8dH 8eH 8fH line2 0c0H 0c1H 0c2H 0c3H 0c4H … 0cdH 0ceH 0cfH 2)1602LCD的一般初始化(復位)過程 延時15mS 寫指令38H(不檢測忙信號) 延時5mS 寫指令38H(不檢測忙信號) 延時5mS 寫指令38H(不檢測忙信號)
32、 以后每次寫指令、讀/寫數據操作均需要檢測忙信號 寫指令38H:顯示模式設置 寫指令08H:顯示關閉 寫指令01H:顯示清屏 寫指令06H:顯示光標移動設置 寫指令0CH:顯示開及光標設置 2.4.2 LCD顯示程序設計 LCD顯示程序的設計一般先要確定LCD的初始化、光標定位、確定顯示字符后,顯示流程如圖2.4.4顯示。 圖2.4.4 LCD顯示程序流程圖 2.4.3 AD0809接口電路及LCD接口電路 第三章 壓力傳感器實驗數據采集、顯示及程序 3.1數據采集及顯示 數據處理子程序是整個程序的核心。主要用來調整輸入值系數,使輸出滿足量程要求。
33、另外完成A/D的采樣結果從十六進制數向十進制數形式轉化。系數轉換在IN0輸入的數最大為5V,要求壓力200pa對應的是5V,將系數進行一定倍數的變換,并用小數點位置的變化體現這一過程。數制之間的轉換:在二進制數制中,每向左移一位表示數增加兩倍。要求壓力80N對應的是5V,而壓力與電壓的變換是線性關系,對應AD轉換器的輸出為八個1,當有一定的壓力值輸入時,對應這個關系轉化成相應的二進制代碼送入P0口。然后再反過來應用這個變化關系,經最終得到的數值進行二進制到BCD碼轉化,然后逐位在LED數碼管上顯示。 數據采集用A/D0809芯片來完成,主要分為啟動、讀取數據、延時等待轉換結束、讀出轉換結果、
34、存入指定內存單元、繼續(xù)轉換(退出)幾個步驟。ADC0809初始化后,就具有了將某一通道輸入的0~5模擬信號轉換成對應的數字量00H—FFH,然后再存入存儲器的指定單元中。在控制方面有所區(qū)別。可以采用程序查詢方式,延時等待方式和中斷方式。 顯示子程序是字符顯示,首先調用事先編好數碼管顯示子程序。初始化命令,然后輸出顯示命令。在顯示過程中一定要調用延時子程序。當輸入通道采集了一個新的過程參數,當有壓力信號輸入時,調用顯示子程序在數碼管上顯示。 3.2程序設計 ; ADResult EQU 40H RS BIT P2.0;定
35、義LCM的接腳RS、R/W、Enable為P2.0、P2.1、P2.2 R_W BIT P2.1 ENABLE BIT P2.2 DB0_DB7 DATA P1 ;DB0-DB7的接腳為P1來控制,以方便程式的撰寫與維護 ;*------------------------------------------------------------------------ ORG 0000H
36、 ;通知編譯器下面的程式由程式記憶體 ;地址1000H開始存放 AJMP START ;跳到標記start處執(zhí)行程式 ORG 000BH ;跳到中斷服務程式 AJMP INSERS ORG 0013H AJMP INT ORG 30H ;通知編譯器下面的程式由程式記憶體地址0030H開始
37、存入。 START: NOP MOV TMOD,#0 ;初始化TO MOV TL0,#0 MOV TH0,#0 SETB EA SETB ET0 SETB
38、 TR0 SETB EX1 SETB IT1 MOV R5,#50 ;設定延時次數。 MOV SP,#60H ;設定MCS-51從內容資料記憶體地址61H開始存放堆棧資料。 CALL Initial ;調用啟動LCM的子程式 CALL CLS ;調用清除顯示器的子程式
39、 MOV A,#10000000B ;將二進制10000000的值放入累加器內,代表設定DDRAM的地址為00H, ;即將光標移到第一行第一個列的位置上。 CALL Write_instruction ; 調用寫指令碼子程式 MOV DPTR,#LINE3 ;將第一行字串在程式記憶體中的起始地址存入DPTR CALL STR
40、ING ;調用STRING子程式,將字串顯示到LCM MOV A,#11000010B ;將二進制11000000的值放入累加器內,代表設定DDRAM的地址為40H, ;即將光標移到第二行第三個列的位置上 CALL Write_instruction ;調用寫指令碼子程式 MOV DPTR,#LINE4 ;將第二行字串
41、在程式記憶體中的起始 :地址存DPTR。 CALL STRING CALL DELAY0 CALL CLS ;調用清除顯示器的子程式 MOV A,#10000000B ;將二進制10000000的值放入累加器內,代表設定DDRAM的地址為00H, ;即將光標移到第一行第一個列的位
42、置上。 CALL Write_instruction ;調用寫指令碼子程式。 MOV DPTR,#LINE1 ;將第一行字串在程式記憶體中的起始地址存入DPTR CALL STRING ;調用STRING子程式,將字串顯示到LCM MOV A,#11000010B ;將二進制11000000的值放入累加器內,代表設定DDRAM的地址為40H,
43、 ;即將光標移到第二行第三個列的位置上 CALL Write_instruction ;調用寫指令碼子程式。 CALL AD0809Read ;啟動AD0809 ;--------------------------------------------- LOOP: SJMP LOOP SJMP LOOP;JNB IE1, LOOP ;查詢等待 ;CLR IE1
44、 ;SJMP INT ;-------------------------------------------- LINE1: DB " Pressure: ",00H ;在LCM第一行顯示字串"LCD Testing___" LINE2: DB "0123456789.",00H ;在LCM第二行顯示壓力數據,保留三位小數 LINE3: DB "Welcome To ",00H LINE4: DB "LiRen College!",00H ;---------------
45、--------------------------------------------------- ;ADC0809啟動程序 ;------------------------------------------------------------------ AD0809Read: MOV DPTR, #8000H MOV A, #00 MOVX @DPTR,A ; 起動 A/D MOV A, #40h DJNZ ACC, $ ; 延時 > 100us ;*************
46、********************************************************* ;工程量代換:B存高八位,A存低八位 ;程序中除以256相當于右移八位,即高八位變?yōu)檎麛滴?低八位變?yōu)樾滴? ;最后結果為: B存整數部分,A存小數部分 ;********************************************************************** DAIHUAN: MOV B,#200 MOV A,ADResult MUL AB MOV 51H,A ;小數部分 MOV 50
47、H,B ;整數部分 RET ;------------------------------------------------------------------ ;INT1查詢服務子程式 ;------------------------------------------------------------------ INT: MOV DPTR,#8000H MOVX A, @DPTR ; 讀入結果 CALL CLS MOV A,#10000000B ;將二進制10000000的值放入累加器內,代表設
48、定DDRAM的地址為00H, ;即將光標移到第一行第一個列的位置上。 CALL Write_instruction ;調用寫指令碼子程式。 MOV DPTR,#LINE1 ;將第一行字串在程式記憶體中的起始地址存入DPTR CALL STRING ;調用STRING子程式,將字串顯示到LCM MOV A,#11000010B
49、 ;將二進制11000000的值放入累加器內,代表設定DDRAM的地址為40H, ;即將光標移到第二行第三個列的位置上 CALL Write_instruction ;調用寫指令碼子程式。 MOV A,#50H MOV ADResult, A CALL DAIHUAN MOV DPTR,#LINE2 ;將第二行字串在程式記憶體中的起始地址存DPTR。 CALL DAT
50、E ;調用DATE子程式,將數據顯示到LCM RETI ;------------------------------------------------------------------ ;TO中斷服務子程式 ;------------------------------------------------------------------ INSERS: MOV TH0,#0 MOV TL0,#0
51、 DJNZ R5,NO MOV R5,#50 NO: RETI ;------------------------------------------------------------------ ;Initial子程序 設定LCM使用8BITS匯流排,顯示兩行, ;使用5*7字型,顯示器要顯示 光標要顯示但不閃爍 ;-----------------------------
52、------------------------------------- Initial: MOV A,#00111000B ; CALL Write_instruction ; 第一次設置顯示模式 MOV A,#00111000B ; CALL Write_instruction ; 第二次設置顯示模式 MOV A,#00111000B ;
53、 CALL Write_instruction ; 第三次設置顯示模式 MOV A,#00111000B ; CALL Write_instruction ; 第四次設置顯示模式 MOV A,#00001110B ; CALL Write_instruction ; 設置光標 MOV A,#00000110B ;
54、 CALL Write_instruction ; 設置LCD數據指針自動加一 RET ;----------------------------------------------------------------- ;CheckBusy子程序 ;等待LCM有空可以執(zhí)行下一行命令 ;----------------------------------------------------------------- CheckBusy: PUSH ACC
55、 ;將累加器ACC的內容放到堆棧內, ;以免破壞原來的ACC的資料 CheckBusyLoop: CLR ENABLE ;設定E=0,禁能讀模式 SETB R_W ;設定R/W=1,選擇讀模式 CLR RS ;設定RS=0,選擇指令寄存器IR SETB
56、 ENABLE ;將P3.3腳設定為1,使能LCM MOV A,DB0_DB7 ;將存在ACC內的資料經由P1存入ACC中 ;以便查封第7位元及BF是否為0什么 CLR ENABLE ;將P3.3腳設定為0 MOV A,#00H JB ACC.7,CheckBusyL
57、oop ; 判斷由LCM讀入資料的第7位及BF ;是否為1,若等于1表示LCM忙碌中,CPU ;跳到標記CheckBusyLoop繼續(xù)執(zhí)行程序 POP ACC ;將累加器ACC內容從堆棧區(qū)取出 CALL DELAY ;調用延遲子程序,延時約數個mS
58、 RET ;返回主程序 ;----------------------------------------------------------------- ;Write_instruction子程序 ;將ACC內的資料輸入到LCM的IR寄存器 ;----------------------------------------------------------------- Write_instruction: CALL CheckBusy ;調用CheckBusy子程序確定LCM
59、可以執(zhí)行指令 CLR ENABLE ;設定E=0,禁能LCM CLR R_W ;設定R/W=0,選擇寫模式 CLR RS ;設定RS=0,選擇指令寄存器IR SETB ENABLE ;將P3.3腳設定為1,使能LCM MOV DB0_DB7,A ;將存在ACC內的指令碼經由P1輸出到LCM
60、 CLR ENABLE ;將P3.3設定為0,MCS-51向LCM存取資料后, ;必須將LCM的E腳輸出0,讓LCM禁能(Disable) ;不做介面的資料傳送或設定 RET ;返回主程序 ;----------------------------------------------------------------- ;WriteLCDData子程
61、序 ;將ACC內的資料輸入到LCM的DR寄存器 ;----------------------------------------------------------------- WriteLCDData: CALL CheckBusy ;調用CheckBusy子程序,確定LCM可以執(zhí)行指令 CLR ENABLE ;設定E=0,禁能LCM CLR R_W ;設定R/W=0,選擇寫模式
62、 SETB RS ;設定RS=1,選擇U寄資料存器DR SETB ENABLE ;將P3.3腳設定為1,使能LCM MOV DB0_DB7,A ;將存在ACC內的指令碼經由P0輸出到LCM CLR ENABLE RET ;返回主程序 ;-----------------------------------------
63、------------------------ ;CLS子程序 清除LCM的顯示字幕 ;----------------------------------------------------------------- CLS: MOV A,#01H CALL Write_instruction RET ;--------------------------------------------------------------
64、--- ;DATE子程序 ;壓力數據的掃描顯示 ;----------------------------------------------------------------- DATE: PUSH ACC ;入棧累加器A PUSH PSW ;入棧PSW中的CY HIG:MOV R1,#50H MOV A,@R1 CJNE A,#64H,CJ1 ;判斷是否等于100,等于100則直接顯示100 MOV A,#01H MOVC A,@A+DPTR LCALL WriteLCDData DEC A LCALL WriteL
65、CDData LCALL WriteLCDData SJMP XSD CJ1: JC SHI ;判斷是否大于100 大于100則繼續(xù)執(zhí)行分位操作 MOV B,#64H ;否則跳轉到十位分位程序 DIV AB ;除法做分位處理 MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B SHI: CLR C CJNE A,#0AH,CJ2 ;判斷是否等于10等于10則直接顯示10 MOV A,#01H MOVC A,@A+DPTR LCALL WriteLCDData DEC A L
66、CALL WriteLCDData SJMP XSD CJ2: JC GEE ;判斷是否大于10 MOV A,B ;否則跳轉到個位顯示程序 GEE: MOV B,#0AH DIV AB MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B MOVC A,@A+DPTR LCALL WriteLCDData XSD: MOV A,#0AH ;小數點顯示程序 MOVC A,@A+DPTR LCALL WriteLCDData LOWER: INC R1 ;小數位顯示程序 分位原理同上 MOV A,@R1 MOV B,#64H DIV AB MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B MOV B,#0AH DIV AB MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B MOVC A,@A+DPTR LCALL WriteLCDData PO
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。