單片機課程設(shè)計---基于51單片機的四位密碼鎖設(shè)計_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  題目: 基于51單片機的四位密碼鎖設(shè)計 </p><p><b>  目錄</b></p><p>  第1章緒論-------------------------------3</p><p>  第2章 課程設(shè)計分析------------------3</p><p>  第3章 硬件

2、電路設(shè)計----------------------4</p><p>  3.1 單片機最小系統(tǒng)------------------------------------------4</p><p>  3.2 LED顯示電路設(shè)計---------------------------------------5</p><p>  3.3 鍵盤電路設(shè)計------

3、-------------------------------------6</p><p>  第4章 系統(tǒng)軟件設(shè)計---------------------------7</p><p>  4.1 軟件總體設(shè)計思路-------------------------------------------7</p><p>  4.2 各子程序的設(shè)計-------

4、----------------------------------7</p><p>  第5章 參考文獻----------------------------------15</p><p>  第6章 心得體會---------------------------11</p><p>  附錄---------------------------------

5、----12</p><p>  附錄A源程序清單--------------------------------------------17</p><p>  附錄B硬件原理圖--------------------------------------------23</p><p><b>  一、緒論</b></p>&l

6、t;p>  電子密碼鎖是一種通過單片機來控制機械開關(guān)的閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡易的電路產(chǎn)品,也有基于芯片的性價比較高的產(chǎn)品?,F(xiàn)在應(yīng)用較廣的電子密碼鎖是以芯片為核心,通過編程來實現(xiàn)的。其性能和安全性已大大超過了機械鎖。</p><p>  在安全技術(shù)防范領(lǐng)域,具有防盜報警功能的電子密碼鎖逐漸代替?zhèn)鹘y(tǒng)的機械式密碼鎖,克服了機械式密碼鎖密碼量少、安全性能差的缺點,使密碼鎖無論在技術(shù)上

7、還是在性能上都大大提高一步。隨著大規(guī)模集成電路技術(shù)的發(fā)展,特別是單片機的問世,出現(xiàn)了帶微處理器的智能密碼鎖,它除具有電子密碼鎖的功能外,還引入了智能化管理、專家分析系統(tǒng)等功能,從而使密碼鎖具有很高的安全性、可靠性,應(yīng)用日益廣泛。</p><p><b>  二、課程設(shè)計分析</b></p><p><b>  1、任務(wù)要求:</b></p&

8、gt;<p>  1、密碼鎖由4X4鍵盤和4位數(shù)碼管組成。 </p><p>  2、當(dāng)輸入密碼時,只顯示“8.”,當(dāng)密碼位數(shù)輸入完畢按下確認(rèn)鍵時,對輸入的密碼與設(shè)定的密碼進行比較,若密碼正確,則門開,此處用LED發(fā)光二極管亮一秒鐘做為提示。若密碼不正確,則可以從新輸入密碼。如連續(xù)三次輸入錯誤,則禁止輸入。</p><p>  2、總體開發(fā)計劃如下:</p>&

9、lt;p>  通過討論,本課程設(shè)計可劃分為硬件部分與軟件部分,硬件部分主要分為以下幾個模塊:系統(tǒng)主控制模塊(最小系統(tǒng)板),顯示模塊以及按鍵模塊,這些模塊都是通過單片機來控制的。硬件電路通過PROTEUS繪制,軟件部分主要是用KEIL編寫程序,實現(xiàn)各個模塊的功能,最后將KEIL編寫的程序通過PROTEUS仿真。</p><p>  3、系統(tǒng)總原理框圖如下:</p><p><b&

10、gt;  單片機控制方案</b></p><p>  4、設(shè)計要實現(xiàn)以下的功能:</p><p> ?、俅蜷_電源后,顯示器顯示初始狀態(tài);</p><p> ?、谠O(shè)置一個初始密碼,通電時只要輸入此密碼便可開鎖;</p><p> ?、圯斎朊艽a用矩形鍵盤,包括數(shù)字鍵和功能鍵:</p><p> ?、茉O(shè)置“輸入”

