久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 15861|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

8086與8255A多功能密碼鎖的設(shè)計(jì)(仿真+源代碼)微機(jī)原理課設(shè)報(bào)告

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:430264 發(fā)表于 2018-11-20 23:06 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
自動(dòng)化科學(xué)與工程學(xué)院

《微機(jī)原理與應(yīng)用》課程設(shè)計(jì)報(bào)告

多功能密碼鎖的設(shè)計(jì)

  專業(yè): 自動(dòng)化科學(xué)與工程學(xué)院

目錄
一、目的3
二、內(nèi)容3
三、設(shè)計(jì)任務(wù)3
四、方案選擇及原理3
五、所用器件3
主要器件簡(jiǎn)介4
六、原理圖7
1、8086與8255A連接7
2、 8255A的A口、C口與矩陣鍵盤連接7
3、8255A的A口、B口與數(shù)碼管的連接7
4、8086與8253連接8
5、完整電路圖9
七、軟件設(shè)計(jì)思路10
八、流程圖11
1、主程序11
2、子程序12
九、程序代碼14
十、設(shè)計(jì)中的難點(diǎn)23
十一、收獲及體會(huì)24
十二、參考文獻(xiàn)25

目的
  • 了解和掌握808682558253,等接口芯片以及LED顯示器的原理和功能;
  • 能用這些接口芯片構(gòu)建一個(gè)簡(jiǎn)單的系統(tǒng)控制對(duì)象,
  • 掌握接口電路的綜合設(shè)計(jì)與使用;
  • 通過自己動(dòng)手,進(jìn)一步了解計(jì)算機(jī)得工作原理,接口技術(shù),提高計(jì)算機(jī)硬件,軟件綜合應(yīng)用能力,即對(duì)微機(jī)原理,接口技術(shù),匯編語(yǔ)言程序設(shè)計(jì)進(jìn)行綜合訓(xùn)練。
二、內(nèi)容
密碼鎖在輸入密碼正確的條件下輸出開鎖電平,控制電控鎖開啟,同
顯示00字樣。當(dāng)輸入密碼錯(cuò)誤時(shí),發(fā)出錯(cuò)誤警告聲音,同時(shí)顯示FF字樣。當(dāng)六次誤碼輸入的條件下,產(chǎn)生報(bào)警電平報(bào)警。還可以實(shí)現(xiàn)對(duì)密碼的修改,修改成功后,蜂鳴器發(fā)出確認(rèn)音。
三、設(shè)計(jì)任務(wù)
1、選用8086和適當(dāng)?shù)拇鎯?chǔ)器及接口芯片完成相應(yīng)的功能。
2、用LED顯示器顯示電子鎖的當(dāng)前狀態(tài)。
3、畫出詳細(xì)的硬件連接圖。
4、給出程序設(shè)計(jì)思路、畫出軟件流程圖。
5、給出地址分配表。
6、給出所有程序清單并加上必要注釋。
7、完成設(shè)計(jì)說(shuō)明書(列出參考文獻(xiàn),所用器件型號(hào))。
四、方案選擇及原理
這次的設(shè)計(jì)要求是在密碼輸入正確時(shí)輸出開鎖電平和顯示“00”,密碼錯(cuò)誤時(shí)顯示“FF”和蜂鳴器發(fā)出報(bào)警聲音等,我們采用8255A的A口低四位和C口的低三位組成4x3的矩陣鍵盤,同時(shí)A口的低六位為選管;B口作為顯示器的輸出;C口高四位的PC4口輸出開鎖電平,對(duì)于6次密碼錯(cuò)誤輸入,PC5口輸出報(bào)警電平。用8253計(jì)數(shù)器產(chǎn)生警告音和確認(rèn)音。用蜂鳴器發(fā)聲次數(shù)來(lái)區(qū)分確認(rèn)和警告聲音,一聲表示確認(rèn),三聲表示警告。采用Proteus自帶的鍵盤元件KEYPAD-PHONE,0-9為數(shù)字鍵,#為確認(rèn)/返回鍵和*為密碼修改鍵,每次對(duì)鍵盤掃描,獲得對(duì)應(yīng)的鍵值。
五、所用器件
CPU8086、并行接口8255A、地址鎖存器74LS273、4 線-16 線譯碼器74HCT154、石英晶振,可編程定時(shí)/計(jì)數(shù)器8253、共陰極數(shù)碼管、各類邏輯門、蜂鳴器,電阻、鍵盤等。
主要器件簡(jiǎn)介
CPU8086

