找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 15689|回復: 6
打印 上一主題 下一主題
收起左側

8086與8255A多功能密碼鎖的設計(仿真+源代碼)微機原理課設報告

  [復制鏈接]
跳轉到指定樓層
樓主
ID:430264 發(fā)表于 2018-11-20 23:06 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
自動化科學與工程學院

《微機原理與應用》課程設計報告

多功能密碼鎖的設計

  專業(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、82558253,等接口芯片以及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)化。


單片機源程序如下:
  1. IOY0         EQU   0200H           ;8255片選端口始地址
  2. MY8255_A     EQU   IOY0+00H*2      ;8255的A口地址
  3. MY8255_B     EQU   IOY0+01H*2      ;8255的B口地址
  4. MY8255_C     EQU   IOY0+02H*2      ;8255的C口地址
  5. MY8255_MODE  EQU   IOY0+03H*2      ;8255的控制寄存器地址  
  6. IOY1           EQU   0400H         ;8253片選端口始地址
  7. MY8253_COUNT0  EQU   IOY1+00H*2    ;8253計數(shù)器0端口地址
  8. MY8253_COUNT1  EQU   IOY1+01H*2    ;8253計數(shù)器1端口地址
  9. MY8253_COUNT2  EQU   IOY1+02H*2    ;8253計數(shù)器2端口地址
  10. MY8253_MODE    EQU   IOY1+03H*2    ;8253控制寄存器端口地址


  11. DATA   SEGMENT
  12. COUNT1 DB  00H  
  13. COUNT2 DB  00H    ;錯誤密碼次數(shù)
  14. DTABLE DB   3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,3FH,39H,5EH,79H,71H,00H,40H    ;鍵值表,0~F對應的7段數(shù)碼管的段位值
  15.                                                                                        ;DTABLE[11]=3FH對應鍵值11,顯示"0"
  16.                                                                                        ;DTABLE[16]=00H,數(shù)碼管熄滅
  17.                                                                                        ;DATABLE[17]=04H,顯示數(shù)碼管"-"

  18. STRING DB   01H,02H,03H,04H,05H,06H    ;初始密碼,密碼內存空間
  19. DATA   ENDS                        

  20. STACK1 SEGMENT STACK
  21.         DW 256 DUP(?)
  22. STACK1 ENDS  

  23. CODE   SEGMENT
  24.               ASSUME CS:CODE,DS:DATA,SS:STACK1

  25. START: MOV  AX,DATA               
  26.            MOV  DS,AX                                          
  27.            
  28. START1:MOV  DX,MY8255_MODE         ;初始化8255工作方式
  29.        MOV  AL,81H                 ;方式0,A口、B口輸出,C口高四位輸出,C口低4位輸入  
  30.            OUT  DX,AL

  31.        MOV DX,MY8255_C             ;開鎖電平、報警電平置0
  32.        MOV  AL,00H
  33.        OUT DX,AL

  34.        MOV  SI,0200H               ;建立緩沖區(qū),存放要顯示的鍵值
  35.            MOV  AL,11H                 ;先初始化鍵值為11H,顯示"-"
  36.            MOV  [SI],AL
  37.            MOV  [SI+1],AL
  38.            MOV  [SI+2],AL
  39.            MOV  [SI+3],AL
  40.            MOV  [SI+4],AL
  41.            MOV  [SI+5],AL
  42.            MOV  DI,0205H   
  43.            
  44.            

  45. BEGIN:  
  46.         CALL KEYPAD                 ;鍵盤掃描
  47.         CMP AL,0CH                  ;確認鍵
  48.         JZ  RENZ
  49.         CMP AL,0AH                  ;修改密碼鍵,此處不用,返回鍵盤掃描
  50.         JZ  BEGIN
  51.         CALL PUTBUF                 ;保存按鍵值   
  52.         CALL KEYLS                  ;按鍵未彈起則繼續(xù)循環(huán)等待彈起
  53.         JMP BEGIN
  54.                                        
  55. RENZ:   CALL KEYLS                  
  56.         CALL CRCMP                   ;密碼比對
  57.         CMP CX,0FFH
  58.         JZ SHOW1
  59.         JMP SHOW2
  60. SHOW1:  CALL SHOWC                    ;密碼錯誤              
  61.             JMP START1      

  62. SHOW2: CALL SHOWO                    ;密碼正確
  63.     ;   JMP START1

  64. QUIT: HLT


  65.       
  66. KEYPAD  PROC NEAR                   ;鍵盤掃描程序
  67. BEGINk:
  68.         CALL DIS                    ;顯示刷新                     
  69.             CALL CLEAR                  ;清屏
  70.             CALL CCSCAN                 ;掃描按鍵
  71.             JNZ  GETKEY1                ;有鍵按下則跳置GETKEY1  

  72. GETKEY1:CALL DIS                    ;顯示刷新
  73.         CALL CLEAR                  ;清屏
  74.             CALL CCSCAN                 ;再次掃描按鍵
  75.             JNZ  GETKEY2                ;有鍵按下則跳置GETKEY2
  76.             JMP  BEGINk                  ;否則跳回開始繼續(xù)循環(huán)

  77. GETKEY2:MOV  CH,0FEH
  78.             MOV  CL,00H                 
  79. COLUM:  MOV  AL,CH                  ;選取一行      
  80.         MOV  DX,MY8255_A
  81.             OUT  DX,AL
  82.         MOV  DX,MY8255_C            ;讀C口,用于判斷是哪一列按鍵閉合
  83.             IN   AL,DX

  84. L1:     TEST AL,01H                 ;是否為第1列
  85.         JNZ  L2                     ;不是則繼續(xù)判斷  
  86.         MOV  AL,01H                 ;設置第1行第1列的對應的鍵值
  87.             JMP  KCODE

  88. L2:     TEST AL,02H                 ;是否為第2列
  89.         JNZ  L3                     ;不是則繼續(xù)判斷
  90.         MOV  AL,02H                 ;設置第1行第2列的對應的鍵值
  91.         JMP  KCODE

  92. L3:     TEST AL,04H                 ;是否為第3列
  93.         JNZ  NEXT                     ;不是則繼續(xù)判斷
  94.         MOV  AL,03H                 ;設置第1行第3列的對應的鍵值
  95.             JMP  KCODE


  96. KCODE:  ADD  AL,CL
  97.         JMP QUITk                   ;確定按鍵值

  98. NEXT:   ADD CL,3                                       
  99.             MOV  AL,CH
  100.             TEST AL,08H                 ;檢測是否掃描到第4行
  101.             JZ   KERR                   ;是則跳回到開始處
  102.         ROL  AL,1                   ;沒檢測到第4行則準備檢測下一列
  103.             MOV  CH,AL
  104.             JMP  COLUM
  105. KERR:   JMP  BEGINk
  106. QUITk:  RET
  107. KEYPAD ENDP

  108. CCSCAN  PROC NEAR                   ;掃描是否有按鍵閉合子程序
  109.         MOV  AL,00H                              
  110.         MOV  DX,MY8255_A            ;將4行全選通,
  111.             OUT  DX,AL
  112.         MOV  DX,MY8255_C
  113.         IN   AL,DX                  ;讀C口
  114.             NOT  AL
  115.         AND  AL,0FH                 ;取出C口值的反值
  116.            RET
  117. CCSCAN ENDP


  118. KEYLS  PROC  NEAR                  ;按鍵是否彈起子程序
  119.              PUSH AX                     
  120. KON:   
  121.         CALL DIS                    ;顯示刷新
  122.             CALL CLEAR                  ;清屏
  123.             CALL CCSCAN                 ;掃描按鍵,判斷按鍵是否彈起
  124.             JNZ  KON                    ;未彈起則繼續(xù)循環(huán)等待彈起
  125.             POP  AX   
  126.             RET
  127. KEYLS ENDP

  128. CLEAR PROC NEAR                    ;清除數(shù)碼管顯示子程序
  129.        MOV  DX,MY8255_B            ;段位置0即可清除數(shù)碼管顯示   
  130.        MOV  AL,00H
  131.        OUT  DX,AL
  132.            RET
  133. CLEAR ENDP

  134. DIS PROC NEAR                      ;顯示鍵值子程序
  135.        PUSH AX                   ;以緩沖區(qū)存放的鍵值為鍵值表偏移找到鍵值并顯示
  136.            MOV  SI,0200H                              
  137.            MOV  DL,0DFH
  138.            MOV  AL,DL
  139. AGAIN: PUSH DX
  140.        MOV  DX,MY8255_A
  141.        OUT  DX,AL                  ;選通一個數(shù)碼管   
  142.        MOV  AL,[SI]                ;取出緩沖區(qū)中存放鍵值                  
  143.        MOV  BX,OFFSET DTABLE
  144.            AND  AX,00FFH
  145.            ADD  BX,AX                  
  146.            MOV  AL,[BX]                ;將鍵值作為偏移和鍵值基地址相加得到相應的鍵值
  147.        MOV  DX,MY8255_B
  148.            OUT  DX,AL                  ;寫入數(shù)碼管A~Dp
  149.            CALL DALLY
  150.            INC  SI                     ;取下一個鍵值
  151.        POP  DX
  152.        MOV  AL,DL
  153.            TEST AL,01H                 ;判斷是否顯示完?
  154.        JZ   OUT1                   ;顯示完,返回
  155.            ROR  AL,1            
  156.            MOV  DL,AL
  157.            JMP  AGAIN                  ;未顯示完,跳回繼續(xù)
  158. OUT1:  POP  AX                     
  159.            RET
  160. DIS ENDP


  161. PUTBUF PROC NEAR                   ;保存鍵值子程序   

  162.        MOV  SI,DI
  163.        MOV  [SI],AL
  164.            DEC  DI
  165.            CMP  DI,01FFH
  166.            JNZ  GOBACK
  167.            MOV  DI,0205H
  168. GOBACK: RET
  169. PUTBUF ENDP   

  170. CRCMP PROC NEAR   ;密碼比對子程序
  171.    
  172.       
  173.         MOV SI,0205H
  174.         MOV DI,OFFSET STRING
  175.         MOV CX,0                     ; 密碼正確,則輸出CX=00H,為密碼正確的標志
  176.         MOV AL,[SI]
  177.         MOV BL,[DI]
  178.         CMP AL,BL
  179.         JZ  NEXT1
  180.         JMP NEXT6
  181. NEXT1: MOV SI,0204H
  182.        MOV DI,OFFSET STRING
  183.        MOV AL,[SI]
  184.        MOV BL,[DI+1]
  185.        CMP AL,BL
  186.        JZ NEXT2
  187.        JMP NEXT6
  188. NEXT2:
  189.        MOV SI,0203H
  190.        MOV DI,OFFSET STRING
  191.        MOV AL,[SI]
  192.        MOV BL,[DI+2]
  193.        CMP AL,BL
  194.        JZ NEXT3
  195.        JMP NEXT6  
  196. NEXT3:
  197.        MOV SI,0202H
  198.        MOV DI,OFFSET STRING
  199.        MOV AL,[SI]
  200.        MOV BL,[DI+3]
  201.        CMP AL,BL
  202.        JZ NEXT4
  203.        JMP NEXT6
  204. NEXT4:
  205.        MOV SI,0201H
  206.        MOV DI,OFFSET STRING
  207.        MOV AL,[SI]
  208.        MOV BL,[DI+4]
  209.        CMP AL,BL
  210.        JZ NEXT5
  211.        JMP NEXT6  
  212. NEXT5:
  213.        MOV SI,0200H
  214.        MOV DI,OFFSET STRING
  215.        MOV AL,[SI]
  216.        MOV BL,[DI+5]
  217.        CMP AL,BL
  218.        JZ QUITER
  219.        JMP NEXT6
  220. NEXT6: MOV CX,0FFH                ;密碼錯誤,則CX=0FFH為密碼錯誤的標志
  221. QUITER:RET
  222. CRCMP ENDP  

  223.   
  224. SHOWO PROC NEAR                    ;開鎖子程序
  225.         MOV  SI,0200H              ;顯示00
  226.             MOV  AL,00H                 
  227.             MOV  [SI],AL
  228.             MOV  [SI+1],AL
  229.             MOV  AL,10H
  230.             MOV  [SI+2],AL
  231.             MOV  [SI+3],AL
  232.             MOV  [SI+4],AL
  233.             MOV  [SI+5],AL
  234.             MOV  DI,0205H   
  235.             
  236.            MOV  DX,MY8255_C             ;輸出開鎖電平
  237.        MOV  AL,010H                  
  238.            OUT  DX,AL

  239. LOOP21:
  240.         CALL KEYPAD   
  241.         CMP AL,0CH                  ;返回鍵,退出開鎖子程序
  242.         JZ LOOP22  
  243.         CMP AL,0AH                  ;修改密碼鍵
  244.         JZ LOOP23
  245.         JMP LOOP21
  246. LOOP22: CALL KEYLS   
  247.         JMP  QUITSHO
  248. LOOP23: CALL KEYLS                  ;修改密碼,數(shù)碼管全滅,用于與輸入密碼區(qū)別
  249.         MOV  SI,0200H  
  250.         MOV  AL,10H                 
  251.         MOV  [SI],AL
  252.             MOV  [SI+1],AL
  253.             MOV  DI,0205H
  254.             CALL CHANGECR                ;調用修改密碼子程序
  255. QUITSHO: MOV DX,MY8255_C             ;開鎖電平置0
  256.         MOV  AL,00H
  257.         OUT DX,AL
  258. RET
  259. SHOWO ENDP

  260. CHANGECR PROC NEAR                 ;修改密碼子程序
  261. CHG1:    CALL KEYPAD                  
  262.          CMP AL,0CH
  263.          JZ  CHG2
  264.          CALL PUTBUF
  265.          CALL PUTBUFCR
  266.          CALL KEYLS
  267.          JMP  CHG1
  268. CHG2:    CALL KEYLS
  269.          CALL RING                ;確認則發(fā)出"滴"的確認音
  270.              CALL DALLYS  
  271.              RET
  272. CHANGECR ENDP

  273. PUTBUFCR  PROC NEAR        ;保存修改后的密碼子程序
  274.       XOR BX,BX
  275.       MOV BL,[COUNT1]
  276.       MOV STRING[BX],AL   ;放入密碼內存空間STRING
  277.       MOV BL,[COUNT1]
  278.       INC BL
  279.       MOV [COUNT1],BL  
  280.       CMP BL,06H
  281.       JNZ  GOBACKCR  
  282.       MOV BL,0
  283.       MOV [COUNT1],BL
  284. GOBACKCR: RET
  285. PUTBUFCR  ENDP

  286. SHOWC PROC NEAR                    ;閉鎖子程序
  287.         
  288.         MOV  SI,0200H              ;顯示FF
  289.             MOV  AL,0FH                 
  290.             MOV  [SI],AL
  291.             MOV  [SI+1],AL
  292.             MOV  AL,10H
  293.             MOV  [SI+2],AL
  294.             MOV  [SI+3],AL
  295.             MOV  [SI+4],AL
  296.             MOV  [SI+5],AL  
  297.             MOV  DI,0205H
  298.             
  299.             MOV  DX,MY8255_A            ;顯示FF
  300.         MOV  AL,0CFH
  301.         OUT  DX,AL
  302.         MOV  DX,MY8255_B
  303.         MOV  AL,71H
  304.         OUT  DX,AL     
  305.                                     ;發(fā)出三聲"滴"聲
  306.             CALL RING  
  307.             CALL DALLYS
  308.             CALL DALLYS
  309.             CALL DALLYS
  310.             CALL RING  
  311.             CALL DALLYS
  312.             CALL DALLYS
  313.             CALL DALLYS
  314.             CALL RING  
  315.             CALL DALLYS
  316.             CALL DALLYS
  317.             CALL DALLYS
  318.                                        
  319.             MOV BL,[COUNT2]              ;取出密碼錯誤次數(shù),并判斷是否已經(jīng)達到6次
  320.         INC BL
  321.         CMP BL,06H
  322.         JZ  LOOP31
  323.         MOV [COUNT2],BL              
  324.         JMP LOOP32  
  325.         
  326. LOOP31: MOV  DX,MY8255_C             ;已達到六次,則輸出報警電平
  327.         MOV  AL,020H
  328.         OUT  DX,AL  
  329.         MOV  BL,0                     ;密碼錯誤次數(shù)清0
  330.         MOV  [COUNT2],BL        
  331.    
  332. LOOP32: CALL KEYPAD
  333.         CMP AL,0CH
  334.         JZ  LOOP33
  335.         JMP LOOP32
  336.         
  337. LOOP33:CALL KEYLS              ;未彈起則繼續(xù)循環(huán)等待彈起
  338.          RET
  339. SHOWC ENDP


  340. RING PROC NEAR                  ;發(fā)音子程序
  341.      PUSH AX
  342.                
  343.          MOV  DX,MY8253_MODE         ;初始化8253工作方式
  344.      MOV  AL,36H                 ;計數(shù)器0,方式3  
  345.          OUT  DX,AL
  346.       
  347.       MOV AX,0020H         
  348.       MOV DX,MY8253_COUNT0
  349.       OUT DX,AL                   ;裝入計數(shù)初值
  350.       MOV AL,AH
  351.       OUT DX,AL
  352.       CALL DALLYS
  353.       POP AX
  354. QUITRI: MOV DX,MY8253_MODE          ;退出時設置8253為方式2,OUT0置1
  355.         MOV AL,34H   
  356.         OUT DX,AL
  357.         
  358. RING ENDP  
  359.       

  360. DALLYS PROC NEAR                      ;8253延時子程序

  361. D1S:   MOV AX,0FFFH
  362. D2S:   DEC AX
  363.       JNZ D2S
  364.       RET
  365. DALLYS ENDP
  366.    
  367. DALLY PROC NEAR                    ;,8255軟件延時子程序
  368.        PUSH CX
  369.        MOV  CX,000FH
  370. D1:    MOV  AX,000FH
  371. D2:    DEC  AX
  372.            JNZ  D2
  373.            LOOP D1
  374.            POP  CX
  375.            RET
  376. DALLY ENDP

  377. CODE ENDS
  378.       END START
