51單片機(jī)實(shí)習(xí)報(bào)告_第1頁
51單片機(jī)實(shí)習(xí)報(bào)告_第2頁
51單片機(jī)實(shí)習(xí)報(bào)告_第3頁
51單片機(jī)實(shí)習(xí)報(bào)告_第4頁
51單片機(jī)實(shí)習(xí)報(bào)告_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

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

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

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

9、實(shí)際電路如圖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 鍵盤掃描電路偉福實(shí)驗(yàn)儀上的LED顯示電路和鍵盤電路如圖1。顯示電路和鍵盤電路可以工作在內(nèi)驅(qū)和外驅(qū)兩種方式,內(nèi)驅(qū)是用CPU總線方式驅(qū)動(dòng),通過總線讀寫外部設(shè)備的地址來控制顯示和讀入鍵盤碼。外部驅(qū)動(dòng)方式是直接用IO方式驅(qū)動(dòng)八段顯示的段碼、位碼和鍵盤按鍵信息,這里的IO控制可以用CPU的IO口來實(shí)現(xiàn)控制,也可通過8255等IO擴(kuò)展

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

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

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

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

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

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

16、所在的樓層數(shù)如電梯在一樓,那么顯示“一樓。 該子程序流程圖下:開始 判斷l(xiāng)c的值顯示“一樓顯示“三樓Lc=3顯示“二樓Lc=2Lc=1調(diào)用實(shí)驗(yàn)儀液晶的局部顯示程序設(shè)置地址,取模清屏,初始化 3.3 目標(biāo)樓層指示燈函數(shù) 由于所設(shè)計(jì)的電梯控制模擬系統(tǒng)只有三層,所以這里只設(shè)計(jì)三只指示燈,分別代表電梯內(nèi)的請求信號(hào),對某層樓有請求那么相應(yīng)的指示燈亮,當(dāng)電梯行至此層時(shí),該燈熄滅。 具體程序如下:/各目標(biāo)樓層的指示燈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 直流電機(jī)驅(qū)動(dòng)子函數(shù) 單片機(jī)通過輸出數(shù)字量,利用D/A轉(zhuǎn)換輸出對應(yīng)的模擬電壓來控制直流電機(jī)的狀態(tài)。 具體程序如下: /直流電機(jī)模塊void dianjiz() / 正轉(zhuǎn) CS0832=0xc0; Delayms(1000); /延時(shí)5秒 void dianjif() / 反轉(zhuǎn) CS0832=0x4f; Delayms(1000); /延時(shí)5秒 void dianjit() / 停轉(zhuǎn) CS0832=0x90; Delayms(1000); /延時(shí)3秒 另外,由于電機(jī)轉(zhuǎn)動(dòng)過程中,需要不斷掃描和存儲(chǔ)按下的請求信號(hào),所以在電機(jī)的延時(shí)程序里參加了keyscan()和zhishideng()子函數(shù)。帶掃

18、描和指示燈的延時(shí)函數(shù)如下: /延時(shí)秒級(jí)void Delayms(uint j) uint x,y; for(x=0;x<=j;x+) for(y=0;y<=110;y+) keyscan(); zhishideng(); 3.5 揚(yáng)聲器子函數(shù) 編寫該子程序時(shí),要注意揚(yáng)聲器的發(fā)聲原理。想要其發(fā)聲,那么需要單片機(jī)通過I/O口往其輸入一定頻率的脈沖,只給其置高電平是不會(huì)發(fā)聲的。另外,所輸入脈沖的頻率不同,可使其發(fā)出不同音調(diào)的聲音。在該系統(tǒng)內(nèi),主要是利用蜂鳴器來實(shí)現(xiàn)故障警報(bào)和聲音提示的功能,所以只需設(shè)置一個(gè)適宜頻率的波即可。 具體程序如下: 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ù)主要包括對目標(biāo)樓層指示燈的初始化及一個(gè)對各樓層檢測呼叫信號(hào)子函數(shù)的while循環(huán),比擬簡單。 具體程序如下:/主函數(shù)Void main() P1=0x00; While(1) lcjce(); 第4章 個(gè)人的心得體會(huì)14.0 實(shí)習(xí)的收獲與感悟1 剛開始實(shí)習(xí)時(shí),我并不是特別清楚我們實(shí)習(xí)具體的內(nèi)容是什么,以為每個(gè)人都是用偉福實(shí)驗(yàn)儀來實(shí)現(xiàn)同樣的系統(tǒng)。第一天,老師說要每個(gè)人都盡力發(fā)揮自己的想像能力,用單片機(jī)來做自己想做的東西。說實(shí)在挺不適應(yīng)的,

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

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

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

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

