控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)程序設(shè)計(jì)_第1頁(yè)
控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)程序設(shè)計(jì)_第2頁(yè)
控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)程序設(shè)計(jì)_第3頁(yè)
控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)程序設(shè)計(jì)_第4頁(yè)
控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、綜合電子創(chuàng)新訓(xùn)練研究報(bào)告研究題目:CTS1600-1控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)程序設(shè)計(jì)院系名稱:能源與動(dòng)力工程學(xué)院專業(yè)名稱:飛行器動(dòng)力工程 學(xué)生姓名:李寧 11041166楊婷 11041168 楊瑞琪 11041178指導(dǎo)教師:蔣龍、李燁2014 年6 月2日工程訓(xùn)練中心工程訓(xùn)練中心本科生創(chuàng)新訓(xùn)練(論文)任務(wù)書、創(chuàng)新訓(xùn)練(論文)題目:基于CTS1600-1控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)的電梯模擬控制系統(tǒng)設(shè)計(jì)、創(chuàng)新訓(xùn)練(論文)使用的原始資料(數(shù)據(jù))及設(shè)計(jì)技術(shù)要求:、主要參考資料:電梯教學(xué).ppt說(shuō)明講義.pdf16位單片機(jī)原理及應(yīng)用學(xué)習(xí)與實(shí)驗(yàn)指導(dǎo):百度文庫(kù)能源與動(dòng)力工程學(xué)院飛行器動(dòng)力工程專業(yè)類110417班學(xué)

2、生姓名李寧 11041166 楊婷 11041168 楊瑞琪 11041178 創(chuàng)新訓(xùn)練時(shí)間:2014年 3月至2014年6月答辯時(shí)間:2014年6月19日成績(jī):指導(dǎo)教師:蔣龍、李燁摘要CTS1600-1控制系統(tǒng)技術(shù)綜合實(shí)驗(yàn)系統(tǒng)的電梯模擬控制系統(tǒng)是基于凌陽(yáng)單片機(jī)的一次學(xué)生實(shí)驗(yàn),電梯模型將機(jī)械和電氣兩方面有機(jī)的結(jié)合起來(lái),充分體現(xiàn)了機(jī)電結(jié)合的特點(diǎn),增強(qiáng)了實(shí)驗(yàn)的綜合性和動(dòng)手性。此次實(shí)驗(yàn)我們編寫了電梯的各項(xiàng)小程序以及最終電梯運(yùn)行的大程序,并繪制了其對(duì)應(yīng)的程序流程圖,在問題的解決中得到了不菲的收獲。關(guān)鍵詞:電梯模擬控制系統(tǒng),單片機(jī),程序編寫目錄第一章、緒論11.1、課題背景與目的11.2、課題研究方法1

3、第二章、電梯模型硬件設(shè)備22.1、實(shí)驗(yàn)單片機(jī)模型與接口定義2、實(shí)驗(yàn)用單片機(jī)2、單片機(jī)接口定義3、I/O接口DATA控制命令表42.2、電梯控制命令說(shuō)明62.3、實(shí)驗(yàn)用電梯模型7、簡(jiǎn)介7、硬件連接8、安裝步驟8、接口種類及數(shù)目8第三章、與電梯模型相關(guān)的實(shí)驗(yàn)程序93.1、燈9、程序流程圖9、程序代碼9、功能簡(jiǎn)介10、功能實(shí)現(xiàn)過(guò)程10、問題的解決及收獲113.2、鍵+燈12、程序流程圖12、程序代碼12、功能簡(jiǎn)介13、功能實(shí)現(xiàn)過(guò)程14、問題的解決及收獲143.3、鍵+燈+數(shù)碼管15、程序流程圖15、程序代碼15、功能簡(jiǎn)介16、功能實(shí)現(xiàn)過(guò)程17、問題的解決及收獲173.4、鍵+燈+開關(guān)門18、程序流程

4、圖18、程序代碼18、功能簡(jiǎn)介20、功能實(shí)現(xiàn)過(guò)程21、問題的解決及收獲213.5、鍵+燈+數(shù)碼管+上下行22、程序流程圖22、程序代碼22、功能簡(jiǎn)介25、功能實(shí)現(xiàn)過(guò)程26、問題的解決及收獲263.6、鍵+燈+數(shù)碼管+上下行+開關(guān)門27、程序流程圖27、程序代碼28、功能簡(jiǎn)介28、功能實(shí)現(xiàn)過(guò)程28、問題的解決及收獲283.7、密碼鎖30、程序流程圖30、程序代碼30、功能簡(jiǎn)介35、功能實(shí)現(xiàn)過(guò)程35、問題的解決及收獲353.8、創(chuàng)新程序(記憶訓(xùn)練)36、程序流程圖36、程序代碼36、功能簡(jiǎn)介40、功能實(shí)現(xiàn)過(guò)程40、問題的解決及收獲41第四章、電梯模型完整控制程序424.1、主程序42、程序流程圖4