8086是Inter系列的16位微處理器,芯片上有2.9萬(wàn)個(gè)晶體管,采用 HMOS工 藝制造,用單一的+5V電源,時(shí)鐘頻率為5MHz~10MHz。 8086有16根數(shù)據(jù)線和20根地址線,它既能處理16位數(shù)據(jù),也能處理8位數(shù)據(jù)。可 尋址的內(nèi)存空間為1MB。

并行接口8255
Intel 8086/8088 系列的可編程外設(shè)接口電路(Programmable Peripheral Interface)簡(jiǎn)稱 PPI,型號(hào)為8255(改進(jìn)型為8255A及8255A-5),具有24條輸入/輸出引腳、可編程的通用并行輸入/輸出接口電路。它是一片使用單一+5V電源的40腳雙列直插式大規(guī)模集成電路。8255A的通用性強(qiáng),使用靈活,通過它CPU可直接與外設(shè)相連接。
可編程定時(shí)/計(jì)數(shù)器8253
8253可編程定時(shí)器/計(jì)數(shù)器是8086微機(jī)系統(tǒng)常用的定時(shí)/計(jì)數(shù)器芯片,它具有定時(shí)與計(jì)數(shù)兩大功能。8253可編程定時(shí)器/計(jì)數(shù)器具有3個(gè)獨(dú)立的16位計(jì)數(shù)器通過編程可選擇六種工作方式 ,可選擇二進(jìn)制或十進(jìn)制計(jì)數(shù),最高計(jì)數(shù)速率可達(dá)2.6MHz。所有的輸入、輸出電平都與TTL兼容。

地址鎖存器74LS273
地址鎖存器74LS273是帶清除端的八D觸發(fā)器,只有清除端為高電平時(shí)才具有鎖存功能,鎖存控制端為11腳CLK,在上升沿鎖存。8086的ALE端輸出的鎖存控制信號(hào)必須經(jīng)反相器后才能連到74LS273的CLK端,以滿足CLK在上升沿鎖存的要求。
4 線-16 線譯碼器74HCT154
74HCT154 為4 線-16 線譯碼器,將4 個(gè)二進(jìn)制編碼輸入譯成16 個(gè)彼獨(dú)立的輸出之一,并能將數(shù)據(jù)從一個(gè)輸入線分配到16 個(gè)輸出的任意一個(gè)而實(shí)現(xiàn)解調(diào)功能,與大部分TTL 和DTL [url=]電路[/url]完全兼容。其工作原理如下:這種單片4 線—16 線譯碼器非常適合用于高性能存儲(chǔ)器的譯碼器。當(dāng)兩個(gè)選通輸入G1 和G2 為低時(shí),它可將4 個(gè)二進(jìn)制編碼的輸入譯成16 個(gè)互相獨(dú)立的輸出之一。實(shí)現(xiàn)解調(diào)功能的辦法是:用4 個(gè)輸入線寫出輸出線的地址,使得在一個(gè)選通輸入為低時(shí)數(shù)據(jù)通過另一個(gè)選通輸入。當(dāng)任何一個(gè)選通輸入是高時(shí),所有輸出都為高。
六、原理圖
1、8086和8255A連接
8255A地址分配:PA:200H  PB:202H  PC:204H  控制寄存器:206H
為了滿足8255A的四個(gè)端口地址必須為偶地址這一要求,將8255A的A1、A0分別與8086系統(tǒng)地址總線的A2、A1相連,并且,CPU在對(duì)8255A的端口進(jìn)行訪問時(shí),總是將地址中的A0設(shè)置為0。
2、8255A的A口、C口與矩陣鍵盤連接
鍵盤元件KEYPAD-PHONE,0-9為數(shù)字鍵,#為確認(rèn)/返回鍵和*為密碼修改鍵。
數(shù)字鍵1-9的鍵值為相應(yīng)的數(shù)值,數(shù)字鍵0的鍵值為0BH,功能鍵*的鍵值為0AH,能鍵#的鍵值為0CH。
3、8255A的A口、B口與數(shù)碼管的連接
8255A的B口輸出數(shù)碼管的段碼,A口輸出數(shù)碼管的位碼。
4、8086與8253連接
8253地址分配:計(jì)數(shù)器0:400H 計(jì)數(shù)器1:402H 計(jì)數(shù)器2:404H控制寄存器:406H
為了滿足8255A的四個(gè)端口地址必須為偶地址這一要求,將8255A的A1、A0分別與8086系統(tǒng)地址總線的A2、A1相連,并且,CPU在對(duì)8255A的端口進(jìn)行訪問時(shí),總是將地址中的A0設(shè)置為0。

  • 完整電路圖
