單片機課程設計 摘 要 電梯是標志現代物質文明的垂直運輸工具、是機電一體化的復雜運輸設備。它涉及電子技術、機械工程、電力電子技術、微電腦技術、電力拖動系統和土建工程等多個科學領域。本文旨在使用單片機上的數碼管模擬電梯的運行過程對提高學生的綜合應用程序設計能力也將是非常有益和非常有效的,并且需要使用動態掃描的方法來實現這一模擬過程,獨立進行單片機應用技術開發工作,掌握單片機程序設計、調試,應用電路設計、分析及調試檢測。本文的核心在于:熟練使用單片機,并且要基于keil平臺編寫程序;最后要使用單片機來實現電梯控制功能。 Abstract Elevator is the vertical transportation vehicle that marks the modern material civilization, and the complex transportation equipment of electromechanical integration. It involves many fields of science, such as electronic technology, mechanical engineering, power electronic technology, micro-computer technology, electric drive system and civil engineering. The purpose of this paper is to simulate the operation process of the elevator with the digital tube on the single chip computer. It is also very useful and very effective to improve the students' comprehensive application design ability, and it is necessary to use the dynamic scanning method to realize this simulation process. The application technology development work of the single chip computer is independently carried out and the single chip computer program is mastered. Design, debug, application circuit design, analysis and debug test. The core of this article is: using SCM skillfully, and programming based on keil platform. Finally, we need to use SCM to achieve elevator control function.
目錄
第一章 概述 第二章 電梯控制的原理 2.1基于MSC-51單片機的簡單電梯控制 2.2方案一的討論 2.2.1方案一的優點 2.2.2方案一的缺點 2.3方案二的討論 2.3.1方案的優點 2.3.2方案二的缺點 2.4兩種方法的比較以及選擇 第三章 硬件電路設備及軟件流程代碼 3.1控制芯片AT89S52簡介 3.2主程序代碼設計 3.3功能測試 總結 參考文獻 附錄1 主要源代碼 附錄2 原理圖
第一章 概述 隨著人口的增長,高層建筑已經逐漸成為了人們居住,上班的主流建筑。隨著高層建筑的興起,電梯的地位也變得越來越重要。十幾層甚至幾十層的賓館、酒店、辦公樓、住宅鱗次櫛比。伴隨著社會的高速發展,電梯作為大樓里的一種交通工具,人們的生活越來越離不開它。 電梯是垂直運行的電梯(通常也簡稱為電梯)、傾斜方向運行的自動扶梯、傾斜或水平方向運行的自動人行道的總稱。有了電梯,摩天大樓才得以崛起,現代城市才得以長高。據估計,截至2002年,全球在用電梯約635萬臺,其中垂直電梯約610萬臺,自動扶梯和自動人行道約25萬臺。電梯已成為人類現代生活中廣泛使用的人員運輸工具。人們對電梯安全性、高效性、舒適性的不斷追求推動了電梯技術的進步。在現代社會和經濟活動中,計算機技術、自動控制技術和電力電子技術得到了迅速的發展,不斷滿足社會經濟快速發展和人民生活水平不斷提高的需要,電梯作為一種重要的交通運輸工具,已經成為城市物質文明的一種標志。電梯在公辦大樓、公司、高層住宅、賓館等場所得到了廣泛應用。特別是在高層建筑中,電梯是不可缺少的垂直運輸設備。 現代電梯主要由曳引機(絞車)、導軌、對重裝置、安全裝置(如限速器、安全鉗和緩沖器等)、信號操縱系統、轎廂與廳門等組成。這些部分分別安裝在建筑物的井道和機房中。通常采用鋼絲繩摩擦傳動,鋼絲繩繞過曳引輪,兩端分別連接轎廂和平衡重,電動機驅動曳引輪使轎廂升降。電梯要求安全可靠、輸送效率高、平層準確和乘坐舒適等。電梯的基本參數主要有額定載重量、可乘人數、額定速度、轎廂外廓尺寸和井道型式等。簡單使用方法(緊急情況下面有解決方法) 載人電梯都是微機控制的智能化、自動化設備,不需要專門的人員來操作 電梯電梯結構圖 電梯內部結構圖駕駛,普通乘客只要按下列程序乘坐和操作電梯即可。在乘梯樓層電梯入口處,根據自己上行或下行的需要,按上方向或下方向箭頭按鈕,只要按鈕上的燈亮,就說明你的呼叫已被記錄,只要等待電梯到來即可。 電梯到達開門后,先讓轎廂內人員走出電梯,然后呼梯者再進入電梯轎廂。進入轎廂后,根據你需要到達的樓層,按下轎廂內操縱盤上相應的數字按鈕。同樣,只要該按鈕燈亮,則說明你的選層已被記錄;此時不用進行其他任何操作,只要等電梯到達你的目的層停靠即可。電梯行駛到你的目的層后會自動開門,此時按順序走出電梯即結束了一個乘梯過程。 近年來,隨著城鎮化的推進及居民生活水平的提高,電梯已成為百姓生產、生活中不可或缺的垂直交通工具。前瞻產業研究院發布的《2015-2020年中國電梯行業市場需求預測與投資機會分析報告前瞻》顯示,2013年我國電梯的總產量達到了57.97萬臺,同比增長9.58%,中國已經成為全球電梯產量最高的國家,比重超過全球總量的60%。從2009年到2013年,我國電梯產量年均增長率達到了21.96%。 目前中國已成為世界上電梯保有量最大的國家,截至2013年底,我國電梯保有量達到292.24萬臺,同比增長19.97%。我國電梯擁有數為21.48臺/1萬人,與全球平均23.88臺/1萬人相比,已經接近全球平均水平。而與韓國等地的市場比較來看,我國未來電梯的保有量會達到800萬臺左右,年新裝/更新量會維持在50萬臺的水平。
第二章 電梯控制的原理 2.1基于MSC-51單片機的簡單電梯控制 方案一:為了更有效的進行電梯控制,現在使用最左邊的數碼管表示電梯上升和下降狀態,使用“∧”表示上升狀態,是同“∨“表示下降狀態,使用另外一個一個數碼管表示電梯此時所在的樓層,使用按鍵K1和K2來控制電梯上升或者下降的狀態。 在每層樓之后需要進行判斷上升或者下降。如果是在上升過程中,應先判斷是否繼續上升,然后在判斷是否下降。如果是在下降過程中,應先判斷是否繼續下降,在判斷是否上升。在上升改變為下降狀態時,或者下降改變為上升狀態時。 數碼管的狀態應該相應改變。 方案二:依然使用最左邊的數碼管表示電梯上升和下降狀態,使用“∧”表示上升狀態,是同“∨“表示下降狀態,使用另外一個一個數碼管表示電梯此時所在的樓層,不過此時又八個按鍵來代表電梯的層數,使用k11代表1樓,k12代表2樓,k13代表3樓,k14代表4樓,k21代表5樓,k22代表6樓,k23代表7樓,k24代表8樓。 如果默認電梯在一樓,比如按下k22按鍵,數碼管則由1變化到6,此時是上升狀態。然后數碼管就顯示6,直至再次按鍵。如果按的是k13,則數碼管從6變化到3,此時是下降狀態。數碼管顯示3,直到再次按鍵才改變當前狀態。 2.2方案一的討論 2.2.1方案一的優點 1.方案一的思路十分清晰明了。僅有由1至8的上升狀態或者8至1的下降狀態,程序書寫比較簡單。 2.方案一對于初學者來說比較友好,會基礎C語言語句以及51單片機定時器的使用方法就可以比較輕松的做出程序。 3.因為上升過程中,僅計數8次,定時器的參數就可以使用一個宏定義的常數代替,定時器的程序也可以大大化簡。 2.2.2方案一的缺點 方案一最大的缺點是對于電梯的運行過程過于簡化,僅僅考慮了上升或者下降的兩個過程。而實際的電梯運行時,僅有在有人使用的時候才會運行,不然是會一直停靠在某層樓的。為了簡化過程編寫程序的便利而犧牲了電梯本來可以實現的功能,是這個方案最大的缺陷。 2.3方案二的討論 2.3.1方案的優點1.方案二是方案一的強化改良版本,基本可以實現真實電梯的功能 2.方案二可以按照所需要去的樓層數的不同而數碼管的變化不同,這是方案一所無法達到的。 3.方案二的思路也比較清晰,默認電梯在一樓,去了6樓之后便停在6樓,然后從6樓在去其他樓層,在停靠在某個樓層。 2.3.2方案二的缺點方案二最大的缺點是雖然思路清晰,但是編寫程序的過程還是比較復雜的。首先默認電梯在某樓,將此樓作為參數進入子函數1中,然后對8個按鍵哪個按鍵按下進行判斷,然后進入子程序2中,先判斷要去的樓層和現在所在的樓層的大小關系,有三種情況,對應三個條件語句。然后執行完子函數2之后,在將去的層數作為參數再次進入子函數1中。而且因為所去樓層不同,定時器的參數也會相應改變,編寫程序比較繁雜。
2.4兩種方法的比較以及選擇 根據實際編寫程序者的水平以及對于操作者水平的可行性來說,方案一對于新手來說相對友好了很多,不需要考慮過于復雜的情況只需要想一個相對來說很理想,電梯只從1樓上升到8樓,在每層樓只停相同的時間。而方案二則對于編寫者的水平要求就要高了很多,對于新手來說在兩天到三天過程幾乎是個不可能完成的任務,所以還是決定選擇方案一。
第三章 硬件電路設備及軟件流程代碼
3.1控制芯片簡介 本設計中,AT89S52 是Atmel公司生產的一種低功耗、高性能CMOS 8位微控制器,具有8 位在系統可編程Flash存儲器。AT89S52 使用Atme 公司高密度非易失性存儲器技術制造,與工業80C51 產品指令和引腳完全兼容。片上Flash 允許程序存儲器在系統可編程,也適于常規編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得AT89S52 為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。 AT89S52 具有PDIP、PLCC、TQFP3 種封裝形式以適用于不同的使用場合。 AT89S52是美國ATMEL公司生產的低電壓,高性能CMOS 8位單片機,內含2k字節的可反復擦寫的Flash只讀程序存儲器和128字節的隨機存取數據存儲器(RAM),其擦寫周期約1000次。器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,內置通用8位中央處理器和Flash存儲單元,功能強大。AT89S52單片機的工作電壓范圍較寬,可在2.7V~6V電壓范圍內工作。它的工作頻率為0Hz~24MHz,支持降至0Hz的靜態邏輯操作,并支持兩種可選的節電工作模式(低功耗空閑和掉電模式),空閑方式下停止CPU的工作,但允許RAM、定時/計數器、串行通信口及中斷系統繼續工作。掉電方式下保存RAM中的內容,但振蕩器停止工作并禁止其它所有部件工作直到下一個硬件復位。AT89S52還具有兩級加密程序存儲器,使用者可以根據需要對程序進行加密,實現版權保護的目的。考慮到在單片機的很多應用中,需要使用發光二極管(LED)進行指示,AT89S52的輸出端口被設計成可直接驅動LED,可以省去外加的驅動電路,節省資源[6]。 AT89S52內部資源主要有:2k字節Flash閃速存儲器,128字節內部RAM,15個I/O口線(其中P1是一個完整的8位雙向I/O口),兩個16位定時/計數器,一個5向量兩級中斷結構,一個全雙工串行通信口(可編程串行UART通道),精密模擬比較器,片內振蕩器以及時鐘電路。
AT89S52引腳如圖3.1所示。 圖3.1 AT89S52引腳圖
VCC:電源。 GND:地。 P0 口:P0 口是一個8 位漏極開路的雙向I/O 口。作為輸出口,每位能驅動8 個TTL邏輯電平。對P0 端口寫“1”時,引腳用做高阻抗輸入。當訪問外部程序和數據存儲器時,P0 口也被作為低8 位地址/數據復用。在這種模式下,P0 具有內部上拉電阻。在Flash編程時,P0 口也用來接收指令字節;在程序校驗時,輸出指令字節。在程序校驗時,需要外部上拉電阻。 P1 口:P1 口是一個具有內部上拉電阻的8 位雙向I/O 口,P1 輸出緩沖器能驅動4 個TT 邏輯電平。當對P1 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。當作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。此 外,P1.0 和P1.2 分別作為定時器/計數器2 的外部計數輸入(P1.0/T2)和定時器/計數器2的觸發輸入(P1.1/T2EX),具體如表1-1 所示。在Flash編程和校驗時,P1口接收低8 位地址字節。
表3-1 P1口引腳第二功能 | | | | | T2EX(定時器/計數器T2捕捉/重載觸發信號和方向控制) | | | | | | |
P2 口:P2 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動4 個TT 邏輯電平。對P2 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。當作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16 位地址讀取外部數據存儲器(如執行MOVX @DPTR)時,P2 口送出高8 位地址。在這種應用中,P2 口使用很強的內部上拉發送1。在使用8 位地址(如MOVX @RI)訪問外部數據存儲器時,P2口輸出P2鎖存器的內容。在Flash編程和校驗時,P2 口也接收高8位地址字節和一些控制信號。 P3 口:P3 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動4 個TT邏輯電平。對P3 端口寫“1”時,內部上拉電阻把端口拉高,此時可以作為輸入口使用。當作為輸入使用時,被外部拉低的引腳由于內部電阻的原因,將輸出電流(IIL)。P3 口也作為AT89S52 特殊功能(第二功能)使用,如表1-2所示。在Flash編程和校驗時,P3口也接收一些控制信號。
表3-2 P3口引腳第二功能
RST: 復位輸入。在晶振工作時,RST腳持續兩個機器周期高電平將使單片機復位。看門狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO 位可以使此功能無效。在DISRTO 默認狀態下,復位高電平有效。 ALE/PROG:地址鎖存控制信號(ALE)在訪問外部程序存儲器時,鎖存低8 位地址的輸出脈沖。在Flash編程時,此引腳(PROG)也用做編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調,在每次訪問外部數據存儲器時,ALE 脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0 位置“1”,ALE 操作將無效。這一位置“1”,ALE 僅在執行MOVX 或MOVC指令時有效。否則,ALE 將被微弱拉高。這個ALE 使能標志位(地址為8EH的SFR的第0 位)的設置對微控制器處于外部執行模式下無效。 PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。當AT89S52從外部程序存儲器執行外部代碼時,PSEN 在每個機器周期被激活兩次,而在訪問外部數據存儲器時,PSEN將不被激活。 EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH 的外部程序存儲器讀取指令,EA必須接GND。為了執行內部程序指令,EA應該接VCC。在Flash編程期間,EA也接收12伏VPP電壓。 XTAL1:振蕩器反相放大器和內部時鐘發生電路的輸入端。 XTAL2:振蕩器反相放大器的輸出端。
主程序流程圖如下圖所示:
圖3.2 主程序流程圖
3.2主程序代碼設計 根據流程圖,設計主程序代碼如下: 首先是主函數,主函數比較簡單,僅需判斷按鍵k1或者k2是否按下,來判斷對應的上升還是下降的狀態。 void main() { init(); while(1) { if(k1==0) //按下K1鍵,啟動定時器,進入子函數up中 { TR0=1; h=1; } if(h==1) { up(); }
if(k2==0) //按下K2鍵,啟動定時器,進入子函數down中 { TR0=1; h=0; } if(h==0) { down(); } } } 然后根據按鍵的結果進入對應的兩個子函數up或者down中。 下面就是這兩個子函數的程序: - void up()
- {
- W1=0;
- P0= DIG4_CODE[i]; //給右邊的數碼管附上相應的數字
- delay(1);
- W1=1;
- W2=0;
- P0= DIG1_CODE [0]; //給左邊的數碼管附上相應上升的標記。
- delay(1);
- W2=1;
- if(i==7) //上升到第八層的時候,停止定時器
- {TR0=0;}
- j=i+1;
- }
-
-
- void down()
- {
- W1=0;
- P0= DIG4_CODE [j-1]; //給右邊的數碼管附上相應的數字
- delay(1);
- W1=1;
- W2=0;
- P0= DIG1_CODE [1]; //給左邊的數碼管附上相應下降的標記
- delay(1);
- W2=1;
- if(j==1) //下降到第一層的時候,停止定時器
- {TR0=0;}
- i=j-1;
- }
復制代碼 第三部分就是定時器所相對應的函數。
程序如下:
- void time0()interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- num++;
- if(num==40) //計算一次5ms,40次恰好2S
- {
- num=0;
- j--;
- if(j==0)
- {
- j=8;
- }
-
- i++;
- if(i==8)
- {
- i=0;
- }
- }
- }
復制代碼
3.3功能測試經過測試發現完成了方案一所要完成的功能。 可以在由一樓上升到八樓過程中,按下下降按鍵則可以改變上升狀態變為下降狀態。然后在八樓到一樓的下降過程中,按下上升按鍵則可以改變下降狀態為上升狀態。在任意樓層按下上升或者下降按鍵,都可以產生相應的上升或者下降的狀態。 這說明此次的實驗比較成功,因為程序比較簡單,使用的功能也比較簡單讓我比較容易的完成了該實驗。 圖3.3 測試實物圖
圖3.4 測試實物圖
總結
經過調試之后,使用單片機來模擬電梯的運行過程的是可行的,但是由于我選用的是方案一,模型比較簡單,功能也較為單一。僅能上下升降而不可以選擇任意的樓層停止。 改進的話就應該如同方案二一樣,設計多個按鍵就可以對不同樓層進行操作。但是由于自身水平有限,對于該段操作流程理解的邏輯流程還是有點些亂,編寫的程序也無法使用,所以在接下來的學習中,應該根據自身的對于單片機掌握的情況對單片機進行一些有針對性的學習。因為51單片機確實比較基礎,僅有8位IO口,比較容易掌握。難的是自己的邏輯思維能力和C語言應用能力,能講模型轉化為程序編輯出來。在參考資料的過程中,有很多想法也設計了很多程序但是這些程序都有著很多的缺陷僅能完成自己想做的部分功能。 還有需要改進的地方就是編寫的時候很多可以用宏定義定義的常數都沒有用宏定義去定義參數。 總的來說,這段時間對于程序的編寫和對于方案的設計有一定程度的提升自身的水平。 附錄2 原理圖 
單片機源碼:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit W1=P1^0; //對兩個數碼管進行位選
- sbit W2=P1^7;
- sbit k1=P3^2; //對兩個按鍵進行位選
- sbit k2=P3^3;
- uchar i,j,a,b,n,k,ge,temp1;
- uchar code DIG4_CODE[]={0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80}; //定義樓層數
- uchar code DIG1_CODE[]={0x89, 0xc7}; //定義上升或下降的符號
- void delay(uchar z);
- void up();
- void down();
- void init() //給定時器賦初值
- {
- i=0;
- j=8;
- b=0;
- TMOD=0x01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- ET0=1;
- EA=1;
- TR0=0;
- }
-
- void main()
- {
- init();
- while(1)
- {
- if(k1==0) //按下K1鍵,啟動定時器,進入子函數up中
- {
- TR0=1;
- h=1;
- }
- if(h==1)
- up();
- if(k2==0) //按下K2鍵,啟動定時器,進入子函數down中
- {
- TR0=1;
- h=0;
- }
- if(h==0)
- down();
- }
- }
- void up() //兩個數碼管不同時點亮,才可以讓數碼管顯示的數不同
- {
- W1=0;
- P0= DIG4_CODE[i];
- delay(1);
- W1=1;
- W2=0;
- P0= DIG1_CODE[0];
- delay(1);
- W2=1;
- if(i==7)
- {TR0=0;}
- j=i+1;
- }
-
- void down()
- {
- W1=0;
- P0=DIG4_CODE [j-1];
- delay(1);
- W1=1;
- W2=0;
- P0=DIG1_CODE [1];
- delay(1);
- W2=1;
- if(j==1)
- {TR0=0;}
- i=j-1;
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- void time0()interrupt 1
- {
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256; //計算一次5ms,40次恰好2S
- n++;
- if(n==40)
- {
- n=0;
- j--;
- if(j==0)
- j=8;
- i++;
- if(i==8) //數碼管運行8次,i自動清零
- i=0;
- }
- }
復制代碼
完整的Word格式文檔51黑下載地址:
正文.doc
(838.5 KB, 下載次數: 99)
2018-5-7 10:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|