5、2、程序代碼43、功能說(shuō)明52、功能實(shí)現(xiàn)過(guò)程52、問題的解決及收獲524.2、鍵燈子程序(light函數(shù))53、程序流程圖53、功能簡(jiǎn)介53、問題解決及收獲534.3、開關(guān)門子程序(door函數(shù))54、程序流程圖54、功能簡(jiǎn)介54、問題的解決及收獲544.4、數(shù)碼管顯示子程序(digital函數(shù))55、程序流程圖(以二層為例)55、功能簡(jiǎn)介55、問題的解決及收獲554.5、延時(shí)子程序(dely函數(shù))56程序流程圖56功能簡(jiǎn)介56、問題的解決與收獲56第五章、總結(jié)與致謝575.1、總結(jié)575.2、致謝58第一章、緒論1.1、課題背景與目的1) 據(jù)統(tǒng)計(jì),我國(guó)在用電梯34.6萬(wàn)多臺(tái),每年還以約5-6

6、萬(wàn)臺(tái)的速度增長(zhǎng)。目前我國(guó)電梯技術(shù)水平已與世界同步。2) 電梯模型將機(jī)械和電氣兩方面有機(jī)的結(jié)合起來(lái),充分體現(xiàn)了機(jī)電結(jié)合的特點(diǎn),并且可以在學(xué)生機(jī)電實(shí)驗(yàn)方面得到廣泛的應(yīng)用。1.2、課題研究方法1) 參照凌陽(yáng)SPCE061A開發(fā)的相關(guān)資料,加深對(duì)控制電梯模型的單片機(jī)的了解。進(jìn)行61板的相關(guān)實(shí)驗(yàn),掌握單片機(jī)實(shí)現(xiàn)基本功能的技術(shù)。2) 對(duì)單片機(jī)編寫程序,以達(dá)到控制電梯模型的目的。3) 通過(guò)電梯模型的使用,使我們開發(fā)能力提高。第二章、電梯模型硬件設(shè)備2.1、實(shí)驗(yàn)單片機(jī)模型與接口定義、實(shí)驗(yàn)用單片機(jī)SPCE061A是繼µnSP系列產(chǎn)品SPCE500A等之后凌陽(yáng)科技推出的又一個(gè)16位結(jié)構(gòu)的微控制器。與SP

7、CE500A不同的是,在存儲(chǔ)器資源方面考慮到用戶的較少資源的需求以及便于程序調(diào)試等功能,SPCE061A里只內(nèi)嵌32K字的閃存FLASH ROM。較高的處理速度使µnSP能夠非常容易地、快速地處理復(fù)雜的數(shù)字信號(hào)。因此,與SPCE500A相同,以µnSP為核心的SPCE061A微控制器也適用在數(shù)字語(yǔ)音識(shí)別應(yīng)用領(lǐng)域。SPCE061A在2.6V3.6V工作電壓范圍內(nèi)的工作速度范圍為0.32MHz49.152MHz,較高的工作速度使其應(yīng)用領(lǐng)域更加拓寬。2K字SRAM和32K字閃存ROM僅占一頁(yè)存儲(chǔ)空間,32位可編程的多功能I/O端口;兩個(gè)16位定時(shí)器/計(jì)數(shù)器;32768Hz實(shí)時(shí)時(shí)鐘

8、;低電壓復(fù)位/監(jiān)測(cè)功能;8通道10位模-數(shù)轉(zhuǎn)換輸入功能并具有內(nèi)置自動(dòng)增益控制功能的麥克風(fēng)輸入方式;雙通道10位DAC方式的音頻輸出功能SPCE061A是數(shù)字聲音和語(yǔ)音識(shí)別產(chǎn)品的一種最經(jīng)濟(jì)的應(yīng)用。、單片機(jī)接口定義實(shí)驗(yàn)單片機(jī)的接口定義如圖1,其中A 口為輸入,B 口為輸出。、I/O接口DATA控制命令表表1是單片機(jī)A口Data控制命令表:表一表2 是單片機(jī)B 口Data 控制命令表:表二2.2、電梯控制命令說(shuō)明1) 一層上按鈕按下,*P_IOA_Data輸入值為0x0010,使一層上按鍵燈亮起的命令為:*P_IOB_Data=0x0010,其他層按鍵燈不受影響。2) 二層上按鈕按下,*P_IOA_

9、Data輸入值為0x0020,使二層上按鍵燈亮起的命令為:*P_IOB_Data=0x0020,其他層按鍵燈不受影響。3) 二層下按鈕按下,*P_IOA_Data輸入值為0x0040,使二層下按鍵燈亮起的命令為:*P_IOB_Data=0x0040,其他層按鍵燈不受影響。4) 三層上按鈕按下,*P_IOA_Data輸入值為0x0080,使三層上按鍵燈亮起的命令為:*P_IOB_Data=0x0080,其他層按鍵燈不受影響。5) 三層下按鈕按下,*P_IOA_Data輸入值為0x0100,使三層下按鍵燈亮起的命令為:*P_IOB_Data=0x0100,其他層按鍵燈不受影響。6) 四層下按鈕按下