七、軟件設(shè)計(jì)思路
整個(gè)硬件設(shè)計(jì),主要采用器件CPU8086、并行接口8255和可編程定時(shí)/計(jì)數(shù)器8253。由并行接口8255控制鍵盤掃描、數(shù)碼管顯示、開鎖電平以及報(bào)警電平,8255的工作方式是A口輸出,B口輸出,C口高四位輸出,C口低四位輸入。通過鍵盤掃描獲得對(duì)應(yīng)的鍵值,通過對(duì)鍵值判斷,判斷按鍵是功能鍵或數(shù)字鍵,達(dá)到輸入密碼,修改密碼,確認(rèn)輸入,返回等功能。由可編程定時(shí)/計(jì)數(shù)器8253產(chǎn)生方波,控制蜂鳴器產(chǎn)生“滴”聲。8253工作在計(jì)數(shù)器0方式3,產(chǎn)生方波,通過延時(shí),是蜂鳴器產(chǎn)生“滴”。8253在每次調(diào)用發(fā)聲子程序中初始化。
根據(jù)條件要求,程序首先需要實(shí)現(xiàn)的是輸入密碼。為了區(qū)別輸入密碼和修改密碼,當(dāng)數(shù)碼管顯示都顯示“—”,是輸入密碼。當(dāng)數(shù)碼管全滅時(shí),是修改密碼。當(dāng)密碼輸入完且按下確認(rèn)鍵,則輸入數(shù)字與密碼比對(duì)。密碼正確,則輸出開鎖電平(高電平有效)。在此時(shí),則可以通過功能鍵修改密碼,密碼修改成功發(fā)出“滴”聲。若不需要,按返回鍵返回。若密碼錯(cuò)誤,則發(fā)出三聲“滴”聲,密碼錯(cuò)誤次數(shù)加1,并判斷是否已經(jīng)輸入六次錯(cuò)誤,是則輸出報(bào)警電平(高電平有效),并置密碼錯(cuò)誤次數(shù)置0,等待返回鍵返回;否則等待返回按鍵返回。
為了實(shí)現(xiàn)上述程序,首先要初始化8086、8255,接著進(jìn)入鍵盤掃描。每次有按鍵輸入后,還應(yīng)判斷按鍵是否彈起,可以實(shí)現(xiàn)鍵盤消抖。無(wú)論密碼正確與否,均需要通過返回鍵才能返回,所以每次顯示完后都要對(duì)鍵盤掃描,判斷是否按下返回鍵,有則退出鍵盤掃描,沒有則繼續(xù)掃描。開鎖電平以及報(bào)警電平均在返回時(shí)置低電平。
、流程圖
主程序流程圖


修改密碼子程序流程圖開鎖子程序流程圖



































