基于單片機的電梯仿真程序課程設計報告書_第1頁
基于單片機的電梯仿真程序課程設計報告書_第2頁
基于單片機的電梯仿真程序課程設計報告書_第3頁
基于單片機的電梯仿真程序課程設計報告書_第4頁
基于單片機的電梯仿真程序課程設計報告書_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 PAGE57 / NUMPAGES57 目錄前言1現(xiàn)代電梯概述3硬件部分設計6軟件部分設計12電梯運行界面52設計總結與感悟56參考文獻57電梯仿真程序一、前言: 本電梯仿真程序采用的是一個基于單片機與其相關外設,編程語言采用匯編與C語言結合的方式,通過矩陣鍵盤線反選法輸入樓層,上、下行等控制信號,經IO口讀入,進行相關實時控制,軟硬件結合的仿真系統(tǒng),輸出設備包括由CD4511驅動顯示樓層的7段數(shù)碼管,顯示實時信息的顯示屏LCD12864,由PWM控制顯示電梯門開關的舵機,以與由IO口間接控制的驅動電機正反轉雙橋驅動電路等幾個部分組成??梢詫崿F(xiàn)真實電梯中,任意層呼叫,目的層到達按要求順序到達

2、,開關門,無輸入自動回1層等一系列功能,并實時顯示當前電梯運行狀態(tài),關于真實電梯門控光幕裝置,電機自動抱閘平層等部分,由于知識不足,沒有足一實現(xiàn),但會在接下來的專業(yè)知識學習過程中不斷完善,同時也希望得到程老師的指導。二、現(xiàn)代電梯概述:電梯是一種以電動機為動力的垂直升降機,裝有箱狀吊艙,用于多層建筑乘人或載運貨物。也有臺階式,踏步板裝在履帶上連續(xù)運行,俗稱自動電梯。 服務于規(guī)定樓層的固定式升降設備。它具有一個轎廂,運行在至少兩列垂直的或傾斜角小于15的剛性導軌之間。轎廂尺寸與結構形式便于乘客出入或裝卸貨物,本次微機課程設計電梯仿真選用的是垂直升降梯。2.1、電梯功能 HYPERLINK :/ba

3、ike.so /doc/5336303.html 現(xiàn)代電梯主要由曳引機(絞車)、導軌、對重裝置、安全裝置(如限速器、安全鉗和緩沖器等)、信號操縱系統(tǒng)、轎廂與廳門等組成。這些部分分別安裝在建筑物的井道和機房中。通常采用 HYPERLINK :/baike.so /doc/5684170.html t :/baike.so /doc/_blank 鋼絲繩摩擦傳動,鋼絲繩繞過曳引輪,兩端分別連接轎廂和平衡重,電動機驅動曳引輪使轎廂升降。電梯要求安全可靠、輸送效率高、平層準確和乘坐舒適等。電梯的基本參數(shù)主要有額定載重量、可乘人數(shù)、額定速度、轎廂外廓尺寸和井道型式等。簡單使用方法(緊急情況下面有解決方法

4、)載人電梯都是微機控制的智能化、 HYPERLINK :/baike.so /doc/5575191.html t :/baike.so /doc/_blank 自動化設備,不需要專門的人員來操作 電梯電梯結構圖 電梯部結構圖駕駛,普通乘客只要按下列程序乘坐和操作電梯即可。2.2、運行過程:1、在乘梯樓層電梯入口處,根據(jù)自己上行或下行的需要,按上方向或下方向箭頭按鈕,只要按鈕上的燈亮,就說明你的呼叫已被記錄,只要等待電梯到來即可。2、電梯到達開門后,先讓轎廂人員走出電梯,然后呼梯者再進入電梯轎廂。進入轎廂后,根據(jù)你需要到達的樓層,按下轎廂操縱盤上相應的數(shù)字按鈕。同樣,只要該按鈕燈亮,則說明你的