11、鍵,在每次要輸入密碼要先按“輸入”鍵,否則無法輸入密碼,若密碼與設(shè)定密碼相同,提示正確信息,否則提示錯誤信息,連續(xù)三次輸入密碼錯誤后,鎖住鍵盤一小時后才可以再次輸入密碼;</p><p> ?、菰O(shè)置“確定”鍵,用于輸完密碼鎖時識別密碼,再次按下確認(rèn)鍵二極管閃一秒用來表示開鎖;</p><p> ?、拊O(shè)置“取消”鍵,按下時返回最初的狀態(tài)即點輸入按鍵前的狀態(tài);</p><p

12、>  ⑥設(shè)置“重填”鍵,按下時,可以重新輸入密碼;</p><p>  ⑦LED數(shù)碼管顯示是否輸入密碼及已輸入的密碼的位數(shù);</p><p><b>  三、系統(tǒng)硬件電路圖</b></p><p><b>  單片機最小系統(tǒng)</b></p><p>  主控芯片以及晶振電路,采用12MHZ晶振

13、,一個機器周期為1us</p><p><b>  復(fù)位電路</b></p><p>  本設(shè)計中,采用P0口作為LED數(shù)據(jù)輸入端,P2口作為掃描端,P1外接4x4鍵盤。</p><p><b>  數(shù)碼管顯示電路</b></p><p>  本設(shè)計中采用動態(tài)顯示,數(shù)碼管顯示電路采用了1片74LS2

14、45芯片和0.1k限流電阻接P0口作為數(shù)據(jù)輸入端,PNP三極管加限流電阻接P2作為掃描端。</p><p>  74LS245引腳圖以及功能表:</p><p>  LED數(shù)碼管選用7SEG-MPX4-CA-BLUE的共陽極四位數(shù)碼管,引腳圖如下:</p><p>  3、4x4鍵盤的設(shè)計</p><p>  采用4x4矩陣式鍵盤,矩陣式鍵盤

15、又稱為行列式鍵盤,是將I/O口線的一部分作為行線,另一部分作為列線,按鍵設(shè)置在行線和列線的交叉點上,這種設(shè)計減少鍵盤與單片機I/O口接線的數(shù)目。只需要N個行線和M個列線就可以實現(xiàn)N*M個鍵的操作。與P1口相連接。外接5v電源和5.1k的上拉電阻,保證鍵盤穩(wěn)定運行。軟件上采用100ms延時去抖。</p><p><b>  系統(tǒng)的軟件設(shè)計</b></p><p><

16、;b>  1、軟件設(shè)計思路</b></p><p>  電子密碼鎖工作的主要過程是LED數(shù)碼管提示開始輸入密碼,通過鍵盤輸入密碼,同時LED顯示密碼輸入情況,按下確認(rèn)鍵后識別密碼的對與錯,并做出相應(yīng)的處理。</p><p>  密碼的設(shè)定,原始密碼的存放地址為31H—34H,修改后的密碼存放地址為41H—43H。</p><p>  通電時,讓數(shù)碼

17、管顯示4個“—”,每次要輸入密碼要先進入輸入狀態(tài),初始的輸入狀態(tài)無顯示,否則無法輸入密碼。還未輸完4位密碼時點確定、輸入鍵沒反應(yīng),如果按下取消鍵跳回初始狀態(tài),按下重填鍵返回輸入初始狀態(tài),輸滿4位,點確定,立即識別密碼。密碼正確顯示4個“P”,再次按下確認(rèn)鍵,外界的發(fā)光二極管導(dǎo)通閃爍1s表示開箱,然后跳回初始狀態(tài)。密碼不正確時,顯示4個“E”,后跳回初始狀態(tài),連續(xù)三次輸入密碼錯誤后,系統(tǒng)鎖定,等待1h后才可在此輸入密碼,提高了系統(tǒng)的安全可

18、靠性。</p><p>  2、初始密碼以及功能按鍵的定義:</p><p>  MM1 DATA 31H</p><p>  MM2 DATA 32H</p><p>  MM3 DATA 33H</p><p>  MM4 DATA 34H</p><p><b>  X EQU

19、00H</b></p><p><b>  Y EQU 00H</b></p><p><b>  W EQU 00H</b></p><p><b>  Z EQU 00H</b></p><p>  MOV MM1,#X</p><p>

20、  MOV MM2,#Y</p><p>  MOV MM3,#W</p><p>  MOV MM4,#Z;設(shè)定初始密碼為“0000”</p><p>  MOV R7,#03H;設(shè)定允許連續(xù)輸入錯誤的次數(shù)</p><p>  MOV 35H,#0AH;輸入鍵</p><p>  MOV 36H,#0BH;確認(rèn)鍵&l