閉鎖子程序流程圖


十、設(shè)計(jì)中的難點(diǎn)
1.硬件
雖然是第一次接觸proteus,在硬件接線方面遇到種種困難。特別是總線的接法,因?yàn)橐郧皼]有接觸過,完全無(wú)從下手。但是經(jīng)過幾天的找資料以及學(xué)習(xí),通過多次的嘗試,終于把硬件接線完成。
2.軟件
軟件設(shè)計(jì)基于我們這學(xué)期微機(jī)實(shí)驗(yàn)課上的鍵盤掃描程序。整個(gè)系統(tǒng)中,我覺得最重要的同時(shí)最難的就是鍵盤掃描程序的設(shè)計(jì)。一開始,對(duì)于鍵盤掃描還未完全搞懂,還沒有對(duì)鍵盤賦鍵值這個(gè)概念,導(dǎo)致前期一直都在探索中。接著,程序可以獲得相應(yīng)的鍵值,可是獲得按鍵值后就很不穩(wěn)定,比如,我想通過#鍵來(lái)達(dá)到確認(rèn)和返回兩個(gè)功能,但是總是一確認(rèn)以后就馬上執(zhí)行返回功能。程序邏輯沒有錯(cuò)誤,后來(lái)參考書本的程序,原來(lái)每次獲得鍵值后都要對(duì)鍵盤進(jìn)行再次掃描,判斷按鍵是否彈起,未彈起則跳到下一步。 如此,#鍵就能完美執(zhí)行這兩個(gè)功能。
十一、收獲及體會(huì)
1、下面就以硬件方面我做一下總結(jié):

硬件部分主要是設(shè)計(jì)原理圖跟連接線路,這次主要是用到Proteus這個(gè)軟件,這個(gè)軟件之前沒接觸過,所以在下載下來(lái)以后第一件事就是上網(wǎng)看教程,看了兩三個(gè)教程之后大概就明白了它的大體操作,開始自己動(dòng)手繪圖。
在繪圖之前,根據(jù)需要實(shí)現(xiàn)的功能,選定要用到的元件,最后初步定下來(lái)一個(gè)圖樣,但是在實(shí)際繪圖過程中發(fā)現(xiàn)太過復(fù)雜了,又重新制定了一個(gè)圖樣。因?yàn)槭堑谝淮斡眠@個(gè)軟件,里面很多功能都不懂,經(jīng)常點(diǎn)出很多不懂得文件,最后不得不重新設(shè)計(jì),導(dǎo)致繪圖時(shí)間大大增加。在多次實(shí)踐后我終于較為熟練的掌握里面的工具了,后面的繪圖過程也就相對(duì)來(lái)說(shuō)比較輕松,找出了自己繪制元件的時(shí)候有些麻煩,不過碰到不會(huì)的就上網(wǎng)百度或者問問同學(xué),其實(shí)這個(gè)繪圖過程還是挺有意思的。線路圖終于接好了,這里可以總結(jié)為三點(diǎn):
第一,在繪圖之前一定要先熟練掌握Proteus這個(gè)軟件;第二,一點(diǎn)要把程序看懂,這樣才可以合理布線路圖;第三,在搜索元件的過程中可以大量的求助百度,里面有很多元件庫(kù)表,這樣可以大大縮短查找時(shí)間。
通過這一兩個(gè)星期的學(xué)習(xí),掌握了Proteus一些基本的操作以及仿真,相信對(duì)以后的學(xué)習(xí)生活中都大有幫助。

2、軟件設(shè)計(jì)總結(jié):

