自動化科學與工程學院
《微機原理與應用》課程設計報告
多功能密碼鎖的設計
專業(yè): 自動化科學與工程學院
目錄
一、目的3
二、內容3
三、設計任務3
四、方案選擇及原理3
五、所用器件3
主要器件簡介4
六、原理圖7
1、8086與8255A連接7
2、 8255A的A口、C口與矩陣鍵盤連接7
3、8255A的A口、B口與數(shù)碼管的連接7
4、8086與8253連接8
5、完整電路圖9
七、軟件設計思路10
八、流程圖11
1、主程序11
2、子程序12
九、程序代碼14
十、設計中的難點23
十一、收獲及體會24
十二、參考文獻25
一、目的 - 了解和掌握8086、8255及8253,等接口芯片以及LED顯示器的原理和功能;
- 能用這些接口芯片構建一個簡單的系統(tǒng)控制對象,
- 掌握接口電路的綜合設計與使用;
- 通過自己動手,進一步了解計算機得工作原理,接口技術,提高計算機硬件,軟件綜合應用能力,即對微機原理,接口技術,匯編語言程序設計進行綜合訓練。
二、內容 密碼鎖在輸入密碼正確的條件下輸出開鎖電平,控制電控鎖開啟,同 顯示00字樣。當輸入密碼錯誤時,發(fā)出錯誤警告聲音,同時顯示FF字樣。當六次誤碼輸入的條件下,產(chǎn)生報警電平報警。還可以實現(xiàn)對密碼的修改,修改成功后,蜂鳴器發(fā)出確認音。 三、設計任務 1、選用8086和適當?shù)拇鎯ζ骷敖涌谛酒瓿上鄳墓δ堋?/font> 2、用LED顯示器顯示電子鎖的當前狀態(tài)。 3、畫出詳細的硬件連接圖。 4、給出程序設計思路、畫出軟件流程圖。 5、給出地址分配表。 6、給出所有程序清單并加上必要注釋。 7、完成設計說明書(列出參考文獻,所用器件型號)。 四、方案選擇及原理 這次的設計要求是在密碼輸入正確時輸出開鎖電平和顯示“00”,密碼錯誤時顯示“FF”和蜂鳴器發(fā)出報警聲音等,我們采用8255A的A口低四位和C口的低三位組成4x3的矩陣鍵盤,同時A口的低六位為選管;B口作為顯示器的輸出;C口高四位的PC4口輸出開鎖電平,對于6次密碼錯誤輸入,PC5口輸出報警電平。用8253計數(shù)器產(chǎn)生警告音和確認音。用蜂鳴器發(fā)聲次數(shù)來區(qū)分確認和警告聲音,一聲表示確認,三聲表示警告。采用Proteus自帶的鍵盤元件KEYPAD-PHONE,0-9為數(shù)字鍵,#為確認/返回鍵和*為密碼修改鍵,每次對鍵盤掃描,獲得對應的鍵值。 五、所用器件 CPU8086、并行接口8255A、地址鎖存器74LS273、4 線-16 線譯碼器74HCT154、石英晶振,可編程定時/計數(shù)器8253、共陰極數(shù)碼管、各類邏輯門、蜂鳴器,電阻、鍵盤等。 主要器件簡介 CPU8086
8086是Inter系列的16位微處理器,芯片上有2.9萬個晶體管,采用 HMOS工 藝制造,用單一的+5V電源,時鐘頻率為5MHz~10MHz。 8086有16根數(shù)據(jù)線和20根地址線,它既能處理16位數(shù)據(jù),也能處理8位數(shù)據(jù)? 尋址的內存空間為1MB。
并行接口8255 Intel 8086/8088 系列的可編程外設接口電路(Programmable Peripheral Interface)簡稱 PPI,型號為8255(改進型為8255A及8255A-5),具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強,使用靈活,通過它CPU可直接與外設相連接。 可編程定時/計數(shù)器8253 8253可編程定時器/計數(shù)器是8086微機系統(tǒng)常用的定時/計數(shù)器芯片,它具有定時與計數(shù)兩大功能。8253可編程定時器/計數(shù)器具有3個獨立的16位計數(shù)器通過編程可選擇六種工作方式 ,可選擇二進制或十進制計數(shù),最高計數(shù)速率可達2.6MHz。所有的輸入、輸出電平都與TTL兼容。
地址鎖存器74LS273 地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號必須經(jīng)反相器后才能連到74LS273的CLK端,以滿足CLK在上升沿鎖存的要求。 4 線-16 線譯碼器74HCT154 74HCT154 為4 線-16 線譯碼器,將4 個二進制編碼輸入譯成16 個彼獨立的輸出之一,并能將數(shù)據(jù)從一個輸入線分配到16 個輸出的任意一個而實現(xiàn)解調功能,與大部分TTL 和DTL [url=]電路[/url]完全兼容。其工作原理如下:這種單片4 線—16 線譯碼器非常適合用于高性能存儲器的譯碼器。當兩個選通輸入G1 和G2 為低時,它可將4 個二進制編碼的輸入譯成16 個互相獨立的輸出之一。實現(xiàn)解調功能的辦法是:用4 個輸入線寫出輸出線的地址,使得在一個選通輸入為低時數(shù)據(jù)通過另一個選通輸入。當任何一個選通輸入是高時,所有輸出都為高。 六、原理圖 1、8086和8255A連接 8255A地址分配:PA:200H PB:202H PC:204H 控制寄存器:206H 為了滿足8255A的四個端口地址必須為偶地址這一要求,將8255A的A1、A0分別與8086系統(tǒng)地址總線的A2、A1相連,并且,CPU在對8255A的端口進行訪問時,總是將地址中的A0設置為0。 2、8255A的A口、C口與矩陣鍵盤連接 鍵盤元件KEYPAD-PHONE,0-9為數(shù)字鍵,#為確認/返回鍵和*為密碼修改鍵。數(shù)字鍵1-9的鍵值為相應的數(shù)值,數(shù)字鍵0的鍵值為0BH,功能鍵*的鍵值為0AH,能鍵#的鍵值為0CH。 3、8255A的A口、B口與數(shù)碼管的連接 8255A的B口輸出數(shù)碼管的段碼,A口輸出數(shù)碼管的位碼。 4、8086與8253連接 8253地址分配:計數(shù)器0:400H 計數(shù)器1:402H 計數(shù)器2:404H控制寄存器:406H 為了滿足8255A的四個端口地址必須為偶地址這一要求,將8255A的A1、A0分別與8086系統(tǒng)地址總線的A2、A1相連,并且,CPU在對8255A的端口進行訪問時,總是將地址中的A0設置為0。
七、軟件設計思路 整個硬件設計,主要采用器件CPU8086、并行接口8255和可編程定時/計數(shù)器8253。由并行接口8255控制鍵盤掃描、數(shù)碼管顯示、開鎖電平以及報警電平,8255的工作方式是A口輸出,B口輸出,C口高四位輸出,C口低四位輸入。通過鍵盤掃描獲得對應的鍵值,通過對鍵值判斷,判斷按鍵是功能鍵或數(shù)字鍵,達到輸入密碼,修改密碼,確認輸入,返回等功能。由可編程定時/計數(shù)器8253產(chǎn)生方波,控制蜂鳴器產(chǎn)生“滴”聲。8253工作在計數(shù)器0方式3,產(chǎn)生方波,通過延時,是蜂鳴器產(chǎn)生“滴”。8253在每次調用發(fā)聲子程序中初始化。 根據(jù)條件要求,程序首先需要實現(xiàn)的是輸入密碼。為了區(qū)別輸入密碼和修改密碼,當數(shù)碼管顯示都顯示“—”,是輸入密碼。當數(shù)碼管全滅時,是修改密碼。當密碼輸入完且按下確認鍵,則輸入數(shù)字與密碼比對。密碼正確,則輸出開鎖電平(高電平有效)。在此時,則可以通過功能鍵修改密碼,密碼修改成功發(fā)出“滴”聲。若不需要,按返回鍵返回。若密碼錯誤,則發(fā)出三聲“滴”聲,密碼錯誤次數(shù)加1,并判斷是否已經(jīng)輸入六次錯誤,是則輸出報警電平(高電平有效),并置密碼錯誤次數(shù)置0,等待返回鍵返回;否則等待返回按鍵返回。 為了實現(xiàn)上述程序,首先要初始化8086、8255,接著進入鍵盤掃描。每次有按鍵輸入后,還應判斷按鍵是否彈起,可以實現(xiàn)鍵盤消抖。無論密碼正確與否,均需要通過返回鍵才能返回,所以每次顯示完后都要對鍵盤掃描,判斷是否按下返回鍵,有則退出鍵盤掃描,沒有則繼續(xù)掃描。開鎖電平以及報警電平均在返回時置低電平。 八、流程圖 主程序流程圖
修改密碼子程序流程圖開鎖子程序流程圖
否
是
是
否
否
是
閉鎖子程序流程圖是 
十、設計中的難點
1.硬件
雖然是第一次接觸proteus,在硬件接線方面遇到種種困難。特別是總線的接法,因為以前沒有接觸過,完全無從下手。但是經(jīng)過幾天的找資料以及學習,通過多次的嘗試,終于把硬件接線完成。
2.軟件
軟件設計基于我們這學期微機實驗課上的鍵盤掃描程序。整個系統(tǒng)中,我覺得最重要的同時最難的就是鍵盤掃描程序的設計。一開始,對于鍵盤掃描還未完全搞懂,還沒有對鍵盤賦鍵值這個概念,導致前期一直都在探索中。接著,程序可以獲得相應的鍵值,可是獲得按鍵值后就很不穩(wěn)定,比如,我想通過#鍵來達到確認和返回兩個功能,但是總是一確認以后就馬上執(zhí)行返回功能。程序邏輯沒有錯誤,后來參考書本的程序,原來每次獲得鍵值后都要對鍵盤進行再次掃描,判斷按鍵是否彈起,未彈起則跳到下一步。 如此,#鍵就能完美執(zhí)行這兩個功能。
十一、收獲及體會
1、下面就以硬件方面我做一下總結:
硬件部分主要是設計原理圖跟連接線路,這次主要是用到Proteus這個軟件,這個軟件之前沒接觸過,所以在下載下來以后第一件事就是上網(wǎng)看教程,看了兩三個教程之后大概就明白了它的大體操作,開始自己動手繪圖。
在繪圖之前,根據(jù)需要實現(xiàn)的功能,選定要用到的元件,最后初步定下來一個圖樣,但是在實際繪圖過程中發(fā)現(xiàn)太過復雜了,又重新制定了一個圖樣。因為是第一次用這個軟件,里面很多功能都不懂,經(jīng)常點出很多不懂得文件,最后不得不重新設計,導致繪圖時間大大增加。在多次實踐后我終于較為熟練的掌握里面的工具了,后面的繪圖過程也就相對來說比較輕松,找出了自己繪制元件的時候有些麻煩,不過碰到不會的就上網(wǎng)百度或者問問同學,其實這個繪圖過程還是挺有意思的。線路圖終于接好了,這里可以總結為三點:
第一,在繪圖之前一定要先熟練掌握Proteus這個軟件;第二,一點要把程序看懂,這樣才可以合理布線路圖;第三,在搜索元件的過程中可以大量的求助百度,里面有很多元件庫表,這樣可以大大縮短查找時間。
通過這一兩個星期的學習,掌握了Proteus一些基本的操作以及仿真,相信對以后的學習生活中都大有幫助。
2、軟件設計總結:
這次課程設計中,最重點的部分應該屬于軟件部分。剛剛學習了《微機原理與接口技術》這么課程,一切都覺得那么新鮮。自己一些想法,可以通過實踐來實現(xiàn)。軟件設計之前,自己大概想好了大體的思路,但是程序需要嚴格的邏輯,嚴格的語法,有時按著自己的思路去寫程序,卻總是發(fā)現(xiàn)錯誤,或者程序不穩(wěn)定,有時是達不到預期的效果。理論和實踐還是有著很多的差距。這次課程設計中,收獲最大的是如何確定一個程序的主線。以前寫程序,就是想到哪就寫哪,寫完以后,才發(fā)現(xiàn),有一個小的功能已經(jīng)無法實現(xiàn)。如果要加入這個功能,卻需要改動整個程序,導致程序的兼容性很差。在這次設計中,我先確定了整個程序的主線。輸入密碼,對比密碼,密碼正確或密碼錯誤。然后其他程序皆在這幾個部分中實現(xiàn)。
比如修改密碼則在密碼正確中實現(xiàn),開鎖電平也是在密碼正確中輸出;而報警電平則在密碼錯誤部分實現(xiàn)。由此,我就確定了整個程序的框架,剩下的就是注意一些細節(jié)的問題,一些邏輯的問題。
經(jīng)過一周的奮戰(zhàn),終于還是完成了整個程序的編寫。在設計程序的過程中,我不僅對以前學過的匯編語言進行了重溫和查漏補缺,而且對程序整體的把握和細節(jié)的處理能力得到了很大的提高。畢竟看程序和寫程序是有很大區(qū)別的,只有實踐才能真正將匯編語言學到家?吹椒抡娴慕Y果和題目所要求的一樣,心情倍感欣慰,同時也很有成就感。
整個程序完成了,雖然已經(jīng)達到了題目的要求,但是自己覺得還可以繼續(xù)改善。用句至理名言:好作文不是寫出來的,是改出來的。我此刻只想說的是:好程序不是寫出來的,也是改出來。在以后的日子了,有空的時候可以拿出自己的程序,好好修改完善,實現(xiàn)更多的功能,程序進一步優(yōu)化。
單片機源程序如下:
- IOY0 EQU 0200H ;8255片選端口始地址
- MY8255_A EQU IOY0+00H*2 ;8255的A口地址
- MY8255_B EQU IOY0+01H*2 ;8255的B口地址
- MY8255_C EQU IOY0+02H*2 ;8255的C口地址
- MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址
- IOY1 EQU 0400H ;8253片選端口始地址
- MY8253_COUNT0 EQU IOY1+00H*2 ;8253計數(shù)器0端口地址
- MY8253_COUNT1 EQU IOY1+01H*2 ;8253計數(shù)器1端口地址
- MY8253_COUNT2 EQU IOY1+02H*2 ;8253計數(shù)器2端口地址
- MY8253_MODE EQU IOY1+03H*2 ;8253控制寄存器端口地址
- DATA SEGMENT
- COUNT1 DB 00H
- COUNT2 DB 00H ;錯誤密碼次數(shù)
- DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,3FH,39H,5EH,79H,71H,00H,40H ;鍵值表,0~F對應的7段數(shù)碼管的段位值
- ;DTABLE[11]=3FH對應鍵值11,顯示"0"
- ;DTABLE[16]=00H,數(shù)碼管熄滅
- ;DATABLE[17]=04H,顯示數(shù)碼管"-"
- STRING DB 01H,02H,03H,04H,05H,06H ;初始密碼,密碼內存空間
- DATA ENDS
- STACK1 SEGMENT STACK
- DW 256 DUP(?)
- STACK1 ENDS
- CODE SEGMENT
- ASSUME CS:CODE,DS:DATA,SS:STACK1
- START: MOV AX,DATA
- MOV DS,AX
-
- START1:MOV DX,MY8255_MODE ;初始化8255工作方式
- MOV AL,81H ;方式0,A口、B口輸出,C口高四位輸出,C口低4位輸入
- OUT DX,AL
- MOV DX,MY8255_C ;開鎖電平、報警電平置0
- MOV AL,00H
- OUT DX,AL
- MOV SI,0200H ;建立緩沖區(qū),存放要顯示的鍵值
- MOV AL,11H ;先初始化鍵值為11H,顯示"-"
- MOV [SI],AL
- MOV [SI+1],AL
- MOV [SI+2],AL
- MOV [SI+3],AL
- MOV [SI+4],AL
- MOV [SI+5],AL
- MOV DI,0205H
-
-
- BEGIN:
- CALL KEYPAD ;鍵盤掃描
- CMP AL,0CH ;確認鍵
- JZ RENZ
- CMP AL,0AH ;修改密碼鍵,此處不用,返回鍵盤掃描
- JZ BEGIN
- CALL PUTBUF ;保存按鍵值
- CALL KEYLS ;按鍵未彈起則繼續(xù)循環(huán)等待彈起
- JMP BEGIN
-
- RENZ: CALL KEYLS
- CALL CRCMP ;密碼比對
- CMP CX,0FFH
- JZ SHOW1
- JMP SHOW2
- SHOW1: CALL SHOWC ;密碼錯誤
- JMP START1
-
- SHOW2: CALL SHOWO ;密碼正確
- ; JMP START1
- QUIT: HLT
-
- KEYPAD PROC NEAR ;鍵盤掃描程序
- BEGINk:
- CALL DIS ;顯示刷新
- CALL CLEAR ;清屏
- CALL CCSCAN ;掃描按鍵
- JNZ GETKEY1 ;有鍵按下則跳置GETKEY1
- GETKEY1:CALL DIS ;顯示刷新
- CALL CLEAR ;清屏
- CALL CCSCAN ;再次掃描按鍵
- JNZ GETKEY2 ;有鍵按下則跳置GETKEY2
- JMP BEGINk ;否則跳回開始繼續(xù)循環(huán)
- GETKEY2:MOV CH,0FEH
- MOV CL,00H
- COLUM: MOV AL,CH ;選取一行
- MOV DX,MY8255_A
- OUT DX,AL
- MOV DX,MY8255_C ;讀C口,用于判斷是哪一列按鍵閉合
- IN AL,DX
- L1: TEST AL,01H ;是否為第1列
- JNZ L2 ;不是則繼續(xù)判斷
- MOV AL,01H ;設置第1行第1列的對應的鍵值
- JMP KCODE
- L2: TEST AL,02H ;是否為第2列
- JNZ L3 ;不是則繼續(xù)判斷
- MOV AL,02H ;設置第1行第2列的對應的鍵值
- JMP KCODE
- L3: TEST AL,04H ;是否為第3列
- JNZ NEXT ;不是則繼續(xù)判斷
- MOV AL,03H ;設置第1行第3列的對應的鍵值
- JMP KCODE
- KCODE: ADD AL,CL
- JMP QUITk ;確定按鍵值
- NEXT: ADD CL,3
- MOV AL,CH
- TEST AL,08H ;檢測是否掃描到第4行
- JZ KERR ;是則跳回到開始處
- ROL AL,1 ;沒檢測到第4行則準備檢測下一列
- MOV CH,AL
- JMP COLUM
- KERR: JMP BEGINk
- QUITk: RET
- KEYPAD ENDP
- CCSCAN PROC NEAR ;掃描是否有按鍵閉合子程序
- MOV AL,00H
- MOV DX,MY8255_A ;將4行全選通,
- OUT DX,AL
- MOV DX,MY8255_C
- IN AL,DX ;讀C口
- NOT AL
- AND AL,0FH ;取出C口值的反值
- RET
- CCSCAN ENDP
-
- KEYLS PROC NEAR ;按鍵是否彈起子程序
- PUSH AX
- KON:
- CALL DIS ;顯示刷新
- CALL CLEAR ;清屏
- CALL CCSCAN ;掃描按鍵,判斷按鍵是否彈起
- JNZ KON ;未彈起則繼續(xù)循環(huán)等待彈起
- POP AX
- RET
- KEYLS ENDP
-
- CLEAR PROC NEAR ;清除數(shù)碼管顯示子程序
- MOV DX,MY8255_B ;段位置0即可清除數(shù)碼管顯示
- MOV AL,00H
- OUT DX,AL
- RET
- CLEAR ENDP
- DIS PROC NEAR ;顯示鍵值子程序
- PUSH AX ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示
- MOV SI,0200H
- MOV DL,0DFH
- MOV AL,DL
- AGAIN: PUSH DX
- MOV DX,MY8255_A
- OUT DX,AL ;選通一個數(shù)碼管
- MOV AL,[SI] ;取出緩沖區(qū)中存放鍵值
- MOV BX,OFFSET DTABLE
- AND AX,00FFH
- ADD BX,AX
- MOV AL,[BX] ;將鍵值作為偏移和鍵值基地址相加得到相應的鍵值
- MOV DX,MY8255_B
- OUT DX,AL ;寫入數(shù)碼管A~Dp
- CALL DALLY
- INC SI ;取下一個鍵值
- POP DX
- MOV AL,DL
- TEST AL,01H ;判斷是否顯示完?
- JZ OUT1 ;顯示完,返回
- ROR AL,1
- MOV DL,AL
- JMP AGAIN ;未顯示完,跳回繼續(xù)
- OUT1: POP AX
- RET
- DIS ENDP
- PUTBUF PROC NEAR ;保存鍵值子程序
- MOV SI,DI
- MOV [SI],AL
- DEC DI
- CMP DI,01FFH
- JNZ GOBACK
- MOV DI,0205H
- GOBACK: RET
- PUTBUF ENDP
- CRCMP PROC NEAR ;密碼比對子程序
-
-
- MOV SI,0205H
- MOV DI,OFFSET STRING
- MOV CX,0 ; 密碼正確,則輸出CX=00H,為密碼正確的標志
- MOV AL,[SI]
- MOV BL,[DI]
- CMP AL,BL
- JZ NEXT1
- JMP NEXT6
- NEXT1: MOV SI,0204H
- MOV DI,OFFSET STRING
- MOV AL,[SI]
- MOV BL,[DI+1]
- CMP AL,BL
- JZ NEXT2
- JMP NEXT6
- NEXT2:
- MOV SI,0203H
- MOV DI,OFFSET STRING
- MOV AL,[SI]
- MOV BL,[DI+2]
- CMP AL,BL
- JZ NEXT3
- JMP NEXT6
- NEXT3:
- MOV SI,0202H
- MOV DI,OFFSET STRING
- MOV AL,[SI]
- MOV BL,[DI+3]
- CMP AL,BL
- JZ NEXT4
- JMP NEXT6
- NEXT4:
- MOV SI,0201H
- MOV DI,OFFSET STRING
- MOV AL,[SI]
- MOV BL,[DI+4]
- CMP AL,BL
- JZ NEXT5
- JMP NEXT6
- NEXT5:
- MOV SI,0200H
- MOV DI,OFFSET STRING
- MOV AL,[SI]
- MOV BL,[DI+5]
- CMP AL,BL
- JZ QUITER
- JMP NEXT6
- NEXT6: MOV CX,0FFH ;密碼錯誤,則CX=0FFH為密碼錯誤的標志
- QUITER:RET
- CRCMP ENDP
-
- SHOWO PROC NEAR ;開鎖子程序
- MOV SI,0200H ;顯示00
- MOV AL,00H
- MOV [SI],AL
- MOV [SI+1],AL
- MOV AL,10H
- MOV [SI+2],AL
- MOV [SI+3],AL
- MOV [SI+4],AL
- MOV [SI+5],AL
- MOV DI,0205H
-
- MOV DX,MY8255_C ;輸出開鎖電平
- MOV AL,010H
- OUT DX,AL
- LOOP21:
- CALL KEYPAD
- CMP AL,0CH ;返回鍵,退出開鎖子程序
- JZ LOOP22
- CMP AL,0AH ;修改密碼鍵
- JZ LOOP23
- JMP LOOP21
- LOOP22: CALL KEYLS
- JMP QUITSHO
- LOOP23: CALL KEYLS ;修改密碼,數(shù)碼管全滅,用于與輸入密碼區(qū)別
- MOV SI,0200H
- MOV AL,10H
- MOV [SI],AL
- MOV [SI+1],AL
- MOV DI,0205H
- CALL CHANGECR ;調用修改密碼子程序
- QUITSHO: MOV DX,MY8255_C ;開鎖電平置0
- MOV AL,00H
- OUT DX,AL
- RET
- SHOWO ENDP
- CHANGECR PROC NEAR ;修改密碼子程序
- CHG1: CALL KEYPAD
- CMP AL,0CH
- JZ CHG2
- CALL PUTBUF
- CALL PUTBUFCR
- CALL KEYLS
- JMP CHG1
- CHG2: CALL KEYLS
- CALL RING ;確認則發(fā)出"滴"的確認音
- CALL DALLYS
- RET
- CHANGECR ENDP
- PUTBUFCR PROC NEAR ;保存修改后的密碼子程序
- XOR BX,BX
- MOV BL,[COUNT1]
- MOV STRING[BX],AL ;放入密碼內存空間STRING
- MOV BL,[COUNT1]
- INC BL
- MOV [COUNT1],BL
- CMP BL,06H
- JNZ GOBACKCR
- MOV BL,0
- MOV [COUNT1],BL
- GOBACKCR: RET
- PUTBUFCR ENDP
- SHOWC PROC NEAR ;閉鎖子程序
-
- MOV SI,0200H ;顯示FF
- MOV AL,0FH
- MOV [SI],AL
- MOV [SI+1],AL
- MOV AL,10H
- MOV [SI+2],AL
- MOV [SI+3],AL
- MOV [SI+4],AL
- MOV [SI+5],AL
- MOV DI,0205H
-
- MOV DX,MY8255_A ;顯示FF
- MOV AL,0CFH
- OUT DX,AL
- MOV DX,MY8255_B
- MOV AL,71H
- OUT DX,AL
- ;發(fā)出三聲"滴"聲
- CALL RING
- CALL DALLYS
- CALL DALLYS
- CALL DALLYS
- CALL RING
- CALL DALLYS
- CALL DALLYS
- CALL DALLYS
- CALL RING
- CALL DALLYS
- CALL DALLYS
- CALL DALLYS
-
- MOV BL,[COUNT2] ;取出密碼錯誤次數(shù),并判斷是否已經(jīng)達到6次
- INC BL
- CMP BL,06H
- JZ LOOP31
- MOV [COUNT2],BL
- JMP LOOP32
-
- LOOP31: MOV DX,MY8255_C ;已達到六次,則輸出報警電平
- MOV AL,020H
- OUT DX,AL
- MOV BL,0 ;密碼錯誤次數(shù)清0
- MOV [COUNT2],BL
-
- LOOP32: CALL KEYPAD
- CMP AL,0CH
- JZ LOOP33
- JMP LOOP32
-
- LOOP33:CALL KEYLS ;未彈起則繼續(xù)循環(huán)等待彈起
- RET
- SHOWC ENDP
- RING PROC NEAR ;發(fā)音子程序
- PUSH AX
-
- MOV DX,MY8253_MODE ;初始化8253工作方式
- MOV AL,36H ;計數(shù)器0,方式3
- OUT DX,AL
-
- MOV AX,0020H
- MOV DX,MY8253_COUNT0
- OUT DX,AL ;裝入計數(shù)初值
- MOV AL,AH
- OUT DX,AL
- CALL DALLYS
- POP AX
- QUITRI: MOV DX,MY8253_MODE ;退出時設置8253為方式2,OUT0置1
- MOV AL,34H
- OUT DX,AL
-
- RING ENDP
-
- DALLYS PROC NEAR ;8253延時子程序
- D1S: MOV AX,0FFFH
- D2S: DEC AX
- JNZ D2S
- RET
- DALLYS ENDP
-
- DALLY PROC NEAR ;,8255軟件延時子程序
- PUSH CX
- MOV CX,000FH
- D1: MOV AX,000FH
- D2: DEC AX
- JNZ D2
- LOOP D1
- POP CX
- RET
- DALLY ENDP
- CODE ENDS
- END START
復制代碼
0.png (14.43 KB, 下載次數(shù): 162)
下載附件
2018-11-21 01:44 上傳
所有資料51hei提供下載:
http://www.torrancerestoration.com/bbs/dpj-142463-1.html
|