21、t;/p><p>  MOV 37H,#0CH;取消鍵</p><p>  MOV 38H,#0DH;返回鍵</p><p>  MOV 39H,#0EH;無效鍵</p><p>  MOV 3AH,#0FH;無效鍵</p><p><b>  矩陣鍵盤的掃描</b></p><p

22、>  陣式鍵盤又稱為行列式鍵盤,是將I/O口線的一部分作為行線,另一部分作為列線,按鍵設(shè)置在行線和列線的交叉點上,如圖所示。這種設(shè)計減少鍵盤與單片機I/O口接線的數(shù)目。只需要N個行線和M個列線就可以實現(xiàn)N*M個鍵的操作。</p><p><b>  行掃描法識別的原理</b></p><p>  先使輸出口輸出FEH(首列掃描字),即使第0列為0,然后讀入行狀態(tài)

23、判斷行線是否有低電平;如果沒有低電平,再使輸出口輸出FDH(第二列掃描字)。以此類推,當(dāng)行線中有狀態(tài)為低電平時,則找到閉合鍵。根據(jù)此時0電平所在的行號和列號得出閉合鍵的鍵號值,期計算公式為:</p><p>  閉合鍵的鍵號值=行首鍵號+列號</p><p>  2)判斷閉合鍵是否釋放</p><p>  鍵閉合一次僅進行一次的鍵功能操作。等待按鍵釋放后去除抖動,再

24、將鍵值送入累加器A中,然后執(zhí)行鍵功能操作</p><p><b>  具體程序如下:</b></p><p>  LINEDATA 47H;按鍵行號</p><p>  ROWDATA 48H;按鍵列號</p><p>  ;以下為鍵盤掃描程序,計算鍵值并存入A</p><p&

25、gt;  KEY: MOV P1,#0F0H;掃描行碼</p><p><b>  LIN1:</b></p><p>  JNB P1.0,LIN2 ;該行無鍵按下,掃描下一行</p><p>  LCALL DELAY100ms</p><p>  JNB P1.0,LIN2</p>

26、<p>  MOV LINE,#00H ;存行號</p><p>  LJMP RSCAN ;掃描列, 求列值</p><p><b>  LIN2:</b></p><p>  JNB P1.1,LIN3</p><p>  LCALL DELAY100ms</p

27、><p>  JNB P1.1,LIN3</p><p>  MOV LINE,#01H ;存行號</p><p>  LJMP RSCAN</p><p><b>  LIN3:</b></p><p>  JNB P1.2,LIN4</p><p> 

28、 LCALL DELAY100ms</p><p>  JNB P1.2,LIN4 </p><p>  MOV LINE,#02H ;存行號</p><p>  LJMP RSCAN</p><p><b>  LIN4:</b></p><p>  JNB P1.3,

29、LIN1</p><p>  LCALL DELAY100ms</p><p>  JNB P1.3,LIN1</p><p>  MOV LINE,#03H ;存行號</p><p>  RSCAN:MOV P1,#0FH ;掃描列碼</p><p><b>  C1:</b&

30、gt;</p><p>  JNB P1.4,C2</p><p>  MOV ROW,#00H ;存列號</p><p>  LJMP CALCU</p><p><b>  C2:</b></p><p>  JNBP1.5,C3</p><p>  M

31、OVROW,#01H ;存列號 </p><p>  LJMPCALCU</p><p><b>  C3:</b></p><p>  JNBP1.6,C4</p><p>  MOVROW,#02H ;存列號</p><p>  LJMPCALCU&

32、lt;/p><p><b>  C4:</b></p><p>  JNB P1.7,C1</p><p>  MOV ROW,#03H</p><p><b>  NOP</b></p><p><b>  NOP</b></p><

33、;p>  CALCU: ;計算鍵值</p><p>  MOV A,LINE</p><p>  MOVB,#04H ;行值乘4+列值=鍵值</p><p><b>  MULAB</b></p><p><b>  ADDA,R

34、OW</b></p><p>  CALLDELAY100MS</p><p><b>  RET</b></p><p><b>  LED數(shù)碼管顯示</b></p><p>  設(shè)計的是4位的密碼鎖,所以數(shù)碼管選用7SEG-MPX4-CA-BLUE(共陽)。</p>