10、,*P_IOA_Data輸入值為0x0200,使四層下按鍵燈亮起的命令為:*P_IOB_Data=0x0200,其他層按鍵燈不受影響。7) 電梯內(nèi)部開門按鈕按下,*P_IOA_Data輸入值為0x4000,使電梯開門的命令為:*P_IOB_Data=0x000c,電梯執(zhí)行開門動(dòng)作。8) 電梯內(nèi)部關(guān)門按鈕按下,*P_IOA_Data輸入值為0x8000,使電梯關(guān)門的命令為:*P_IOB_Data=0x0008,電梯執(zhí)行關(guān)門動(dòng)作。2.3、實(shí)驗(yàn)用電梯模型、簡(jiǎn)介CTS1600-控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)是典型的機(jī)電控制系統(tǒng),是運(yùn)用PC 機(jī)控制單片機(jī)的教學(xué)平臺(tái)。通過(guò)本實(shí)驗(yàn),不但可以幫助學(xué)生理解掌握實(shí)際電梯的控

11、制原理和方法,而且能將所學(xué)運(yùn)用到現(xiàn)代工業(yè)和其他領(lǐng)域中。電梯模型將機(jī)械和電氣兩方面有機(jī)的結(jié)合起來(lái),充分體現(xiàn)了機(jī)電結(jié)合的特點(diǎn),并且在學(xué)生機(jī)電實(shí)驗(yàn)方面得到廣泛的應(yīng)用。參照凌陽(yáng)SPCE061A 開發(fā)的相關(guān)資料,加深對(duì)控制電梯模型的單片機(jī)的了解。進(jìn)行61 板的相關(guān)實(shí)驗(yàn),掌握單片機(jī)實(shí)現(xiàn)基本功能的技術(shù)。對(duì)單片機(jī)編寫程序,達(dá)到控制電梯模型的目的。、硬件連接、安裝步驟1) 用UART/USB 連接線將計(jì)算機(jī)與凌陽(yáng)單片機(jī)連接2) 凌陽(yáng)單片機(jī)與40 線并行電纜連接3) CTS1600-控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)與40 線并行電纜連接4) CTS1600-控制技術(shù)綜合實(shí)驗(yàn)系統(tǒng)再與220V交流電連接、接口種類及數(shù)目1) 外部

12、按鍵6個(gè),內(nèi)部按鍵6個(gè)2) 到位開關(guān)1 至4 層各1個(gè)3) 7. 開門/關(guān)門到位開關(guān)各1個(gè)4) 外部/內(nèi)部信號(hào)燈各6個(gè)5) 數(shù)碼顯示BCD(3位)6) 上下行/開關(guān)門電機(jī)各1臺(tái)第三章、與電梯模型相關(guān)的實(shí)驗(yàn)程序3.1、燈、程序流程圖、程序代碼#include "spce061A.h"void main()int input,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1) *P_IOB_Data=0x0010;

13、dly(40);*P_IOB_Data=0x0040;dly(40);*P_IOB_Data=0x0020;dly(40);*P_IOB_Data=0x0100;dly(40);*P_IOB_Data=0x0080;dly(40);*P_IOB_Data=0x0200;dly(40);void dly (unsigned int undly) int m; for(m=0;m<undly;m+) int n; for(n=0;n<undly;n+)n=n; *P_Watchdog_Clear=0x0001; *P_Watchdog_Clear=0x0001; 、功能簡(jiǎn)介這個(gè)程序通過(guò)

14、一個(gè)延時(shí)子程序來(lái)實(shí)現(xiàn)燈按一定頻率的進(jìn)行亮、滅的目標(biāo),最終燈會(huì)由一層到四層逐次亮、滅。、功能實(shí)現(xiàn)過(guò)程這個(gè)程序通過(guò)while(1)的指令,不斷給輸出端口B進(jìn)行賦值,通過(guò)賦予B對(duì)應(yīng)端口一個(gè)燈對(duì)應(yīng)的16進(jìn)制代碼以實(shí)現(xiàn)此燈亮的功能。燈亮后延時(shí)(此程序運(yùn)行頻率約為100000Hz,dly函數(shù)延時(shí)時(shí)間為n2,dly(40)即延時(shí)0.016秒。、問題的解決及收獲編寫這個(gè)程序時(shí),由于是第一次使用凌陽(yáng)單片機(jī),雖然有著C語(yǔ)言的基礎(chǔ),但是對(duì)于單片機(jī)的程序還是有著一定程度的陌生。編寫時(shí)由于對(duì)單片機(jī)的了解不夠犯了很多邏輯上的錯(cuò)誤,對(duì)于延時(shí)子程序的了解也不夠透徹,以至于沒有正確合適的使用它。通過(guò)閱讀講義、上課PPT以及老師

15、的現(xiàn)場(chǎng)指導(dǎo),我們最終解決了這些問題,這位之后程序的成功編寫奠定了一定的基礎(chǔ)。這些問題告訴我們,在遇到困難的時(shí)候不要過(guò)于緊張,靜下來(lái)通過(guò)其他例子進(jìn)行觸類旁通就有可能將其完美解決。3.2、鍵+燈、程序流程圖3.2.2、程序代碼#include "spce061A.h"void main()int input,p,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1)t=*P_IOA_Data;if(t&0x00

16、10)=0x0010)*P_IOB_Data=*P_IOB_Data|0x0010;if(t&0x0020)=0x0020)*P_IOB_Data=*P_IOB_Data|0x0020;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040)*P_IOB_Data=*P_IOB_Data|0x0040;*P_Watchdog_Clear=0x0001;if(t&0x0080)=0x0080)*P_IOB_Data=*P_IOB_Data|0x0080;*P_Watchdog_Clear=0x0001;if(t&0x0100)=0

