51單片機實習報告_第1頁
51單片機實習報告_第2頁
51單片機實習報告_第3頁
51單片機實習報告_第4頁
51單片機實習報告_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 單片機實習報告2021 姓名: 學號: 班級: 專業(yè): 指導老師:目錄實習第一階段:基于單片機的電梯控制模擬系統(tǒng)第1章 系統(tǒng)構思的介紹及改良.-2-1.0系統(tǒng)最初的構思.-2-1.1系統(tǒng)的改良.-3-1.2系統(tǒng)功能實現(xiàn)的思路分析.-4-第2章 系統(tǒng)硬件的設計.-5-2.0 系統(tǒng)硬件的整體設計.-5-2.1 目的樓層顯示電路.-5-2.2 電梯狀態(tài)同步顯示電路.-6-2.3 鍵盤掃描電路.-7-2.4 直流電機驅動電路.-10-2.5 揚聲器報警電路.-11-第3章 系統(tǒng)軟件的設計.-11-3.0 軟件的整體設計.-12-3.1 各樓層檢測呼叫信號子函數(shù).-13-3.2 電梯狀態(tài)同步顯示子函數(shù)

2、.-14-3.3 目標樓層指示燈子函數(shù).-14-3.4 鍵盤掃描子函數(shù).-15-3.5 直流電機驅動子函數(shù).-16-3.6 報警器子函數(shù).-16-3.7 主函數(shù).-17-第4章 個人心得體會1.-17-4.0 實習的收獲與感悟1.-17- 附錄1.-20-實習第二階段:基于單片機的吊機控制模擬系統(tǒng)第5章 系統(tǒng)軟硬件的設計.-30-5.0 系統(tǒng)硬件的設計.-30-5.1 系統(tǒng)軟件的設計.-31-5.2 8255可編程并行IO口模塊.-32-5.3 液晶顯示模塊.-33-5.4 LED點陣顯示模塊.-34- 數(shù)碼管顯示模塊.-35- 鍵盤掃描模塊.-35- 揚聲器及LED燈模塊.-36-第6章 個

3、人心得體會2.-37-6.0 實習的收獲與感悟2.-37- 附錄2.-38-附圖片.-54-基于單片機的電梯控制模擬系統(tǒng)第1章 系統(tǒng)構思的介紹及改良工程功能描述:該模擬系統(tǒng)的主要思想是利用單片機及其外部擴展設備來模擬電梯控制系統(tǒng)的各項根本功能。其中單片機模擬電梯控制系統(tǒng)的CPU;鍵盤模擬前往目的樓層的按鍵;LED點陣顯示電梯的上下狀態(tài);LED顯示屏顯示當前所在的樓層數(shù);直流電機控制電梯的狀態(tài),正轉表示上升,反轉表示下降,停轉表示停在某一樓層;當電機停止轉動時,蜂鳴器響一聲表示電梯關上或者翻開。功能實現(xiàn)所用到的模塊:3電機驅動模塊模塊整體布局圖:9000h8000h電機驅動模塊數(shù)碼管顯示屏塊51

4、單片機0A000hhLED點陣顯示模塊揚聲器驅動模塊鍵盤矩陣模塊0B000h揚聲器驅動模塊 圖-1隨著實習時間的推移,我通過不斷查詢相關資料和實踐,發(fā)現(xiàn)自己最初的設想存在許多的缺陷。下面進行相關改良如下:選用的模塊為:模塊布局修整:鍵盤掃描模塊51單片機主控芯片9000hD/A轉換電路模塊a000h液晶點陣顯示模塊8000h直流電機驅動模塊揚聲器報警模塊LED燈目標顯示模塊 圖-2首先,當我打算利用單片機實現(xiàn)對電梯控制系統(tǒng)功能模擬的時候,我開始關注自己乘坐電梯的經(jīng)歷并思考電梯在現(xiàn)實中的功能實現(xiàn)。下面是對根本功能模擬的思路: 一般情況下,一個電梯應該具有相關的按鍵,LED顯示電梯狀態(tài)等,另外還應