35、<p>  ⑴設(shè)置密碼鎖初的始狀態(tài)為“————”如下圖</p><p> ?、圃诿看我斎朊艽a要先按“輸入”鍵,否則無法輸入密碼,按下“輸入”鍵時,不顯示,則可以輸入密碼,如下圖</p><p><b>  通過以下程序?qū)崿F(xiàn):</b></p><p><b>  START:</b></p><

36、;p>  MOVP0,#0BFH;沒有輸入時顯示"-"</p><p>  MOVP2,#0F0H;4個非門都導(dǎo)通</p><p>  CALLDELAY100MS</p><p>  CALLKEY;判斷是否按下輸入密碼鍵,沒有按下返回主程序</p><p>  CJNE A,35H,START

37、</p><p><b>  MAIN:</b></p><p>  MOVP0,#0FFH;沒有輸入時沒有顯示</p><p>  MOVP2,#0F0H ;4個非門都導(dǎo)通</p><p>  CALLDELAY100MS</p><p><b>  JMP FIR

38、ST</b></p><p> ?、禽斎朊艽a時,如果輸入的是功能鍵,沒反應(yīng),若輸入的是數(shù)字鍵時,輸入1位、2位、3位、4位密碼時(不管正確與否)分別顯示如下圖:</p><p><b>  通過以下程序?qū)崿F(xiàn):</b></p><p>  ;***********數(shù)據(jù)錄入階段*********</p><p>

39、  FIRST:CALLKEY</p><p>  CJNEA,35H,Q11;判斷是否按下輸入,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</p><p>  Q11:CJNEA,36H,Q12;判斷是否按下確定,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</

40、p><p>  Q12:CJNEA,37H,Q13;判斷是否按下取消,按下返回START</p><p>  JMPSTART</p><p>  Q13:CJNEA,38H,Q14;判斷是否按下重填,按下返回MAIN,重新輸入密碼</p><p>  JMP MAIN</p><p>  Q14:

41、CJNEA,39H,Q15;判斷是否按下無效鍵,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</p><p>  Q15:CJNEA,3AH,FIRST1;判斷是否按無效鍵,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</p><p>  FIRST1:MOV41H,A

42、;輸入的第一位密碼存41H</p><p>  MOVP0,#00H;輸入一位時,顯示"8."</p><p>  MOVP2,#0FEH</p><p>  CALLDELAY100MS</p><p>  SECOND:CALLKEY</p><p>  CJNEA,35H,

43、Q21</p><p>  JMPSECOND</p><p>  Q21:CJNEA,36H,Q22</p><p>  JMPSECOND</p><p>  Q22:CJNEA,37H,Q23</p><p>  JMPSTART</p><p>  Q23:CJNE

44、A,38H,Q24</p><p><b>  JMPMAIN</b></p><p>  Q24:CJNEA,39H,Q25</p><p>  JMPSECOND</p><p>  Q25:CJNEA,3AH,SECOND1</p><p>  JMPSECOND<

45、;/p><p>  SECOND1:MOV42H,A;第二位密碼存于42H</p><p>  MOVP0,#00H</p><p>  MOVP2,#0FCH;顯示2個"8."</p><p>  CALLDELAY100MS</p><p>  THIRD:CALL

46、KEY</p><p>  CJNEA,35H,Q31</p><p>  JMPTHIRD</p><p>  Q31:CJNEA,36H,Q32</p><p>  JMPTHIRD</p><p>  Q32:CJNEA,37H,Q33</p><p>  JMPST

47、ART</p><p>  Q33:CJNEA,38H,Q34</p><p><b>  JMPMAIN</b></p><p>  Q34:CJNEA,39H,Q35</p><p>  JMPTHIRD</p><p>  Q35:CJNEA,3AH,THIRD1<

48、/p><p>  JMPTHIRD</p><p>  THIRD1:MOV43H,A;第三位密碼存于43H</p><p>  MOVP0,#00H</p><p>  MOVP2,#0F8H;顯示3個"8."</p><p>  CALLDELAY100MS<

49、;/p><p>  FOURTH:CALLKEY</p><p>  CJNEA,35H,Q41</p><p>  JMPFOURTH</p><p>  Q41:CJNEA,36H,Q42</p><p>  JMPFOURTH</p><p>  Q42:CJNEA,37H