5、選層已被記錄;此時不用進行其他任何操作,只要等電梯到達你的目的層??考纯伞?、電梯行駛到你的目的層后會自動開門,此時按順序走出電梯即結束了一個乘梯過程。三、硬件部分設計3.1、總電路圖:3.2、單片機最小系統(tǒng):單片機最小系統(tǒng),或者稱為最小應用系統(tǒng),是指用最少的元件組成的單片機可以工作的系統(tǒng).對51系列單片機來說,最小系統(tǒng)一般應該包括:單片機、晶振電路、復位電路.下面給出一個51單片機的最小系統(tǒng)電路圖.3.3、矩陣鍵盤:在 HYPERLINK :/baike.baidu /view/7402.htm t :/baike.baidu /view/_blank 鍵盤中按鍵數(shù)量較多時,為了減少I/O口

6、的占用,通常將按鍵排列成 HYPERLINK :/baike.baidu /view/10337.htm t :/baike.baidu /view/_blank 矩陣形式。在 HYPERLINK :/baike.baidu /view/10337.htm t :/baike.baidu /view/_blank 矩陣式 HYPERLINK :/baike.baidu /view/7402.htm t :/baike.baidu /view/_blank 鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個按鍵加以連接。這樣,一個端口(如P1口)就可以構成4*4=16個按鍵,1鍵盤的工作

7、原理: 按鍵設置在行、列線交點上,行、列線分別連接到按鍵開關的 兩端。行線通過上拉電阻接到+5V 電源上。無按鍵按下時,行線處 于高電平的狀態(tài), 而當有按鍵按下時, 行線電平與此行線相連的列 線電平決定。2行列掃描法原理:第一步, 使行線為 HYPERLINK :/baike.baidu /view/3281.htm t :/baike.baidu /view/_blank 編程的輸入線,列線是輸出線,拉低所有的列線, 判斷行線的變化,如果有按鍵按下,按鍵按下的對應行線被拉低,否則 所有的行線都為高電平。第二步, 在第一步判斷有鍵按下后, 延時 10ms 消除機械抖動,再次讀取行值,如果此行線

8、還處于低電平狀態(tài)則進入下 一步,否則返回第一步重新判斷。第三步,開始掃描按鍵位置,采用逐 行掃描,每間隔 1ms 的時間,分別拉低第一列,第二列,第三列,第四 列,無論拉低哪一列其他三列都為高電平,讀取行值找到按鍵的位置, 分別把行值和列值儲存在 HYPERLINK :/baike.baidu /view/6159.htm t :/baike.baidu /view/_blank 寄存器里。3.4、CD4511當前樓層顯示CD4511 是一片 CMOS BCD-鎖存/7 段譯碼/驅動器,用于驅動共陰極 LED (數(shù)碼管)顯示器的 BCD 碼-七段碼譯碼器。它具有BCD轉換、消隱和鎖存控制、七段

9、譯碼與驅動功能的CMOS電路能提供較大的拉電流??芍苯域寗庸碴嶭ED數(shù)碼管。以下是CD4511數(shù)碼管驅動原理電路圖。是CD4511實現(xiàn)LED與單片機的并行接口方法。3.5、LCD12864不帶中文字庫的128X64 是一種 HYPERLINK :/baike.so /doc/6429114.html t :/baike.so /doc/_blank 具有4 位/8 位并行、2 線或3 線串行多種接口方式,部含有國標一級、二級簡體 中文字庫的點陣圖形液晶顯示 HYPERLINK :/baike.so /doc/6764099.html t :/baike.so /doc/_blank 模塊;其顯

10、示分辨率為12864, 置8192 個16*16 點漢字,和128 個16*8 點ASCII 字符 集.利用該模塊 HYPERLINK :/baike.so /doc/5159871.html t :/baike.so /doc/_blank 靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面。可以顯示84 行1616 點 陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該模塊構成的液晶顯示方案與同類型的圖形點陣液晶 顯示模塊相比,不論硬件電路結構或顯示程序都要簡潔得多,且該模塊的價格也略低于一樣點陣的圖形液晶模塊。3.6、電機雙橋驅動系統(tǒng)一、H橋驅動 HYPER