17、x0100)*P_IOB_Data=*P_IOB_Data|0x0100;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200)*P_IOB_Data=*P_IOB_Data|0x0200;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;、功能簡(jiǎn)介本程序開始時(shí)燈是全滅的,當(dāng)按鍵之后,按鍵對(duì)應(yīng)的燈就亮,按下下一個(gè)鍵后,原先的燈不滅,下一個(gè)對(duì)應(yīng)的燈亮。、功能實(shí)現(xiàn)過(guò)程程序通過(guò)while(1)命令使程序始終循環(huán)運(yùn)行,當(dāng)按下一個(gè)鍵后,輸出端B的值在原先的基礎(chǔ)上,對(duì)應(yīng)的端口再加上一個(gè)對(duì)應(yīng)按鍵的燈的值,以此來(lái)實(shí)現(xiàn)

18、按鍵之后對(duì)應(yīng)的燈亮,原先的燈不滅的功能。、問題的解決及收獲通過(guò)這個(gè)程序我們了解到,讓B口在原先的基礎(chǔ)上繼續(xù)輸出現(xiàn)在的值可以通過(guò)“|”這個(gè)命令解決,也可以通過(guò)將對(duì)應(yīng)端口的值直接用十六進(jìn)制的加法計(jì)算算出結(jié)果來(lái)解決。由于本程序較為簡(jiǎn)單,因此我們選擇通過(guò)“|”這個(gè)命令來(lái)解決,從而起到簡(jiǎn)化編寫過(guò)程的效果。3.3、鍵+燈+數(shù)碼管、程序流程圖、程序代碼#include "spce061A.h"void main()int input,p,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attr

19、ib=0xf3ff;*P_IOB_Data=0;while(1)t=*P_IOA_Data;if(t&0x0010)=0x0010)*P_IOB_Data=0x1010;if(t&0x0020)=0x0020)*P_IOB_Data=0x2020;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040)*P_IOB_Data=0x2040;*P_Watchdog_Clear=0x0001;if(t&0x0080)=0x0080)*P_IOB_Data=0x3080;*P_Watchdog_Clear=0x0001;if(t&am

20、p;0x0100)=0x0100)*P_IOB_Data=0x3100;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200)*P_IOB_Data=0x4200;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;、功能簡(jiǎn)介本程序剛開始燈和數(shù)碼管均沒有顯示。當(dāng)按下一個(gè)鍵之后,對(duì)應(yīng)的燈亮,數(shù)碼管顯示數(shù)字,按下下一個(gè)鍵之后,前一盞燈和數(shù)碼管滅,這一個(gè)鍵所對(duì)應(yīng)的燈亮、數(shù)碼管顯示數(shù)字。、功能實(shí)現(xiàn)過(guò)程程序通過(guò)while(1)命令使程序始終循環(huán)運(yùn)行,當(dāng)按下一個(gè)鍵后,輸出端B的值賦予一個(gè)對(duì)應(yīng)按鍵的燈和數(shù)碼管的值來(lái)取

21、代原先的值,以此來(lái)實(shí)現(xiàn)按鍵之后對(duì)應(yīng)的燈亮、數(shù)碼管亮的功能。、問題的解決及收獲此程序可以通過(guò)對(duì)“鍵+燈”程序的修改而快速得到,較為簡(jiǎn)單。值得一提的是,一開始此程序由于缺少“看門狗”指令,在外界某些因素的影響下,程序并沒有順利運(yùn)行。由于研究工具的限制,我們并沒有徹底了解看門狗的具體功能以及外界對(duì)此程序的影響方式。通過(guò)查閱文獻(xiàn)我們最終了解到“看門狗”是為了程序里面防止一些不可知的因素程序跑飛功能不正常而設(shè)置的硬件復(fù)位,通常這個(gè)功能是編程時(shí)可選開啟的,開了之后會(huì)一定的周期(大概是8M時(shí)鐘周期)地出發(fā)這個(gè)“看門狗”功能。所以如果開了“看門狗”,主循環(huán)中一般需要加一句clear watchdog,或者其他