5、有相關轎廂,吊繩,各樓層電梯門等,但我選用的只是一個模擬狀態(tài),所以不打算設計相關的機械局部。在所設計的系統(tǒng)中,我選用LED指示燈來模擬電梯內(nèi)的請求信號即廂內(nèi)乘客要到達的目標樓層信號,每一個LED燈代表一個樓層,電梯每到達一個樓層,代表該樓層的LED燈熄滅。對于電梯相關的按鍵,那么選用鍵盤掃描模塊,設置局部按鍵代表各樓層外的上下請求按鍵,局部按鍵代表電梯內(nèi)的目標樓層請求按鍵。電梯到達樓層的狀態(tài),用點陣液晶顯示屏顯示。電梯的停止,上升以及下降分別由直流電機的停轉,正轉,反轉進行模擬。當電梯到達某一目標樓層時,電機停轉3秒,粗略表示電梯的開關門以及乘客進出所需的時間。電梯在兩相鄰樓層之間上升或下降,

6、由電梯正轉或反轉5秒鐘來表示。當電梯停在某一樓層時,假設無請求那么停在本層等待請求。 另外,電梯在上升過程中只響應上升呼叫,下降過程中只響應下降呼叫。第二章 系統(tǒng)硬件的設計2.0 系統(tǒng)硬件的整體設計 該系統(tǒng)的硬件電路主要有5大局部電路組成:鍵盤掃描電路,樓層顯示電路液晶點陣顯示,目的樓層顯示電路LED燈指示,直流電機驅動電路含D/A轉換電路,揚聲器報警電路。剛開始上電時,電機停轉,液晶顯示屏顯示“一樓,電梯樓層位置有延時電路控制,延時電路包括3秒延時和5秒延時,每層之間通過5秒延時控制即電機轉動5秒表示電梯走了一層,3秒延時代表電梯關開門。電梯的狀態(tài)時通過液晶顯示屏顯示的。鍵盤電路采用4*6鍵

7、盤,只選用了其中9個按鍵。其中4個鍵代表各樓層外的呼叫按鍵,4個按鍵代表電梯內(nèi)部的目的樓層選擇鍵。另外一個是電梯發(fā)生故障的報警鍵。電梯的正常工作由往單片機寫入程序來控制。 總體方框圖見圖-2。2.1 目的樓層顯示電路偉福實驗儀上裝有8只發(fā)光二極管及相應驅動電路。見圖2,L0-L7為相應發(fā)光二極管驅動信號輸入端,該輸入端為高電壓電平“1時發(fā)光二極管點亮。我們可以通過P1口對其直接控制,點亮或者熄滅發(fā)光二極管。在該目的樓層顯示模塊中只選用了其中三個LED燈L1,L2,L3,分別代表一樓,二樓,三樓,其分別由單片機的P1.3,P1.4,P1.5控制,當對應的目標樓層按鍵被按下時,向相應的控制口輸入高

8、電平,點亮LED燈。其中亮的表示有人想前往該層,當電梯到達該樓層時,對應的二極管熄滅。圖3: LED電平顯示電路2.2 電梯狀態(tài)同步顯示電路 偉福實驗儀采用的液晶顯示屏內(nèi)置控制器為SED1520,點陣為122x32,需要兩片SED1520組成,由E1、E2分別選通,以控制顯示屏的左右兩半屏。圖形液晶顯示模塊有兩種連接方式。一種為直接訪問方式,一種為間接控制方式。本實驗儀采用直接控制方式。直接控制方式就是將液晶顯示模塊的接口作為存儲器或IO設備直接掛在計算機總線上。計算機通過地址譯碼控制 E1和 E2的選通;讀寫操作信號 RW由地址線 A1控制;命令/數(shù)據(jù)存放器選擇信號 AO由地址線 A0控制。

9、實際電路如圖4所示。0X000H0X001H0X002H0X003H0X004H0X0050X006H0X007H寫E1指令寫E1數(shù)據(jù)讀E1狀態(tài)讀E1數(shù)據(jù)寫E2指令寫E2數(shù)據(jù)讀E2狀態(tài)讀E2數(shù)據(jù)液晶顯示屏圖4: 液晶屏接口電路 在該系統(tǒng)中,采用液晶屏顯示電梯所在樓數(shù)。2.3 鍵盤掃描電路偉福實驗儀上的LED顯示電路和鍵盤電路如圖1。顯示電路和鍵盤電路可以工作在內(nèi)驅和外驅兩種方式,內(nèi)驅是用CPU總線方式驅動,通過總線讀寫外部設備的地址來控制顯示和讀入鍵盤碼。外部驅動方式是直接用IO方式驅動八段顯示的段碼、位碼和鍵盤按鍵信息,這里的IO控制可以用CPU的IO口來實現(xiàn)控制,也可通過8255等IO擴展