11、LINK :/bbs.elecfans /zhuti_dianlu_1.html t :/bbs.elecfans /_blank 電路 圖4.12中所示為一個典型的直流電機控制電路。電路得名于“H橋驅動電路”是因為它的形狀酷似字母H。4個三極管組成H的4條垂直腿,而電機就是H中的橫杠(注意:圖4.12與隨后的兩個圖都只是示意圖,而不是完整的電路圖,其中三極管的驅動電路沒有畫出來)。如圖所示,H橋式電機驅動電路包括4個三極管和一個電機。要使電機運轉,必須導通對角線上的一對三極管。根據(jù)不同三極管對的導通情況,電流可能會從左至右或從右至左流過電機,從而控制電機的轉向。圖4.12 H橋驅動電路 要使

12、電機運轉,必須使對角線上的一對三極管導通。例如,如圖4.13所示,當Q1管和Q4管導通時,電流就從 HYPERLINK :/bbs.elecfans /zhuti_power_1.html t :/bbs.elecfans /_blank 電源正極經Q1從左至右穿過電機,然后再經Q4回到電源負極。按圖中電流箭頭所示,該流向的電流將驅動電機順時針轉動。當三極管Q1和Q4導通時,電流將從左至右流過電機,從而驅動電機按特定方向轉動(電機周圍的箭頭指示為順時針方向)。圖4.13 H橋電路驅動電機順時針轉動圖4.14所示為另一對三極管Q2和Q3導通的情況,電流將從右至左流過電機。當三極管Q2和Q3導通時

13、,電流將從右至左流過電機,從而驅動電機沿另一方向轉動(電機周圍的箭頭表示為逆時針方向)。圖4.14 H橋驅動電機逆時針轉動二、使能控制和方向邏輯 驅動電機時,保證H橋上兩個同側的三極管不會同時導通非常重要。如果三極管Q1和Q2同時導通,那么電流就會從正極穿過兩個三極管直接回到負極。此時,電路中除了三極管外沒有其他任何負載,因此電路上的電流就可能達到最大值(該電流僅受電源性能限制),甚至燒壞三極管?;谏鲜鲈?,在實際驅動電路常要用硬件電路方便地控制三極管的開關。 圖4.155 所示就是基于這種考慮的改進電路,它在基本H橋電路的基礎上增加了4個與門和2個非門。4個與門同一個“使能”導 HYPER

14、LINK :/bbs.elecfans /zhuti_wireless_1.html t :/bbs.elecfans /_blank 通信號相接,這樣,用這一個信號就能控制整個電路的開關。而2個非門通過提供一種方向輸人,可以保證任何時候在H橋的同側腿上都只有一個三極管能導通。(與本節(jié)前面的示意圖一樣,圖4.15所示也不是一個完整的電路圖,特別是圖中與門和三極管直接連接是不能正常工作的。)圖4.15 具有使能控制和方向邏輯的H橋電路 采用以上方法,電機的運轉就只需要用三個信號控制:兩個方向信號和一個使能信號。如果DIRL信號為0,DIRR信號為1,并且使能信號是1,那么三極管Q1和Q4導通,電

15、流從左至右流經電機(如圖4.16所示);如果DIRL信號變?yōu)?,而DIRR信號變?yōu)?,那么Q2和Q3將導通,電流則反向流過電機。四、軟件部分設計:4.1、程序框圖顯示提示,開發(fā)者、版本信息硬件上電待命鍵盤輸入目的樓層記錄并該樓層標志位否結束鍵是否按下 是程序開始運行While(1). 運行至最后目 的樓層繼續(xù)否鍵盤掃描電梯門,電機運行,延時lcd顯示,7段數(shù)碼管顯示 若相等電機停轉,電梯門開,延時lcd顯示,7段數(shù)碼管顯示當前樓層標志位加一并與存儲樓層對比電機運行,到達下一層否否是是結束待命4.2、C51單片機匯編、C語言混編程序:; 電梯。SRC generated from: 電梯.c;