22、有長(zhǎng)時(shí)間等待再或者死循環(huán)的地方,都要注意清“看門狗“。通過(guò)這個(gè)程序我們了解到了”看門狗“的重要性。3.4、鍵+燈+開關(guān)門、程序流程圖、程序代碼#include "spce061A.h"void main()int input,t=0;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1)p=*P_IOB_Data;if(p&0x0800)=0x0800)break;*P_IOB_Data=*P_IOB_Data|0

23、x0008;while(1)t=*P_IOA_Data;if(t&0x0010)=0x0010)*P_IOB_Data=0x001c;dly(400);*P_IOB_Data=0x0018;*P_Watchdog_Clear=0x0001;if(t&0x0020)=0x0020)*P_IOB_Data=0x002c;dly(400);*P_IOB_Data=0x0028;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040)*P_IOB_Data=0x004c;dly(400);*P_IOB_Data=0x0048;*P_Watchd

24、og_Clear=0x0001;if(t&0x0080)=0x0080)*P_IOB_Data=0x008c;dly(400);*P_IOB_Data=0x0088;*P_Watchdog_Clear=0x0001;if(t&0x0100)=0x0100)*P_IOB_Data=0x010c;dly(400);*P_IOB_Data=0x0108;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200)*P_IOB_Data=0x020c;dly(400);*P_IOB_Data=0x0208;*P_Watchdog_Clear=0x0

25、001;*P_Watchdog_Clear=0x0001;void dly (unsigned int undly) int m;for(m=0;m<undly;m+)int n; for(n=0;n<undly;n+)n=n;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;、功能簡(jiǎn)介當(dāng)按下一個(gè)鍵后,按鍵所對(duì)應(yīng)的燈亮,電梯門打開,打開完畢后延時(shí)1.6秒,電梯門關(guān)閉且燈滅,以此循環(huán)。、功能實(shí)現(xiàn)過(guò)程程序通過(guò)while(1)命令使程序始終循環(huán)運(yùn)行,當(dāng)按下一個(gè)鍵后,輸出端B的值賦予一個(gè)對(duì)應(yīng)按鍵的燈的值以及一個(gè)開門的值來(lái)取代原先的值,以此來(lái)

26、實(shí)現(xiàn)按鍵之后對(duì)應(yīng)的燈亮、開門,開門完畢后,延時(shí)1.6秒后,也就是子程序中dly(400),將輸出端B口的值賦予關(guān)門的值,從而電梯門關(guān)閉,燈滅。、問題的解決及收獲由于電梯本身的故障,電梯在剛啟動(dòng)時(shí),電梯門會(huì)打開一半。由于這個(gè)問題,我們的程序一開始并不能完美運(yùn)行,必須先通過(guò)多次啟動(dòng)電梯,然后通過(guò)內(nèi)部按鍵關(guān)閉電梯門才能正常開始運(yùn)行程序。為了解決這個(gè)問題,我們?cè)谖覀冊(cè)瘸绦虻幕A(chǔ)上增加了一個(gè)檢查程序,當(dāng)電梯門并沒有關(guān)門到位時(shí),就關(guān)閉電梯門,然后通過(guò)break命令跳出這個(gè)檢查程序進(jìn)入正常的鍵+燈+開關(guān)門程序。通過(guò)這種方式我們讓我們的程序得到了便捷完美的實(shí)現(xiàn)。3.5、鍵+燈+數(shù)碼管+上下行、程序流程圖3.

27、5.2、程序代碼#include "spce061A.h"void main()int input,t=0,i,m;*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1)t=*P_IOA_Data;if(t&0x0010)=0x0010) *P_IOB_Data=0x0002+0x0010; i=1; stop(0x0400); *P_IOB_Data=0x1000; *P_Watchdog_Clear=0x000

28、1; if(t&0x0020)=0x0020) *P_IOB_Data=0x0020;go(i,2);stop(0x0800);*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;if(t&0x0040)=0x0040) *P_IOB_Data=0x0040;go(i,2);i=2;stop(0x0800);*P_IOB_Data=0x2000;*P_Watchdog_Clear=0x0001;if(t&0x0080)=0x0080) *P_IOB_Data=0x0080;go(i,3);i=3;stop(0x1000);*P_IOB

29、_Data=0x3000;*P_Watchdog_Clear=0x0001;if(t&0x0100)=0x0100) *P_IOB_Data=0x0100;go(i,3);i=3;stop(0x1000);*P_IOB_Data=0x3000;*P_Watchdog_Clear=0x0001;if(t&0x0200)=0x0200) *P_IOB_Data=0x0200;go(i,4);i=4;stop(0x2000);*P_IOB_Data=0x4000;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;void dly (u

30、nsigned int undly) int m;for(m=0;m<undly;m+)int n; for(n=0;n<undly;n+)n=n;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;void stop(int x) while(1)if(*P_IOA_Data&x)=x)if(x=0x0400)*P_IOB_Data=0x1000;if(x=0x0800)*P_IOB_Data=0x2000;if(x=0x1000)*P_IOB_Data=0x3000;if(x=0x2000)*P_IOB_Data=0x40