50、,Q43</p><p>  JMPSTART</p><p>  Q43:CJNEA,38H,Q44</p><p><b>  JMPMAIN</b></p><p>  Q44:CJNEA,39H,Q45</p><p>  JMPFOURTH</p>&l

51、t;p>  Q45:CJNEA,3AH,FOURTH1</p><p>  JMPFOURTH</p><p>  FOURTH1:MOV44H,A;第四位密碼存于44H</p><p>  MOVP0,#00H</p><p>  MOVP2,#0F0H;顯示4個"8."</p&

52、gt;<p>  CALLDELAY100MS</p><p> ?。?*******以上為輸入四位密碼,然后繼續(xù)掃描按鍵********</p><p><b>  FIFTH:</b></p><p><b>  CALLKEY</b></p><p>  Q51:CJNE

53、A,35H,Q52;判斷是否按下輸入,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIFTH</p><p>  Q52:CJNEA,37H,Q53;判斷是否按下取消</p><p>  JMPSTART</p><p>  Q53:CJNEA,38H,Q54 ;判斷是否按下重填</p&g

54、t;<p><b>  JMPMAIN</b></p><p>  Q54: CJNE A,39H,Q55 ;判斷是否按下無效鍵</p><p>  JMP FIFTH</p><p>  Q55:CJNEA,3AH,Q56;判斷是否按下無效鍵</p><p>  

55、JMPFIFTH</p><p>  Q56:CJNEA,36H,FIFTH ;判斷是否按下確定</p><p><b>  JMPPR</b></p><p> ?、让艽a驗證階段以及顯示</p><p><b>  PR:</b></p><p><b&

56、gt;  MOV A,41H</b></p><p>  CJNE A,MM1,ERR</p><p><b>  MOV A,42H</b></p><p>  CJNE A,MM2,ERR</p><p><b>  MOV A,43H</b></p><p>

57、;  CJNE A,MM3,ERR</p><p><b>  MOV A,44H</b></p><p>  CJNE A,MM4,ERR</p><p>  JMP PASS;判斷密碼正確性</p><p><b>  ERR:</b></p><p>  MOV P0,

58、#86H</p><p>  MOV P2,#0F0H ;顯示4個"E"</p><p>  CALL DELAY1s</p><p>  CALL DELAY1s</p><p>  DJNZ R7,ERR1</p><p>  MOV R7,#03H</p>

59、<p>  CALL DELAY1h ;鎖定系統(tǒng)1h才可繼續(xù)輸入密碼</p><p><b>  JMP START</b></p><p>  ERR1:JMP START ;輸入錯誤次數(shù)小于三次時跳回初始狀態(tài) </p><p><b&g

60、t;  錯誤時顯示如下</b></p><p><b>  PASS:</b></p><p>  MOV P0,#8CH</p><p>  MOV P2,#0F0H ;顯示4個"P"</p><p>  MOV R7,#03H</p><p&

61、gt;<b>  CALL KEY</b></p><p>  CJNE A,36H,PASS</p><p>  CLR P2.6 ;燈亮一秒</p><p>  CALL DELAY1s</p><p><b>  SETB P2.6</b></p>

62、<p><b>  JMP START</b></p><p><b>  正確時顯示如下:</b></p><p>  再次按下確認(rèn)鍵,發(fā)光二極管亮1s,再次跳回初始狀態(tài)。</p><p><b>  整個系統(tǒng)的電路圖</b></p><p><b>

63、  六、參考文獻</b></p><p>  王義軍,《單片機原理及應(yīng)用習(xí)題與實驗指導(dǎo)書》, 中國電力出版社;</p><p>  高偉,《AT89單片機原理及應(yīng)用》,國防工業(yè)出版社;</p><p>  蘭吉昌,《51單片機設(shè)計應(yīng)用百例》,機械工業(yè)出版社</p><p>  張桂蘭,《單片機原理與應(yīng)用》,機械工業(yè)出版社</

64、p><p>  李海濤,《PIC單片機應(yīng)用開發(fā)典型模塊》,國防工業(yè)出版社</p><p><b>  七、心得體會</b></p><p>  回顧起此次單片機課程設(shè)計,讓我感慨很多,從選題到定稿,從理論到實踐,在整整兩個星期的日子里,可以說是苦多于甜,但是可以學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多書本上所沒有學(xué)到過