這次課程設(shè)計(jì)中,最重點(diǎn)的部分應(yīng)該屬于軟件部分。剛剛學(xué)習(xí)了《微機(jī)原理與接口技術(shù)》這么課程,一切都覺得那么新鮮。自己一些想法,可以通過實(shí)踐來(lái)實(shí)現(xiàn)。軟件設(shè)計(jì)之前,自己大概想好了大體的思路,但是程序需要嚴(yán)格的邏輯,嚴(yán)格的語(yǔ)法,有時(shí)按著自己的思路去寫程序,卻總是發(fā)現(xiàn)錯(cuò)誤,或者程序不穩(wěn)定,有時(shí)是達(dá)不到預(yù)期的效果。理論和實(shí)踐還是有著很多的差距。這次課程設(shè)計(jì)中,收獲最大的是如何確定一個(gè)程序的主線。以前寫程序,就是想到哪就寫哪,寫完以后,才發(fā)現(xiàn),有一個(gè)小的功能已經(jīng)無(wú)法實(shí)現(xiàn)。如果要加入這個(gè)功能,卻需要改動(dòng)整個(gè)程序,導(dǎo)致程序的兼容性很差。在這次設(shè)計(jì)中,我先確定了整個(gè)程序的主線。輸入密碼,對(duì)比密碼,密碼正確或密碼錯(cuò)誤。然后其他程序皆在這幾個(gè)部分中實(shí)現(xiàn)。
比如修改密碼則在密碼正確中實(shí)現(xiàn),開鎖電平也是在密碼正確中輸出;而報(bào)警電平則在密碼錯(cuò)誤部分實(shí)現(xiàn)。由此,我就確定了整個(gè)程序的框架,剩下的就是注意一些細(xì)節(jié)的問題,一些邏輯的問題。
     經(jīng)過一周的奮戰(zhàn),終于還是完成了整個(gè)程序的編寫。在設(shè)計(jì)程序的過程中,我不僅對(duì)以前學(xué)過的匯編語(yǔ)言進(jìn)行了重溫和查漏補(bǔ)缺,而且對(duì)程序整體的把握和細(xì)節(jié)的處理能力得到了很大的提高。畢竟看程序和寫程序是有很大區(qū)別的,只有實(shí)踐才能真正將匯編語(yǔ)言學(xué)到家。看到仿真的結(jié)果和題目所要求的一樣,心情倍感欣慰,同時(shí)也很有成就感。
整個(gè)程序完成了,雖然已經(jīng)達(dá)到了題目的要求,但是自己覺得還可以繼續(xù)改善。用句至理名言:好作文不是寫出來(lái)的,是改出來(lái)的。我此刻只想說(shuō)的是:好程序不是寫出來(lái)的,也是改出來(lái)。在以后的日子了,有空的時(shí)候可以拿出自己的程序,好好修改完善,實(shí)現(xiàn)更多的功能,程序進(jìn)一步優(yōu)化。