24、_ 0x9000; /直流電機(jī)驅(qū)動(dòng)口xdata unsigned char OUTBIT _at_ 0xa002; / 位控制口xdata unsigned char OUTSEG _at_ 0xa004; / 段控制口xdata unsigned char IN _at_ 0xa001; / 鍵盤讀入void keyscan();/各呼叫信號(hào)的初始化uint sh=0,0,0,0; uint xj=0,0,0,0;uint nx=0,0,0,0;sbit L1=P13; /各樓層的指示燈,當(dāng)電梯至某層時(shí),該樓層指示燈熄滅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;/秒級(jí)延時(shí)*void delayms1 (uint z) uint x,y; for(x=0;x<=z;x+) for(y=0;y<=110;y+); /液晶模塊設(shè)置* #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ù)進(jìn)地址(E2)xdata unsigned char CRADD2 _at_ 0x8006; / 讀狀態(tài)字地址(E2)xdata unsigned char DRADD2 _at_ 0x8007; / 讀顯示數(shù)據(jù)地址(E2)/ 中文字模庫 16x16點(diǎn)陣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); / 頁地址設(shè)置 WriteCommandE1(); WriteCommandE2(); Command = 0x00;

33、/ 列地址設(shè)置為"0" WriteCommandE1(); WriteCommandE2(); j = 0x50; / 一頁清 80個(gè)字節(jié) do LCDData = 0x00; / 顯示數(shù)據(jù)為"0"WriteDataE1(); WriteDataE2(); while(-j !=0); / 頁內(nèi)字節(jié)清零循環(huán)while(+i !=4); / 頁地址暫存器加一 / 顯示區(qū)清零循環(huán)/ 延時(shí)程序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; / 設(shè)置頁地址WriteCommandE1(); WriteCommandE2(); k = Column; / 列地址值while(k < Column + 16)if (k < PD1) / 為左半屏顯示區(qū)域(E1 Command = k;WriteCommandE1(); / 設(shè)置列地址值 LCDData = CCTABCode_i; / 取漢

35、字字模數(shù)據(jù) WriteDataE1(); / 寫字模數(shù)據(jù) else / 為右半屏顯示區(qū)域(E2) Command = k-PD1; WriteCommandE2(); / 設(shè)置列地址值 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; /*直流電機(jī)模塊*/帶掃描延時(shí)秒級(jí)void Delayms(uint j) uint x,y;for(x=0;x<=j;x+) for(y=0;y<=110;y+) keyscan(); zhishideng();void dianjiz() / 正轉(zhuǎn)CS0832=0xc3; Delayms(5000); /延時(shí)5秒void dianjif() / 反轉(zhuǎn) CS0832=0x4d; Delayms(5000); /延時(shí)5秒void dianjit() / 暫停 CS0832=0x90; Delayms(3000); /延時(shí)3秒 /*/報(bào)警及樓層提示模塊*void delay2(uint cnt)/延時(shí) while(-cnt);void bjtishi() uint i,j; for(j=0;j<7;j+) for(i=0;i<=50;i+) delay2(100); alarm1=!alarm1; /*鍵盤掃描確定目標(biāo)樓層函數(shù)*void keyscan() if(TestKey() switch(GetKey() case 2: sh1=1;brea

溫馨提示

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

評論

0/150

提交評論