16、COMPILER INVOKED BY:; C:KeilC51BINC51.EXE 電梯.c BROWSE DEBUG OBJECTEXTEND$NOMOD51NAME電梯P0DATA080HP1DATA090HP2DATA0A0HP3DATA0B0HT0BIT0B0H.4ACBIT0D0H.6T1BIT0B0H.5T2BIT090H.0EABIT0A8H.7IEDATA0A8HclockBIT0B0H.0EXF2BIT0C8H.6RDBIT0B0H.7ESBIT0A8H.4IPDATA0B8HRIBIT098H.0INT0BIT0B0H.2CYBIT0D0H.7TIBIT098H.1INT1

17、BIT0B0H.3RCAP2HDATA0CBHPSBIT0B8H.4SPDATA081HT2EXBIT090H.1OVBIT0D0H.2RCAP2LDATA0CAHC_T2BIT0C8H.1WRBIT0B0H.6RCLKBIT0C8H.5TCLKBIT0C8H.4SBUFDATA099HPCONDATA087HSCONDATA098HTMODDATA089HTCONDATA088HIE0BIT088H.1IE1BIT088H.3BDATA0F0HCP_RL2BIT0C8H.0ACCDATA0E0Hservo_doorBIT0B0H.7ET0BIT0A8H.1ET1BIT0A8H.3TF0BIT

18、088H.5ET2BIT0A8H.5TF1BIT088H.7TF2BIT0C8H.7RB8BIT098H.2TH0DATA08CHEX0BIT0A8H.0IT0BIT088H.0TH1DATA08DHTB8BIT098H.3EX1BIT0A8H.2IT1BIT088H.2TH2DATA0CDHPBIT0D0H.0SM0BIT098H.7TL0DATA08AHSM1BIT098H.6TL1DATA08BHSM2BIT098H.5TL2DATA0CCHPT0BIT0B8H.1PT1BIT0B8H.3RS0BIT0D0H.3PT2BIT0B8H.5TR0BIT088H.4RS1BIT0D0H.4TR

19、1BIT088H.6TR2BIT0C8H.2PX0BIT0B8H.0PX1BIT0B8H.2DPHDATA083HDPLDATA082HEXEN2BIT0C8H.3RENBIT098H.4T2CONDATA0C8HRXDBIT0B0H.0TXDBIT0B0H.1F0BIT0D0H.5PSWDATA0D0H?PR?_delay?SMARTCAR SEGMENT CODE ?PR?_ABS?SMARTCAR SEGMENT CODE ?PR?keysort?SMARTCAR SEGMENT CODE ?PR?keycheck?SMARTCAR SEGMENT CODE ?PR?sys_init?S

20、MARTCAR SEGMENT CODE ?PR?_BCD?SMARTCAR SEGMENT CODE ?PR?main?SMARTCAR SEGMENT CODE ?PR?TIME_BASE?SMARTCAR SEGMENT CODE ?C_INITSEG SEGMENT CODE ?BI?SMARTCAR SEGMENT BIT ?DT?SMARTCAR SEGMENT DATA EXTRNCODE (?C_STARTUP)PUBLICfloor_up_2PUBLICfloor_up_1PUBLICrankkeyPUBLICopendoorPUBLICiPUBLICup_flagPUBLI

21、CrowPUBLICfloor_down_5PUBLICfloor_down_4PUBLICfloor_down_3PUBLICfloor_down_2PUBLICpressflagPUBLICkeyPUBLICkey_flagPUBLICstop_flagPUBLICtempPUBLICdown_flagPUBLICfloor_flag_5PUBLICfloor_flag_4PUBLICfloor_flag_3PUBLICfloor_flag_2PUBLICfloor_flag_1PUBLICstartPUBLICclose_doorPUBLICrankPUBLICcountPUBLICro

22、wkeyPUBLICfloor_up_4PUBLICfloor_up_3PUBLICTIME_BASEPUBLICmainPUBLIC_BCDPUBLICsys_initPUBLICkeycheckPUBLICkeysortPUBLIC_ABSPUBLIC_delayRSEG ?BI?SMARTCAR floor_up_3: DBIT 1 floor_up_4: DBIT 1 close_door: DBIT 1 start: DBIT 1 floor_flag_1: DBIT 1 floor_flag_2: DBIT 1 floor_flag_3: DBIT 1 floor_flag_4:

23、DBIT 1 floor_flag_5: DBIT 1 down_flag: DBIT 1 stop_flag: DBIT 1 pressflag: DBIT 1 floor_down_2: DBIT 1 floor_down_3: DBIT 1 floor_down_4: DBIT 1 floor_down_5: DBIT 1 up_flag: DBIT 1 opendoor: DBIT 1 floor_up_1: DBIT 1 floor_up_2: DBIT 1RSEG ?DT?SMARTCAR rowkey: DS 1 count: DS 2 rank: DS 1 temp: DS 1

24、 key_flag: DS 16 key: DS 1 row: DS 1 i: DS 1 rankkey: DS 1RSEG ?C_INITSEGDB002HDBcountDW00000HDB010HDBkey_flagDB000HDB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000HDB 000H,000H,000H,000H,000HDB001HDBkeyDB000HDB001HDBiDB000HDB0C1H, pressflag + 000H; bit-initDB0C1H, up_flag + 000H; bit-initDB0C1H,

25、 down_flag + 000H; bit-initDB0C1H, stop_flag + 000H; bit-initDB001HDBrowkeyDB000HDB001HDBrankkeyDB000HDB001HDBtempDB000HDB001HDBrowDB000HDB001HDBrankDB000H DB0C1H, floor_flag_1 + 000H; bit-init DB0C1H, floor_flag_2 + 000H; bit-initDB0C1H, floor_flag_3 + 000H; bit-initDB0C1H, floor_flag_4 + 000H; bit

26、-initDB0C1H, floor_flag_5 + 000H; bit-initDB0C1H, floor_down_5 + 000H; bit-initDB0C1H, floor_up_4 + 000H; bit-initDB0C1H, floor_down_4 + 000H; bit-initDB0C1H, floor_up_3 + 000H; bit-initDB0C1H, floor_down_3 + 000H; bit-initDB0C1H, floor_up_2 + 000H; bit-initDB0C1H, floor_down_2 + 000H; bit-initDB0C1

27、H, floor_up_1 + 000H; bit-initDB0C1H, opendoor + 000H; bit-initDB0C1H, close_door + 000H; bit-initDB0C1H, start + 000H; bit-init; /晶振 12MHz 6T模式,總線頻率2MHz 指令0.5us; #pragma src; #include /89C52的頭文件; ; #define T0_HIGH 0 xff /T0計時器寄存器初值; #define T0_LOW 0 x9b /溢出計數(shù)80個,定時周期80*0.25us=20us; /為了保證主程序正常運行,定時器

28、計數(shù)最好不要小于80個; ; #define keynumber 16 16個按鍵標志; #define KEYIO P2 4*4鍵盤輸入; #define output P1 lcd12864數(shù)據(jù)D0D7; #define nobcd P0 BCD端口輸出; ; sbit clock=P30; lcd12864時鐘輸出端; sbit servo_door=P37; 舵機控制門輸出端口; int count=0; ; char key_flagkeynumber=0; 按鍵標志位; ; char key=0; char i=0; ; bit pressflag=0; bit up_flag=0

29、; bit down_flag=0; 控制信號標志位; bit stop_flag=0; ; ; ; ; ; char rowkey=0; 鍵盤反選變量設置; char rankkey=0; char temp=0; char row=0; char rank=0; ; bit floor_flag_1=0;、 各樓層標志位; bit floor_flag_2=0; bit floor_flag_3=0; bit floor_flag_4=0; bit floor_flag_5=0; bit floor_down_5=0; bit floor_up_4=0; bit floor_down_4=

30、0; bit floor_up_3=0; bit floor_down_3=0; bit floor_up_2=0; bit floor_down_2=0; bit floor_up_1=0; bit opendoor=0; bit close_door=0; bit start=0; ; /; void delay(unsigned int i)/延時函數(shù)_delay:USING0; SOURCE LINE # 56; Variable i?040 assigned to Register R6/R7 ; ; SOURCE LINE # 57; unsigned char j; for(;i