10、電路來控制。內(nèi)驅、外驅由板上的撥動開關控制。 在該系統(tǒng)中,對于該模塊只選用了內(nèi)驅方式的鍵盤掃描功能。如下為內(nèi)驅方式的詳細介紹:內(nèi)驅方式:將撥動開關撥到“內(nèi)驅位置,顯示和鍵盤工作于內(nèi)驅方式 ,顯示控制的位碼通過總線由74HC374輸出,經(jīng)ULN2003反向驅動后,做LED的位選通信號。位選通信號也可做為鍵盤列掃描碼,鍵盤掃描的行數(shù)據(jù)從74HC245讀回,374輸出的列掃描碼經(jīng)245讀入后,用來判斷是否有鍵被按下,以及按下的是什么鍵。如果沒有鍵按下,由于上拉電阻的作用,經(jīng)245讀回的值為高,如果有鍵按下,374輸出的低電平經(jīng)過按鍵被接到245的端口上,這樣從245讀回的數(shù)據(jù)就會有低位,根據(jù)374輸

11、出的列信號和245讀回的行信號,就可以判斷哪個鍵被按下。LED顯示的段碼由另一個74HC374輸出。 鍵盤和LED顯示電路的地址譯碼見圖5,做鍵盤和LED實驗時,需將KEY/LED CS 接到相應的地址譯碼上。位碼輸出地址為0X002H,段碼輸出地址為0X004H,鍵盤行碼讀回地址為0X001H,此處X是地址高四位,由KEY/LED CS 決定。例如將KEY/LED CS接到地址譯碼的CS3上,那么位碼輸出地址就為0b002H,段碼輸出地址就是0b004H,鍵盤行碼讀回地址為0b001一處錯誤,其第一個74374的輸出應該改為從Q1接到Q6。 圖 5鍵盤及LED數(shù)碼管顯示電路13: 鍵盤及LE

12、D顯示電路2.4 直流電機驅動電路在電壓允許范圍內(nèi),直流電機的轉速會隨著電壓的升高而加快,假設加上的電壓為負電壓,那么電時機反向旋轉。偉福實驗儀的D/A變換可輸出-8V到+8V的電壓,將電壓經(jīng)驅動后加在直流電機上,可使其運轉。通過單片機輸出數(shù)據(jù)到D/A變換電路,控制電壓的上下和正負。在該模塊中,主要是通過往單片機里寫程序,將D/A片選入口設置為0x9000h,單片機通過該口送入相關的數(shù)字量,經(jīng)D/A轉換,得到對應的模擬電壓,便可控制電機轉動的狀態(tài)。相關的D/A轉換電路,電機電路見圖-6,圖-7.由于不需要讀回電機的速度,所以圖-7的霍爾元件不用。 圖-6 D/A轉換電路 圖-7 直流電機電路2

13、.5 揚聲器報警電路 本電路主要由蜂鳴器和三極管組成,其中蜂鳴器由單片機的P1.0口進行控制,當電梯發(fā)生故障時,按下alarm1按鈕蜂鳴器會發(fā)出警報。另外,電梯每至一樓層停下時,揚聲器會響一聲作為提示音。圖8: 音頻放大濾波電路第3章 系統(tǒng)軟件的設計3.0 軟件的整體設計 本設計由于采用鍵盤矩陣來代替樓外上下請求和電梯內(nèi)目標樓層數(shù)的選擇按鍵,所以電梯的運行方向是根據(jù)這些按鍵來決定的,所以單片機要不斷的掃描鍵盤來獲取請求信號來控制電梯的運行。另外,請求信號要相應的存起來,然后與電梯的運行方向比擬,判斷這些信號響應的優(yōu)先級電梯總是先響應同方向的呼叫信號,最后就是設計最根本的樓層顯示局部,電機和蜂鳴