31、00;break;*P_Watchdog_Clear=0x0001;int go( int i,int m) if(i<m)*P_IOB_Data=0x0003;i=m;if(i>m)*P_IOB_Data=0x0002;i=m;*P_Watchdog_Clear=0x0001;、功能簡(jiǎn)介當(dāng)按下一個(gè)鍵之后,按鍵所對(duì)應(yīng)的燈亮、數(shù)碼管顯示所在樓層樓號(hào),與此同時(shí)電梯前往按鍵所在樓層,電梯到達(dá)所在樓層后,電梯停止,數(shù)碼管顯示當(dāng)前樓層樓號(hào)。、功能實(shí)現(xiàn)過(guò)程程序通過(guò)while(1)命令使程序始終循環(huán)運(yùn)行,當(dāng)按下一個(gè)鍵后,輸出端B的值賦予一個(gè)對(duì)應(yīng)按鍵的燈的值以及一個(gè)數(shù)碼管的值來(lái)取代原先的值,以此來(lái)

32、實(shí)現(xiàn)按鍵之后對(duì)應(yīng)的燈亮、數(shù)碼管顯示當(dāng)前樓層樓號(hào),然后通過(guò)一個(gè)運(yùn)行子程序go(i,m)來(lái)使電梯運(yùn)行到所需要前往的樓層,子程序中用變量i來(lái)記錄當(dāng)前樓層號(hào),m來(lái)記錄所要前往的樓層號(hào)通過(guò)判斷來(lái)確定電梯是該上行還是下行,到達(dá)樓層后,通過(guò)一個(gè)停止子程序stop(x)讓電梯停止,并給輸出端B賦予一個(gè)當(dāng)前樓層數(shù)碼管的值來(lái)取代原先的值,以此來(lái)實(shí)現(xiàn)到達(dá)之后顯示當(dāng)前樓層樓號(hào)的效果。、問題的解決及收獲這個(gè)程序讓我們對(duì)子程序的引用使用方法以及返回值更加了解,通過(guò)定義全局變量可以讓程序變量的定義變得更加便捷,但是在這個(gè)程序中我們并沒有實(shí)現(xiàn)電梯經(jīng)過(guò)某個(gè)樓層就顯示樓層號(hào)的效果,這個(gè)為我們后續(xù)程序的編寫提供了改進(jìn)方向。我們最終

33、編寫了一個(gè)子程序來(lái)控制數(shù)碼管的變化,這個(gè)在后續(xù)程序中有敘述。3.6、鍵+燈+數(shù)碼管+上下行+開關(guān)門、程序流程圖3.6.2、程序代碼由于程序過(guò)長(zhǎng)且與最終的電梯運(yùn)行大程序類似,故在此不詳盡敘述程序代碼內(nèi)容,詳細(xì)程序可參考最終電梯運(yùn)行大程序。、功能簡(jiǎn)介電梯始終顯示當(dāng)前樓層樓號(hào),當(dāng)按下一個(gè)鍵之后,按鍵燈亮,該程序控制電梯關(guān)門,按鍵所對(duì)應(yīng)的燈滅,進(jìn)而運(yùn)行到所要前往的樓層,在運(yùn)行過(guò)程,數(shù)碼管顯示經(jīng)過(guò)樓層的樓號(hào)直至最終到達(dá)下一樓層,電梯到達(dá)且停穩(wěn)后,電梯開門。、功能實(shí)現(xiàn)過(guò)程首先,系統(tǒng)需要先清零,也就是把已經(jīng)編好的程序?qū)懭氲搅桕?yáng)SPCE061A單片機(jī)中。程序通過(guò)while(1)始終運(yùn)行,按鍵輸入指令后,程序先

34、給輸出端B一個(gè)關(guān)門的指令,通過(guò)判斷程序確定電梯的上下行方向,運(yùn)行過(guò)程中通過(guò)一個(gè)數(shù)碼管的控制程序來(lái)控制數(shù)碼管始終顯示當(dāng)前樓層樓號(hào),此外電梯通過(guò)一個(gè)停止程序來(lái)控制電梯最終的停止,然后給輸出端B一個(gè)開門指令結(jié)束程序運(yùn)行。、問題的解決及收獲在上個(gè)程序的基礎(chǔ)上,我們給電梯增加了一個(gè)子程序來(lái)控制燈和數(shù)碼管的顯示,且給電梯一個(gè)開關(guān)門指令。值得一提的是,電梯在開關(guān)門的指令后需要接上一個(gè)延時(shí)程序,否則由于電梯掃描程序運(yùn)行的速度過(guò)快,將會(huì)導(dǎo)致后續(xù)程序無(wú)法正常運(yùn)行。這個(gè)問題在編寫的時(shí)候給我們帶來(lái)了很大的困擾,最終在請(qǐng)教了老師之后將其完美解決,使程序能夠順利運(yùn)行。通過(guò)這個(gè)程序,我們了解到了延時(shí)程序在電梯運(yùn)行過(guò)程中你的