31、0;i-); SOURCE LINE # 59?C0001:SETB CMOV A,R7SUBB A,#00HMOV A,R6SUBB A,#00HJC ?C0007; for(j=0;j=0) return i; SOURCE LINE # 65CLR CMOV A,R6XRL A,#080HSUBB A,#080HJC ?C0008RET ?C0008:; else return -i; SOURCE LINE # 66CLR CCLR ASUBB A,R7MOV R7,ACLR ASUBB A,R6MOV R6,A; ; SOURCE LINE # 67?C0009:RET ; END

32、OF _ABS; /; void keysort(void)RSEG ?PR?keysort?SMARTCARkeysort:USING0; SOURCE LINE # 69; ; SOURCE LINE # 70; for(i=0;i16;i+); SOURCE LINE # 71CLR AMOV i,A?C0011:; ; SOURCE LINE # 72; if(key=i) key_flagi=1; SOURCE LINE # 73MOV A,keyCJNE A,i,?C0013MOV A,#LOW (key_flag) 讀并且記錄標志位函數(shù)ADD A,iMOV R0,AMOV R0,

33、#01H; ; SOURCE LINE # 74?C0013:INC iMOV A,iCJNE A,#010H,?C0011?C0012:; ; for(i=0;i4); SOURCE LINE # 132MOV A,rankkeyMOV R0,#04H?C0114:MOV C,ACC.7RRC ADJNZ R0,?C0114MOV rankkey,A; ; ; SOURCE LINE # 134; for(i=0;i=3;i+); SOURCE LINE # 135CLR AMOV R4,A?C0057:; ; SOURCE LINE # 136; temp=0 x01; SOURCE LI

34、NE # 137MOV temp,#01H; temp=(tempi); SOURCE LINE # 138MOV A,tempMOV R0,AR4INC R0SJMP ?C0116?C0115:CLR CRLC A?C0116:DJNZ R0,?C0115MOV temp,A; if(rowkey&temp)!=0) row=i+1;i=4; SOURCE LINE # 139ANL A,rowkeyJZ ?C0059MOV A,R4INC AMOV row,AMOV R4,#04H; ; SOURCE LINE # 140?C0059:INC R4SETB CMOV A,R4XRL A,#

35、080HSUBB A,#083HJC ?C0057?C0058:; ; ; for(i=0;i=3;i+); SOURCE LINE # 143CLR AMOV R4,A?C0061:; ; SOURCE LINE # 144; temp=0 x01; SOURCE LINE # 145MOV temp,#01H; temp=(tempi); SOURCE LINE # 146MOV A,tempMOV R0,AR4INC R0SJMP ?C0118?C0117:CLR CRLC A?C0118:DJNZ R0,?C0117MOV temp,A; if(rankkey&temp)!=0) ra

36、nk=i+1;i=4; SOURCE LINE # 147ANL A,rankkeyJZ ?C0063MOV A,R4INC AMOV rank,AMOV R4,#04H; ; SOURCE LINE # 148?C0063:INC R4SETB CMOV A,R4XRL A,#080HSUBB A,#083HJC ?C0061?C0062:; ; if(row=1) ; SOURCE LINE # 150MOV A,rowCJNE A,#01H,?C0065; ; SOURCE LINE # 151; if(rank=1) key=0; SOURCE LINE # 152MOV A,rank

37、CJNE A,#01H,?C0066CLR AMOV key,A?C0066:; if(rank=2) key=1; SOURCE LINE # 153MOV A,rankCJNE A,#02H,?C0067MOV key,#01H?C0067:; if(rank=3) key=2; SOURCE LINE # 154MOV A,rankCJNE A,#03H,?C0068MOV key,#02H?C0068:; if(rank=4) key=3; SOURCE LINE # 155MOV A,rankCJNE A,#04H,?C0065MOV key,#03H; ; SOURCE LINE