14、器局部的子函數(shù)了。 軟件的整體框圖如下: 初始化,液晶顯示“一樓啟動鍵盤掃描按下按鍵,有請求信號電梯運行開門延時NYYN至目標樓層鍵盤不斷掃描是否在請求同向請求判斷電梯位置液晶顯示樓層鍵盤不斷掃描關門延時電梯內(nèi)選層3.1 各樓層檢測呼叫信號子函數(shù) 該子函數(shù)是本系統(tǒng)軟件最核心的函數(shù),其算法也最為復雜,我花了許多功夫在上面,還算有些思路?,F(xiàn)分析如下: 在現(xiàn)實生活中,電梯各樓層外的請求信號和電梯內(nèi)的請求信號五花八門。而電梯響應請求信號的根本情形可分為三種:第一種是電梯電梯處于閑置狀態(tài),電梯內(nèi)及各樓層外均無請求信號,電梯將處于停止狀態(tài),等待呼叫,有呼叫時再判斷是該上升還是下降;第二種是電梯處于上升狀態(tài)

15、只響應上升方向的請求信號;第三種是電梯處于下降狀態(tài)只響應下降方向的信號。那么,如何利用程序來實現(xiàn)這三種情況的功能呢?通過網(wǎng)上查閱相關程序算法,并進行一番思考和修改后,我決定利用if語句的嵌套來實現(xiàn)對電梯響應呼叫信號優(yōu)先級的設置另外,設計了flag標志位,當flag=0時,表示電梯處于停止狀態(tài),當flag=1時,表示電梯處于上升狀態(tài),當flag=2時,表示電梯處于下降狀態(tài)。具體程序請查看附錄局部。開始簡易流程圖如下:電梯停止運行flag是否為0flag是否為2Flag是否為1電梯下降相關處理相關處理電梯上升3.2 電梯狀態(tài)同步顯示子函數(shù) 該子函數(shù)通過調(diào)用偉福實驗儀液晶模塊的程序,在液晶屏顯示電梯

16、所在的樓層數(shù)如電梯在一樓,那么顯示“一樓。 該子程序流程圖下:開始 判斷l(xiāng)c的值顯示“一樓顯示“三樓Lc=3顯示“二樓Lc=2Lc=1調(diào)用實驗儀液晶的局部顯示程序設置地址,取模清屏,初始化 3.3 目標樓層指示燈函數(shù) 由于所設計的電梯控制模擬系統(tǒng)只有三層,所以這里只設計三只指示燈,分別代表電梯內(nèi)的請求信號,對某層樓有請求那么相應的指示燈亮,當電梯行至此層時,該燈熄滅。 具體程序如下:/各目標樓層的指示燈sbit L1=P13; sbit L2=P14;sbit L3=P15;uint nx=0,0,0,0;void zhishideng() L1=nx1; L2=nx2; L3=nx3; 3.

17、4 直流電機驅動子函數(shù) 單片機通過輸出數(shù)字量,利用D/A轉換輸出對應的模擬電壓來控制直流電機的狀態(tài)。 具體程序如下: /直流電機模塊void dianjiz() / 正轉 CS0832=0xc0; Delayms(1000); /延時5秒 void dianjif() / 反轉 CS0832=0x4f; Delayms(1000); /延時5秒 void dianjit() / 停轉 CS0832=0x90; Delayms(1000); /延時3秒 另外,由于電機轉動過程中,需要不斷掃描和存儲按下的請求信號,所以在電機的延時程序里參加了keyscan()和zhishideng()子函數(shù)。帶掃

18、描和指示燈的延時函數(shù)如下: /延時秒級void Delayms(uint j) uint x,y; for(x=0;x<=j;x+) for(y=0;y<=110;y+) keyscan(); zhishideng(); 3.5 揚聲器子函數(shù) 編寫該子程序時,要注意揚聲器的發(fā)聲原理。想要其發(fā)聲,那么需要單片機通過I/O口往其輸入一定頻率的脈沖,只給其置高電平是不會發(fā)聲的。另外,所輸入脈沖的頻率不同,可使其發(fā)出不同音調(diào)的聲音。在該系統(tǒng)內(nèi),主要是利用蜂鳴器來實現(xiàn)故障警報和聲音提示的功能,所以只需設置一個適宜頻率的波即可。 具體程序如下: void bjtishi()uint i,j;