65、的知識。</p><p>  兩周以來,整日埋頭于電路程序的設(shè)計,分析,組裝,繪制,仿真,總結(jié)以及打印材料等工作,。其實一開始真不知道該從何入手,短短幾天內(nèi),在各位老師的耐心知道和同學(xué)的幫助之下,開始在腦海里有了大致的模塊,就這樣整天埋在圖書館,面對電腦搜索資料,一塊一塊的電路慢慢拼成,于是又開始查找相關(guān)的資料,分析電路,根據(jù)自己的目的有效地編制程序,對比之下有進一步的完善,在形成電路大致模塊下又進一步盡可能的減

66、小成本,知道最終電路以自己最理想的形式出現(xiàn)。</p><p>  在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,單片機課程設(shè)計的重點就在于軟件算法的設(shè)計,需要有很巧妙的程序算法,雖然以前寫過幾次程序,但我覺得寫好一個程序不是一件簡單的事情。</p><p>  通過這次實習(xí),我真正學(xué)到了不少東西,真正體會到了理論聯(lián)系實際的重要性。課堂教學(xué)考慮到大多數(shù)同學(xué)的需求,主要強調(diào)基本知識,基本理論,基本方法

67、,基本技能。而這次設(shè)計正是為我們提供了一個深入學(xué)習(xí)、探索的機會,成為課堂教學(xué)的有益補充。</p><p>  附錄(源程序清單):</p><p>  MM1 DATA 31H</p><p>  MM2 DATA 32H</p><p>  MM3 DATA 33H</p><p>  MM4 DATA 34H<

68、;/p><p>  LINEDATA 47H;按鍵行號</p><p>  ROWDATA 48H;按鍵列號</p><p><b>  X EQU 00H</b></p><p><b>  Y EQU 00H</b></p><p><b>

69、  W EQU 00H</b></p><p><b>  Z EQU 00H</b></p><p>  MOV MM1,#X</p><p>  MOV MM2,#Y</p><p>  MOV MM3,#W</p><p>  MOV MM4,#Z</p><

70、p>  MOV R7,#03H</p><p>  MOV 35H,#0AH</p><p>  MOV 36H,#0BH</p><p>  MOV 37H,#0CH</p><p>  MOV 38H,#0DH</p><p>  MOV 39H,#0EH</p><p>  MOV

71、3AH,#0FH</p><p>  ;***************主程序***************</p><p><b>  START:</b></p><p>  MOVP0,#0BFH;沒有輸入時顯示"-"</p><p>  MOVP2,#0F0H;4個非門都導(dǎo)通<

72、/p><p>  CALLDELAY100MS</p><p>  CALLKEY;判斷是否按下輸入密碼鍵,沒有按下返回主程序</p><p>  CJNE A,35H,START</p><p><b>  MAIN:</b></p><p>  MOVP0,#0FFH;沒有輸入時沒

73、有顯示</p><p>  MOVP2,#0F0H ;4個非門都導(dǎo)通</p><p>  CALLDELAY100MS</p><p><b>  JMP FIRST</b></p><p>  ;*******************以下為鍵盤掃描程序,計算鍵值并存入A*****************&l

74、t;/p><p>  KEY: MOV P1,#0F0H;掃描行碼</p><p><b>  LIN1:</b></p><p>  JNB P1.0,LIN2 ;該行無鍵按下,掃描下一行</p><p>  LCALL DELAY100ms</p><p>  JNB P1.

75、0,LIN2</p><p>  MOV LINE,#00H ;存行號</p><p>  LJMP RSCAN ;掃描列, 求列值</p><p><b>  LIN2:</b></p><p>  JNB P1.1,LIN3</p><p>  LCALL

76、DELAY100ms</p><p>  JNB P1.1,LIN3</p><p>  MOV LINE,#01H ;存行號</p><p>  LJMP RSCAN</p><p><b>  LIN3:</b></p><p>  JNB P1.2,LIN4</p

77、><p>  LCALL DELAY100ms</p><p>  JNB P1.2,LIN4 </p><p>  MOV LINE,#02H ;存行號</p><p>  LJMP RSCAN</p><p><b>  LIN4:</b></p><p&