38、# 156?C0065:; if(row=2); SOURCE LINE # 157MOV A,rowCJNE A,#02H,?C0070; ; SOURCE LINE # 158; if(rank=1) key=4; SOURCE LINE # 159MOV A,rankCJNE A,#01H,?C0071MOV key,#04H?C0071:; if(rank=2) key=5; SOURCE LINE # 160MOV A,rankCJNE A,#02H,?C0072MOV key,#05H?C0072:; if(rank=3) key=6; SOURCE LINE # 161MOV A

39、,rankCJNE A,#03H,?C0073MOV key,#06H?C0073:; if(rank=4) key=7; SOURCE LINE # 162MOV A,rankCJNE A,#04H,?C0070MOV key,#07H; ; SOURCE LINE # 163?C0070:; if(row=3); SOURCE LINE # 164MOV A,rowCJNE A,#03H,?C0075; ; SOURCE LINE # 165; if(rank=1) key=8; SOURCE LINE # 166MOV A,rankCJNE A,#01H,?C0076MOV key,#0

40、8H?C0076:; if(rank=2) key=9; SOURCE LINE # 167MOV A,rankCJNE A,#02H,?C0077MOV key,#09H?C0077:; if(rank=3) key=10; SOURCE LINE # 168MOV A,rankCJNE A,#03H,?C0078MOV key,#0AH?C0078:; if(rank=4) key=11; SOURCE LINE # 169MOV A,rankCJNE A,#04H,?C0075MOV key,#0BH; ; SOURCE LINE # 170?C0075:; if(row=4); SOU

41、RCE LINE # 171MOV A,rowCJNE A,#04H,?C0080; ; SOURCE LINE # 172; if(rank=1) key=12; SOURCE LINE # 173MOV A,rankCJNE A,#01H,?C0081MOV key,#0CH?C0081:; if(rank=2) key=13; SOURCE LINE # 174MOV A,rankCJNE A,#02H,?C0082MOV key,#0DH?C0082:; if(rank=3) key=14; SOURCE LINE # 175MOV A,rankCJNE A,#03H,?C0083MO

42、V key,#0EH?C0083:; if(rank=4) key=15; SOURCE LINE # 176MOV A,rankCJNE A,#04H,?C0080MOV key,#0FH; ; SOURCE LINE # 177?C0080:; rank=0; SOURCE LINE # 178CLR AMOV rank,A; row=0; SOURCE LINE # 179MOV row,A; rowkey=0; SOURCE LINE # 180MOV rowkey,A; rankkey=0; ; SOURCE LINE # 181MOV rankkey,A; ; SOURCE LIN

43、E # 182; ; SOURCE LINE # 183?C0085:; while(P2!=0 x0f); SOURCE LINE # 184MOV A,P2CJNE A,#0FH,?C0085; ; SOURCE LINE # 185; /delay(5); ; SOURCE LINE # 187?C0086:; return key; SOURCE LINE # 188MOV R7,key; ; ; SOURCE LINE # 190?C0087:RET ; END OF keycheck; void sys_init(void) 單片機IO口初始化RSEG ?PR?sys_init?S

44、MARTCARsys_init:; SOURCE LINE # 191; ; SOURCE LINE # 192; /IO口設置; ; ; ; ; /定時器設置 ; ; TMOD=0 x11; /定時器0方式1; SOURCE LINE # 200MOV TMOD,#011H; TH0=T0_HIGH; /定時器賦初值; SOURCE LINE # 201MOV TH0,#0FFH; TL0=T0_LOW ; SOURCE LINE # 202MOV TL0,#09BH; ; TR0=1; /定時器運行 ; SOURCE LINE # 204SETB TR0; ET0=1; /開定時器中斷;

45、SOURCE LINE # 205SETB ET0; EA=1; /開總中斷 ; SOURCE LINE # 206SETB EA; ; SOURCE LINE # 207RET ; END OF sys_init; ; unsigned char BCD(char keyp)RSEG ?PR?_BCD?SMARTCAR_BCD:USING0; SOURCE LINE # 209; Variable keyp?544 assigned to Register R7 ; ; SOURCE LINE # 210; if(keyp=0 x00) keyp=0 x00; SOURCE LINE # 2