19、for(j=0;j<7;j+) for(i=0;i<=50;i+) delay2(100); alarm1=!alarm1; 3.7 主函數(shù) 主函數(shù)主要包括對目標樓層指示燈的初始化及一個對各樓層檢測呼叫信號子函數(shù)的while循環(huán),比擬簡單。 具體程序如下:/主函數(shù)Void main() P1=0x00; While(1) lcjce(); 第4章 個人的心得體會14.0 實習的收獲與感悟1 剛開始實習時,我并不是特別清楚我們實習具體的內(nèi)容是什么,以為每個人都是用偉福實驗儀來實現(xiàn)同樣的系統(tǒng)。第一天,老師說要每個人都盡力發(fā)揮自己的想像能力,用單片機來做自己想做的東西。說實在挺不適應的,

20、因為之前學的都是理論,很少花時間實踐。所以我一個早上都沒想出來,但是這一個早上我并沒有選擇發(fā)愣,而是去看偉福的例程,看它的硬件說明,把程序一個個下到實驗儀上,結合硬件現(xiàn)象一起分析。我花了一個早上來干這些事,收獲挺大,對偉福實驗儀的硬件和對應的程序都有了初步的了解。結果下午來實驗室坐電梯的時候,突然想到我可以用單片機來做一個電梯控制模擬系統(tǒng),說干就干。當天下午我就實驗儀的各個硬件模塊一一對應分析模擬,加上用 查了些資料,經(jīng)思考分析后,覺得確實可以用偉福實驗儀來實現(xiàn),于是便把自己的這個想法寫下交了上去。有了想法之后,便開始更深入了解自己要用到硬件模塊。因為想要寫好程序,必須要對硬件非常熟悉。剛開始

21、確實挺難懂,但看了一遍又一遍之后,慢慢就有了感覺,知道硬件原來是這么回事。根本上,在考單片機考試前,白天我都是在分析偉福實驗儀的軟硬件,晚上我就簡單復習一下單片機,還有自己查閱一些資料??纪暝嚭?,我開始進入正式編程和設計硬件的連接。硬件不復雜,只要自己給各個模塊分配一下地址就行。主要難在軟件的設計,電梯模擬系統(tǒng)的核心算法比擬復雜,要涉及到各樓層的呼叫信號如何檢測,響應的問題,以及響應呼叫信號的優(yōu)先次序問題。我知道,一下子把整個程序寫出來調(diào)試是不現(xiàn)實的,所以我采用的是模塊化實現(xiàn)的方法。我先把要用到的各個小模塊程序寫出來,并通過調(diào)試使它們都能單獨運行并在實驗儀得到對應的現(xiàn)象,經(jīng)兩天的努力,終于把各

22、個小模塊的功能實現(xiàn)了。就差各樓層檢測響應呼叫信號的程序,通過查閱網(wǎng)上的資料和自己的思考分析,我決定采用信號保存,設標志位的方法來實現(xiàn)這個功能。 接下來,我用了一個晚上的時間將其他各個子模塊串起來,調(diào)試至無錯誤,另外一邊編寫系統(tǒng)的核心程序。第二天,就把自己調(diào)好的程序在偉福實驗儀上運行,遇到了許多問題,如地址沖突,蜂鳴器不響和編程錯誤等許多問題,經(jīng)自己努力解決了一局部,有些比擬難看出的錯誤問學長后也得到解決。例如:編程時,遇到像“代碼為C100的錯誤,在程序上根本看不出任何問題,問學長后說是代碼輸入的形式不對,有可能是輸入漢字了,但是錯誤所指的地方似乎沒什么不對。結果我把那行設為注釋后,發(fā)現(xiàn)后面還

23、真有漢字。在沒設置注釋前,漢字被隱藏了。 關于那個核心算法,我每天晚上都在編寫,編寫完后,就把它跟其他模塊程序連起來,一遍遍的分析修改程序,彌補自己邏輯上和程序上的錯誤。晚上完善程序,白天就去實驗室把程序下到實驗儀觀察現(xiàn)象,直到老師正式驗收的那天早上終于成功把程序試出來了,便在下午通過了老師的驗收。通過自己努力做成自己想做的事,那種喜悅感真的難以言喻。附錄1#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define DC_P 1xdata unsigned char CS0832 _at