單片機(jī)源程序如下:
  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計(jì)數(shù)器0端口地址
  8. MY8253_COUNT1  EQU   IOY1+01H*2    ;8253計(jì)數(shù)器1端口地址
  9. MY8253_COUNT2  EQU   IOY1+02H*2    ;8253計(jì)數(shù)器2端口地址
  10. MY8253_MODE    EQU   IOY1+03H*2    ;8253控制寄存器端口地址


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

  18. STRING DB   01H,02H,03H,04H,05H,06H    ;初始密碼,密碼內(nèi)存空間
  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             ;開鎖電平、報(bào)警電平置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                  ;確認(rèn)鍵
  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                   ;密碼比對(duì)
  57.         CMP CX,0FFH
  58.         JZ SHOW1
  59.         JMP SHOW2
  60. SHOW1:  CALL SHOWC                    ;密碼錯(cuò)誤              
  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                 ;設(shè)置第1行第1列的對(duì)應(yīng)的鍵值
  87.             JMP  KCODE

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

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


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

  98. NEXT:   ADD CL,3                                       
  99.             MOV  AL,CH
  100.             TEST AL,08H                 ;檢測(cè)是否掃描到第4行
  101.             JZ   KERR                   ;是則跳回到開始處
  102.         ROL  AL,1                   ;沒檢測(cè)到第4行則準(zhǔn)備檢測(cè)下一列
  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                  ;選通一個(gè)數(shù)碼管   
  142.        MOV  AL,[SI]                ;取出緩沖區(qū)中存放鍵值                  
  143.        MOV  BX,OFFSET DTABLE
  144.            AND  AX,00FFH
  145.            ADD  BX,AX                  
  146.            MOV  AL,[BX]                ;將鍵值作為偏移和鍵值基地址相加得到相應(yīng)的鍵值
  147.        MOV  DX,MY8255_B
  148.            OUT  DX,AL                  ;寫入數(shù)碼管A~Dp
  149.            CALL DALLY
  150.            INC  SI                     ;取下一個(gè)鍵值
  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   ;密碼比對(duì)子程序
  171.    
  172.       
  173.         MOV SI,0205H
  174.         MOV DI,OFFSET STRING
  175.         MOV CX,0                     ; 密碼正確,則輸出CX=00H,為密碼正確的標(biāo)志
  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                ;密碼錯(cuò)誤,則CX=0FFH為密碼錯(cuò)誤的標(biāo)志
  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                ;調(diào)用修改密碼子程序
  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                ;確認(rèn)則發(fā)出"滴"的確認(rèn)音
  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   ;放入密碼內(nèi)存空間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]              ;取出密碼錯(cuò)誤次數(shù),并判斷是否已經(jīng)達(dá)到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             ;已達(dá)到六次,則輸出報(bào)警電平
  327.         MOV  AL,020H
  328.         OUT  DX,AL  
  329.         MOV  BL,0                     ;密碼錯(cuò)誤次數(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                 ;計(jì)數(shù)器0,方式3  
  345.          OUT  DX,AL
  346.       
  347.       MOV AX,0020H         
  348.       MOV DX,MY8253_COUNT0
  349.       OUT DX,AL                   ;裝入計(jì)數(shù)初值
  350.       MOV AL,AH
  351.       OUT DX,AL
  352.       CALL DALLYS
  353.       POP AX
  354. QUITRI: MOV DX,MY8253_MODE          ;退出時(shí)設(shè)置8253為方式2,OUT0置1
  355.         MOV AL,34H   
  356.         OUT DX,AL
  357.         
  358. RING ENDP  
  359.       

  360. DALLYS PROC NEAR                      ;8253延時(shí)子程序

  361. D1S:   MOV AX,0FFFH
  362. D2S:   DEC AX
  363.       JNZ D2S
  364.       RET
  365. DALLYS ENDP
  366.    
  367. DALLY PROC NEAR                    ;,8255軟件延時(shí)子程序
  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
復(fù)制代碼


所有資料51hei提供下載:
http://m.zg4o1577.cn/bbs/dpj-142463-1.html



評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

我也不能仿真...準(zhǔn)確來(lái)說(shuō)是無(wú)法成功進(jìn)行操作
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品综合久久久久久五月天 | 四虎成人免费视频 | av电影手机版 | 日韩欧美三级 | 欧美日韩久久精品 | 国产激情综合五月久久 | 亚洲日本乱码在线观看 | 97超碰站| 免费播放一级片 | 久草成人| 日韩免费福利视频 | 亚州综合在线 | 国产 欧美 日韩 一区 | 古装人性做爰av网站 | 欧美在线精品一区 | 91 在线 | 龙珠z在线观看 | 免费观看一级毛片 | 黄色成人av| 亚洲精品久久区二区三区蜜桃臀 | 国产一区二区精品在线观看 | 亚洲国产二区 | 鸡毛片| 99精品观看| 国产精品美女一区二区 | 亚洲黄色网址视频 | 国产色黄 | 亚洲精品国产a久久久久久 午夜影院网站 | 久久久精品高清 | 99久久久久久 | 婷婷开心激情综合五月天 | 亚洲第一中文字幕 | 久久伊| 国产日韩一区二区三区 | 精精国产视频 | 国产成人综合网 | 国产精品一区视频 | 色偷偷人人澡人人爽人人模 | 日本一区二区三区免费观看 | 瑞克和莫蒂第五季在线观看 | 久久久精品天堂 |