46、11MOV A,R7JNZ ?C0089MOV R7,A?C0089:; if(keyp=0 x01) keyp=0 x01; ; SOURCE LINE # 212CJNE R7,#01H,?C0090MOV R7,#01H?C0090:; if(keyp=0 x02) keyp=0 x02; ; SOURCE LINE # 213CJNE R7,#02H,?C0091MOV R7,#02H?C0091:; if(keyp=0 x03) keyp=0 x03; ; SOURCE LINE # 214CJNE R7,#03H,?C0092MOV R7,#03H?C0092:; if(keyp=

47、0 x04) keyp=0 x04; ; SOURCE LINE # 215CJNE R7,#04H,?C0093MOV R7,#04H?C0093:; if(keyp=0 x05) keyp=0 x05; ; SOURCE LINE # 216CJNE R7,#05H,?C0094MOV R7,#05H?C0094:; if(keyp=0 x06) keyp=0 x06; ; SOURCE LINE # 217CJNE R7,#06H,?C0095MOV R7,#06H?C0095:; if(keyp=0 x07) keyp=0 x07; ; SOURCE LINE # 218CJNE R7

48、,#07H,?C0096MOV R7,#07H?C0096:; if(keyp=0 x08) keyp=0 x08; ; SOURCE LINE # 219CJNE R7,#08H,?C0097MOV R7,#08H?C0097:; if(keyp=0 x09) keyp=0 x09; SOURCE LINE # 220CJNE R7,#09H,?C0098MOV R7,#09H?C0098:; ; if(keyp=0 x0a) keyp=0 x10; ; SOURCE LINE # 222CJNE R7,#0AH,?C0099MOV R7,#010H?C0099:; ; if(keyp=0

49、x0b) keyp=0 x11; ; SOURCE LINE # 224CJNE R7,#0BH,?C0100MOV R7,#011H?C0100:; if(keyp=0 x0c) keyp=0 x12; ; SOURCE LINE # 225CJNE R7,#0CH,?C0101MOV R7,#012H?C0101:; if(keyp=0 x0d) keyp=0 x13; ; SOURCE LINE # 226CJNE R7,#0DH,?C0102MOV R7,#013H?C0102:; if(keyp=0 x0e) keyp=0 x14; ; SOURCE LINE # 227CJNE R

50、7,#0EH,?C0103MOV R7,#014H?C0103:; if(keyp=0 x0f) keyp=0 x15; ; SOURCE LINE # 228CJNE R7,#0FH,?C0104MOV R7,#015H?C0104:; ; return keyp; SOURCE LINE # 230; ; SOURCE LINE # 231?C0105:RET ; END OF _BCD; ; /; void main(void) 主函數(shù) main:USING0; SOURCE LINE # 234; ; SOURCE LINE # 235; sys_init(); /初始化; SOURC

51、E LINE # 236LCALLsys_init?C0106:; while(1); SOURCE LINE # 237; ; SOURCE LINE # 238; keycheck(); SOURCE LINE # 239LCALLkeycheck; nobcd=key; SOURCE LINE # 240MOV P0,key; output=BCD(key); SOURCE LINE # 241MOV R7,keyLCALL_BCDMOV P1,R7; ; ; SOURCE LINE # 243SJMP ?C0106; END OF mainCSEGAT0000BHLJMPTIME_BASE; ; /; void TIME_BASE(void) interrupt 1 using 1 /定時器生成控制PWMRSEG ?PR?TIME_BASE?SMARTCARUSING1TIME_BASE:PUSH ACCPUSH PSW; SOURCE LINE # 246; ; TH0=T0_HIGH; /賦初值 ; SOURCE LINE # 248MOV TH0,#0FFH; TL0=T0_LOW ; SOURCE LINE # 249MOV TL0,#09BH; count+; SOURCE LINE #

溫馨提示

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

評論

0/150

提交評論