35、重要性和不可缺少性。3.7、密碼鎖、程序流程圖、程序代碼#include "spce061A.h"#include<stdio.h>int a5=0,b5=0,i=1,j=1;int main()*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;while(1)setup();jiesuo();if(a4=b4)&&(a1=b1)&&(a2=b2)&&(a3=b3)*P_IO

36、B_Data=0x000c;b4=0; b1=0; b2=0; b3=0; j=1;*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x4000)=0x4000)*P_IOB_Data=0x0008;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;void dly (unsigned int undly)int m,n;for(m=0;m<undly;m+)for(n=0;n<undly;n+)n=n;void setup() if(*P_IOA_Data&0x0001)=0x000

37、1) ai=1; i=i+1; *P_IOA_Data=0; *P_IOB_Data=0x1010; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0002)=0x0002) ai=2; i=i+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x2040; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0004)=0x0004) ai=3; i=i+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x3020; *P_Watchdog_C

38、lear=0x0001;if(*P_IOA_Data&0x0008)=0x0008) ai=4; i=i+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x4100; *P_Watchdog_Clear=0x0001;void jiesuo() if(*P_IOA_Data&0x0010)=0x0010) bj=1; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x1010; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0040)=0x0040) bj=

39、2; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x2040; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0020)=0x0020) bj=3; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x3020; *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0100)=0x0100) bj=4; j=j+1; *P_IOA_Data=0; dly(100); *P_IOB_Data=0x4100; *P_Watchd

40、og_Clear=0x0001;if(*P_IOA_Data&0x0200)=0x0200) *P_IOB_Data=0x0200; a4=0; a1=0; a2=0; a3=0; i=1; *P_IOA_Data=0; dly(100); *P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0080)=0x0080) *P_IOB_Data=0x0080; b4=0; b1=0; b2=0; b3=0; j=1; *P_IOA_Data=0; dly(100); *P_Watchdog_Clear=0x0001; *P_Watchdog_Cle

41、ar=0x0001;、功能簡(jiǎn)介該程序是一個(gè)密碼鎖程序,程序先通過(guò)電梯內(nèi)部按鍵輸入設(shè)定一個(gè)密碼,電梯關(guān)門,然后通過(guò)電梯外部按鍵輸入一個(gè)密碼,若之后輸入的密碼和之前的密碼相同,則電梯開門,否則電梯將不會(huì)有任何反應(yīng),密碼程序可以通過(guò)外部按鍵進(jìn)行重設(shè)密碼和輸入密碼重置的功能。、功能實(shí)現(xiàn)過(guò)程程序通過(guò)while(1)始終運(yùn)行,先通過(guò)電梯內(nèi)部按鍵給數(shù)組ai輸入一個(gè)密碼,然后給輸出端B一個(gè)電梯關(guān)門的指令。通過(guò)電梯外部按鍵給數(shù)組bi輸入一個(gè)密碼,電梯通過(guò)判斷程序,若ai=bi,則給輸出端B一個(gè)開門指令。電梯可通過(guò)外部按鍵實(shí)現(xiàn)ai和bi的清零,也就是密碼和輸入密碼的重置。、問題的解決及收獲由于電梯掃描運(yùn)行的速度過(guò)

42、快,當(dāng)按下一個(gè)鍵之后,往往給整個(gè)數(shù)組都賦予了當(dāng)前按鍵所對(duì)應(yīng)的值,從而使得電梯不能正常的記錄多個(gè)密碼,我們通過(guò)一個(gè)按鍵清零指令和一個(gè)延時(shí)程序,使數(shù)組一次只記錄一個(gè)密碼,從而實(shí)現(xiàn)了密碼的工作。3.8、創(chuàng)新程序(記憶訓(xùn)練)、程序流程圖、程序代碼#include "spce061A.h"#include<stdio.h>int a5=0,j=0,i=1;int main()*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0;whil

43、e(1)if(*P_IOB_Data&0x0800)=0x0800)break;*P_IOB_Data=*P_IOB_Data|0x0008;while(1)if(j=0)*P_IOB_Data=0x3000; dly(150);*P_IOB_Data=0x2000;dly(150);*P_IOB_Data=0x1000;dly(150);*P_IOB_Data=0x0010; dly(100);*P_IOB_Data=0x0020;dly(100);*P_IOB_Data=0x0040;dly(100);*P_IOB_Data=0x0100;dly(100);*P_IOB_Data=

44、0;j=1;dly(100);*P_Watchdog_Clear=0x0001;if(j=1)if(*P_IOA_Data&0x0010)=0x0010) *P_IOB_Data=0x0010;ai=1;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0040)=0x0040) *P_IOB_Data=0x0040;ai=2;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0020)=