24、_ 0x9000; /直流電機驅動口xdata unsigned char OUTBIT _at_ 0xa002; / 位控制口xdata unsigned char OUTSEG _at_ 0xa004; / 段控制口xdata unsigned char IN _at_ 0xa001; / 鍵盤讀入void keyscan();/各呼叫信號的初始化uint sh=0,0,0,0; uint xj=0,0,0,0;uint nx=0,0,0,0;sbit L1=P13; /各樓層的指示燈,當電梯至某層時,該樓層指示燈熄滅sbit L2=P14;sbit L3=P15;sbit alarm1=

25、P10;uint flag=0,lc=1,i,n;void zhishideng() /指示燈函數(shù) L1=nx1; L2=nx2; L3=nx3;/秒級延時*void delayms1 (uint z) uint x,y; for(x=0;x<=z;x+) for(y=0;y<=110;y+); /液晶模塊設置* #define PD1 61 / 122/2 分成左右兩半屏(122x32)unsigned char Column;unsigned char Page_ ; / 頁地址存放器 D1,DO:頁地址unsigned char Code_ ; / 字符代碼存放器unsign

26、ed char Command; / 指令存放器unsigned char LCDData; / 數(shù)據(jù)存放器 uint k;xdata unsigned char CWADD1 _at_ 0x8000; / 寫指令代碼地址(E1)xdata unsigned char DWADD1 _at_ 0x8001; / 寫顯示數(shù)據(jù)地址(E1)xdata unsigned char CRADD1 _at_ 0x8002; / 讀狀態(tài)字地址(E1)xdata unsigned char DRADD1 _at_ 0x8003; / 讀顯示數(shù)據(jù)地址(E1)xdata unsigned char CWADD2

27、_at_ 0x8004; / 寫指令代碼地址(E2)xdata unsigned char DWADD2 _at_ 0x8005; / 寫顯示數(shù)進地址(E2)xdata unsigned char CRADD2 _at_ 0x8006; / 讀狀態(tài)字地址(E2)xdata unsigned char DRADD2 _at_ 0x8007; / 讀顯示數(shù)據(jù)地址(E2)/ 中文字模庫 16x16點陣code unsigned char CCTAB32 = 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,/一0x80,0x80,0x80,0x80,0x80,0xC0,

28、0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,/二0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00 0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00, 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84, /三

29、0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00, 0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x08,0x88,0x68,0xFF,0x28,0x48,0x00,0x48,/樓 0x2A,0x9C,0x7F,0x18,0x2C,0x4A,0x48,0x00, 0x02,0x01,0x00,0xFF,0x00,0x42,0x42,0x4A, 0x2E,0x33,0x12,0x2E,0x22,0x42,0xC2,0x00;/ 1.寫指令代碼子程序(E

30、1)void WriteCommandE1() while(CRADD1 & 0x80); CWADD1 = Command; / 2.寫顯示數(shù)據(jù)子程序(E1)void WriteDataE1() while(CRADD1 & 0x80); DWADD1 = LCDData;/ 3.讀顯示數(shù)據(jù)子程序(E1)void ReadDataE1() while(CRADD1 & 0x80); LCDData = DRADD1;/ 4.寫指令代碼子程序(E2)voidWriteCommandE2() while(CRADD2 & 0x80); CWADD2 = Comma

31、nd;/ 5.寫顯示數(shù)據(jù)子程序(E2)void WriteDataE2() while(CRADD2 & 0x80); DWADD2 = LCDData;/ 6.讀顯示數(shù)據(jù)子程序(E2)void ReadDataE2() while(CRADD2 & 0x80); LCDData = DRADD2;/ 初始化程序void Init()Command = 0xe2; WriteCommandE1(); WriteCommandE2(); Command = 0xa4; WriteCommandE1(); WriteCommandE2();Command = 0xa9; Write

32、CommandE1();WriteCommandE2();Command=0xa0;WriteCommandE1();WriteCommandE2();Command=0xc0;WriteCommandE1();WriteCommandE2();Command = 0xaf; WriteCommandE1();WriteCommandE2();/ 清屏void Clear() unsigned char i,j;i = 0; do Command = (i + 0xb8); / 頁地址設置 WriteCommandE1(); WriteCommandE2(); Command = 0x00;