78、gt;  JNB P1.3,LIN1</p><p>  LCALL DELAY100ms</p><p>  JNB P1.3,LIN1</p><p>  MOV LINE,#03H ;存行號</p><p>  RSCAN: MOV P1,#0FH ;掃描列碼</p><p><b

79、>  C1:</b></p><p>  JNB P1.4,C2</p><p>  MOV ROW,#00H ;存列號</p><p>  LJMP CALCU</p><p><b>  C2:</b></p><p>  JNBP1.5,C3</p&

80、gt;<p>  MOVROW,#01H ;存列號 </p><p>  LJMPCALCU</p><p><b>  C3:</b></p><p>  JNBP1.6,C4</p><p>  MOVROW,#02H ;存列號</p><p

81、>  LJMPCALCU</p><p><b>  C4:</b></p><p>  JNB P1.7,C1</p><p>  MOV ROW,#03H</p><p><b>  NOP</b></p><p><b>  NOP</b&g

82、t;</p><p>  CALCU: ;計算鍵值</p><p>  MOV A,LINE</p><p>  MOVB,#04H ;行值乘4+列值=鍵值</p><p><b>  MULAB</b></p><p>&

83、lt;b>  ADDA,ROW</b></p><p>  CALLDELAY100MS</p><p><b>  RET</b></p><p>  ;***********數(shù)據(jù)錄入階段*********</p><p>  FIRST:CALLKEY</p><p&g

84、t;  CJNEA,35H,Q11;判斷是否按下輸入,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</p><p>  Q11:CJNEA,36H,Q12;判斷是否按下確定,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</p><p>  Q12:CJNEA,37H,Q13

85、;判斷是否按下取消,按下返回START</p><p>  JMPSTART</p><p>  Q13:CJNEA,38H,Q14;判斷是否按下重填,按下返回MAIN,重新輸入密碼</p><p>  JMP MAIN</p><p>  Q14:CJNEA,39H,Q15;判斷是否按下無效鍵,按下沒反應(yīng)(繼續(xù)掃描這

86、位密碼)</p><p>  JMPFIRST</p><p>  Q15:CJNEA,3AH,FIRST1;判斷是否按無效鍵,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIRST</p><p>  FIRST1:MOV41H,A;輸入的第一位密碼存41H</p><p>  M

87、OVP0,#00H;輸入一位時,顯示"8."</p><p>  MOVP2,#0FEH</p><p>  CALLDELAY100MS</p><p>  SECOND:CALLKEY</p><p>  CJNEA,35H,Q21</p><p>  JMPSECOND

88、</p><p>  Q21:CJNEA,36H,Q22</p><p>  JMPSECOND</p><p>  Q22:CJNEA,37H,Q23</p><p>  JMPSTART</p><p>  Q23:CJNEA,38H,Q24</p><p><b&

89、gt;  JMPMAIN</b></p><p>  Q24:CJNEA,39H,Q25</p><p>  JMPSECOND</p><p>  Q25:CJNEA,3AH,SECOND1</p><p>  JMPSECOND</p><p>  SECOND1:MOV42H,A

90、;第二位密碼存于42H</p><p>  MOVP0,#00H</p><p>  MOVP2,#0FCH;顯示2個"8."</p><p>  CALLDELAY100MS</p><p>  THIRD:CALLKEY</p><p>  CJNEA,35H,

91、Q31</p><p>  JMPTHIRD</p><p>  Q31:CJNEA,36H,Q32</p><p>  JMPTHIRD</p><p>  Q32:CJNEA,37H,Q33</p><p>  JMPSTART</p><p>  Q33:CJNEA

92、,38H,Q34</p><p><b>  JMPMAIN</b></p><p>  Q34:CJNEA,39H,Q35</p><p>  JMPTHIRD</p><p>  Q35:CJNEA,3AH,THIRD1</p><p>  JMPTHIRD</p&g

93、t;<p>  THIRD1:MOV43H,A;第三位密碼存于43H</p><p>  MOVP0,#00H</p><p>  MOVP2,#0F8H;顯示3個"8."</p><p>  CALLDELAY100MS</p><p>  FOURTH:CALLKEY&l

94、t;/p><p>  CJNEA,35H,Q41</p><p>  JMPFOURTH</p><p>  Q41:CJNEA,36H,Q42</p><p>  JMPFOURTH</p><p>  Q42:CJNEA,37H,Q43</p><p>  JMPSTART