45、0x0020) *P_IOB_Data=0x0020;ai=3;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0100)=0x0100) *P_IOB_Data=0x0100;ai=4;i=i+1;*P_IOA_Data=0;dly(100);*P_Watchdog_Clear=0x0001;if(a1=1&&a2=3&&a3=2&&a4=4) *P_IOB_Data=0x000c;a1=0;a2=0;a3=0;a4=0;i=1;dly(200

46、);*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0200)=0x0200) *P_IOB_Data=0x0080;j=0;*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x0080)=0x0080) a1=0;a2=0;a3=0;a4=0;i=1;*P_IOB_Data=0;*P_Watchdog_Clear=0x0001;if(*P_IOA_Data&0x4000)=0x4000) *P_IOB_Data=0x0008;*P_Watchdog_Clear=0x0001;*P_Watchdog_C

47、lear=0x0001;void dly (unsigned int undly) int m;for(m=0;m<undly;m+)int n; for(n=0;n<undly;n+)n=n;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;、功能簡(jiǎn)介電梯的燈先按一定順序亮、滅一定數(shù)量,然后手動(dòng)輸入燈的亮、滅順序,如果輸入的順序和電梯播放的順序相同,那么電梯就開門,以此可以進(jìn)行小朋友的記憶訓(xùn)練。、功能實(shí)現(xiàn)過(guò)程此程序有兩個(gè)循環(huán),一個(gè)循環(huán)為電梯自動(dòng)播放燈亮滅程序,另一個(gè)循環(huán)為輸入判斷程序。電梯先進(jìn)行第一個(gè)循環(huán)播放,然后跳出第一個(gè)循環(huán)進(jìn)

48、入第二個(gè)循環(huán),電梯通過(guò)外部按鍵輸入值到數(shù)組ai中,并將ai的值與電梯預(yù)設(shè)的值(燈亮、滅順序)相比較,若兩者相同則電梯開門,電梯可通過(guò)外部按鍵重置輸入ai,也可以通過(guò)外部按鍵跳回到第一個(gè)循環(huán)重新播放燈的亮滅。、問題的解決及收獲此程序原意是希望電梯能夠自動(dòng)隨機(jī)播放燈的亮、滅,但由于對(duì)于單片機(jī)程序命令的不熟悉,不知道隨機(jī)播放的命令,最后只能退而求其次,讓電梯播放預(yù)先設(shè)定的一組燈的亮滅順序,對(duì)于這一點(diǎn),希望我們能通過(guò)后續(xù)的學(xué)習(xí)將其改進(jìn)。第四章、電梯模型完整控制程序4.1、主程序、程序流程圖4.1.2、程序代碼#include "spce061A.h"int input,t=0,x=

49、0; void main()*P_IOA_Dir=0;*P_IOA_Attrib=0;*P_IOA_Data=0;*P_IOB_Dir=0xf3ff;*P_IOB_Attrib=0xf3ff;*P_IOB_Data=0x0002;while(1) light(1);digital(1);t=*P_IOA_Data;if(*P_IOA_Data&0x000f)!=0x0000)x=*P_IOA_Data;*P_Watchdog_Clear=0x0001;if(t&0x0400)=0x0400)digital(1);if(*P_IOB_Data&0x0010)=0x0010

50、|(x&0x0001)=0x0001) *P_IOB_Data=*P_IOB_Data&0xffef;x=x&0x000e;door(1);*P_Watchdog_Clear=0x0001;if(x&0x0002)=0x0002|(x&0x0004)=0x0004|(x&0x0008)=0x0008|(*P_IOB_Data&0x0020)=0x0020|(*P_IOB_Data&0x0040)=0x0040|(*P_IOB_Data&0x0080)=0x0080|(*P_IOB_Data&0x0100)=0x01

51、00|(*P_IOB_Data&0x0200)=0x0200)*P_IOB_Data=(*P_IOB_Data&0xfffc)|0x0003;*P_Watchdog_Clear=0x0001;*P_Watchdog_Clear=0x0001;if(t&0x0800)=0x0800)digital(1);if(*P_IOB_Data&0x0001)=0x0001)if(*P_IOB_Data&0x0020)=0x0020|(x&0x0002)=0x0002)*P_IOB_Data=*P_IOB_Data&0xffdf;x=x&0x0

52、00d;*P_IOB_Data=*P_IOB_Data&0xfffd;door(1);*P_Watchdog_Clear=0x0001;else if(*P_IOB_Data&0x0080)=0x0080|(*P_IOB_Data&0x0100)=0x0100|(*P_IOB_Data&0x0200)=0x0200|(x&0x0004)=0x0004|(x&0x0008)=0x0008)*P_IOB_Data=(*P_IOB_Data&0xfffc)|0x0003;dely(100);*P_Watchdog_Clear=0x0001;else if(*P_IOB_Data&0x0040)=0x0040)*P_

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論