33、/ 列地址設置為"0" WriteCommandE1(); WriteCommandE2(); j = 0x50; / 一頁清 80個字節(jié) do LCDData = 0x00; / 顯示數(shù)據(jù)為"0"WriteDataE1(); WriteDataE2(); while(-j !=0); / 頁內(nèi)字節(jié)清零循環(huán)while(+i !=4); / 頁地址暫存器加一 / 顯示區(qū)清零循環(huán)/ 延時程序void Delay() unsigned char i,j; i = 20; j = 0; do do while(-j !=0); while( -i != 0 );

34、/ 中文顯示子程序void WriteCHN16x16() unsigned char i,j,k;i = 0;j = 0;while(j<2) Command = (Page_ + j) & 0x03) | 0xb8; / 設置頁地址WriteCommandE1(); WriteCommandE2(); k = Column; / 列地址值while(k < Column + 16)if (k < PD1) / 為左半屏顯示區(qū)域(E1 Command = k;WriteCommandE1(); / 設置列地址值 LCDData = CCTABCode_i; / 取漢

35、字字模數(shù)據(jù) WriteDataE1(); / 寫字模數(shù)據(jù) else / 為右半屏顯示區(qū)域(E2) Command = k-PD1; WriteCommandE2(); / 設置列地址值 LCDData = CCTABCode_i; / 取漢字字模數(shù)據(jù) WriteDataE2(); / 寫字模數(shù)據(jù) ; i+; if( +k >= PD1 * 2) break; / 列地址是否超出顯示范圍 ; j+; ;/*鍵盤掃描*code unsigned char KeyTable = / 鍵碼定義 0x16, 0x15, 0x14, 0xff, 0x13, 0x12, 0x11, 0x10,0x0d

36、, 0x0c, 0x0b, 0x0a,0x0e, 0x03, 0x06, 0x09,0x0f, 0x02, 0x05, 0x08, 0x00, 0x01, 0x04,0x07;/*unsigned char TestKey() OUTBIT = 0; / 輸出線置為0 return (IN & 0x0f); / 讀入鍵狀態(tài)(高四位不用) unsigned char GetKey() unsigned char Pos; unsigned char i; unsigned char k;i = 6;Pos = 0x20; / 找出鍵所在列 do OUTBIT = Pos; Pos >

37、;>= 1; k = IN & 0x0f; while (-i != 0) && (k = 0);/ 鍵值 = 列 x 4 + 行 f (k != 0) i *= 4; if (k&2) i+=1; else if (k&4) i+=2; else if (k&8) i+=3; OUTBIT=0; delayms1(50); / 等鍵釋放 return(KeyTablei); / 取出鍵碼 else return(0xff); /*樓層同步顯示函數(shù)*void display(uint a) Init(); Clear(); switch(a

38、) case 1: Page_ = 0x03;/一樓 Column = 0x30; Code_ = 0x00; WriteCHN16x16();Page_ = 0x03;Column = 0x40;Code_ = 0x03;WriteCHN16x16(); break;case 2: /二樓Page_ = 0x03;Column = 0x30;Code_ = 0x01;WriteCHN16x16();Page_ = 0x03;Column = 0x40;Code_ = 0x03;WriteCHN16x16(); break; case 3: /三樓Page_ = 0x03;Column = 0

39、x30;Code_ = 0x02;WriteCHN16x16();Page_ = 0x03;Column = 0x40;Code_ = 0x03;WriteCHN16x16();break; /*直流電機模塊*/帶掃描延時秒級void Delayms(uint j) uint x,y;for(x=0;x<=j;x+) for(y=0;y<=110;y+) keyscan(); zhishideng();void dianjiz() / 正轉CS0832=0xc3; Delayms(5000); /延時5秒void dianjif() / 反轉 CS0832=0x4d; Delayms(5000); /延時5秒void dianjit() / 暫停 CS0832=0x90; Delayms(3000); /延時3秒 /*/報警及樓層提示模塊*void delay2(uint cnt)/延時 while(-cnt);void bjtishi() uint i,j; for(j=0;j<7;j+) for(i=0;i<=50;i+) delay2(100); alarm1=!alarm1; /*鍵盤掃描確定目標樓層函數(shù)*void keyscan() if(TestKey() switch(GetKey() case 2: sh1=1;brea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論