復制代碼


所有資料51hei提供下載:
http://www.torrancerestoration.com/bbs/dpj-142463-1.html



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:569425 發(fā)表于 2019-6-22 14:48 | 只看該作者
請問一下,您確定您的的程序沒有問題嗎?我仿真為啥不可以,還有請問你的這密碼是程序設定還是仿真按鍵設定?
回復

使用道具 舉報

板凳
ID:658904 發(fā)表于 2019-12-8 16:15 | 只看該作者
作者有Proteus仿真圖嗎?
回復

使用道具 舉報

地板
ID:768803 發(fā)表于 2020-6-10 02:44 | 只看該作者
fighting123 發(fā)表于 2019-6-22 14:48
請問一下,您確定您的的程序沒有問題嗎?我仿真為啥不可以,還有請問你的這密碼是程序設定還是仿真按鍵設定 ...

我也不能仿真...準確來說是無法成功進行操作
回復

使用道具 舉報

5#
ID:788094 發(fā)表于 2020-6-26 00:07 | 只看該作者
軟件仿真失敗誒
回復

使用道具 舉報

6#
ID:870495 發(fā)表于 2020-12-29 19:14 | 只看該作者
有完整的總圖嗎?清晰一點的
回復

使用道具 舉報

7#
ID:870495 發(fā)表于 2020-12-29 19:14 | 只看該作者
有仿真圖嗎?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表