95、</p><p>  Q43:CJNEA,38H,Q44</p><p><b>  JMPMAIN</b></p><p>  Q44:CJNEA,39H,Q45</p><p>  JMPFOURTH</p><p>  Q45:CJNEA,3AH,FOURTH1</

96、p><p>  JMPFOURTH</p><p>  FOURTH1:MOV44H,A;第四位密碼存于44H</p><p>  MOVP0,#00H</p><p>  MOVP2,#0F0H;顯示4個"8."</p><p>  CALLDELAY100MS</p

97、><p><b>  FIFTH:</b></p><p><b>  CALLKEY</b></p><p>  Q51:CJNEA,35H,Q52;判斷是否按下輸入,按下沒反應(yīng)(繼續(xù)掃描這位密碼)</p><p>  JMPFIFTH</p><p>  Q5

98、2:CJNEA,37H,Q53;判斷是否按下取消</p><p>  JMPSTART</p><p>  Q53:CJNEA,38H,Q54 ;判斷是否按下重填</p><p><b>  JMPMAIN</b></p><p>  Q54: CJNE A,39H,Q55 ;判

99、斷是否按下無效鍵</p><p>  JMP FIFTH</p><p>  Q55:CJNEA,3AH,Q56;判斷是否按下無效鍵</p><p>  JMPFIFTH</p><p>  Q56:CJNEA,36H,FIFTH ;判斷是否按下確定</p><p><b>  

100、JMPPR</b></p><p><b>  PR:</b></p><p><b>  MOV A,41H</b></p><p>  CJNE A,MM1,ERR</p><p><b>  MOV A,42H</b></p><p&g

101、t;  CJNE A,MM2,ERR</p><p><b>  MOV A,43H</b></p><p>  CJNE A,MM3,ERR</p><p><b>  MOV A,44H</b></p><p>  CJNE A,MM4,ERR</p><p><b

102、>  JMP PASS</b></p><p><b>  ERR:</b></p><p>  MOV P0,#86H</p><p>  MOV P2,#0F0H ;顯示4個"E"</p><p>  CALL DELAY1s</p><

103、;p>  CALL DELAY1s</p><p>  DJNZ R7,ERR1</p><p>  MOV R7,#03H</p><p>  CALL DELAY1h</p><p><b>  JMP START</b></p><p>  ERR1:JMP START</p&g

104、t;<p><b>  PASS:</b></p><p>  MOV P0,#8CH</p><p>  MOV P2,#0F0H ;顯示4個"P"</p><p>  MOV R7,#03H</p><p><b>  CALL KEY</b&

105、gt;</p><p>  CJNE A,36H,PASS</p><p>  CLR P2.6 ;燈亮一秒</p><p>  CALL DELAY1s</p><p><b>  SETB P2.6</b></p><p><b>  JMP START

106、</b></p><p>  ;*********100ms延時子程序**********</p><p>  DELAY100MS:</p><p><b>  MOV R2,#5</b></p><p>  D3: MOV R3,#40</p><p>  D4: MOV R4,#

107、248 </p><p><b>  DJNZ R4,$</b></p><p>  DJNZ R3,D4</p><p>  DJNZ R2,D3</p><p><b>  RET </b></p><p>  ;*********1s延時子程序**********<

108、;/p><p><b>  DELAY1s:</b></p><p>  MOV R2,#50</p><p>  D5: MOV R3,#40</p><p>  D6: MOV R4,#248 </p><p><b>  DJNZ R4,$</b></p>&

109、lt;p>  DJNZ R3,D6</p><p>  DJNZ R2,D5</p><p><b>  RET</b></p><p>  ;*********1min延時子程序**********</p><p>  DELAY1min:</p><p>  MOV R5,#60<

110、/p><p>  LOOP: CALL DELAY1s</p><p>  DJNZ R5,LOOP </p><p><b>  RET</b></p><p>  ;*********1h延時子程序**********</p><p><b>  DELAY1h:</b&g

111、t;</p><p>  MOV R6,#60</p><p>  LOOP1: CALL DELAY1min</p><p>  DJNZ R6,LOOP1 </p><p><b>  RET</b></p><p><b>  END</b></p>

溫馨提示

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

評論

0/150

提交評論