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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個匯編語言單片機電子密碼鎖程序+Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機匯編語言源程序如下:
  1. ;===================================================
  2. ;

  3.         RS BIT P2.7
  4.         RW BIT P2.6
  5.         E BIT P2.5
  6.         ENTER BIT 22H.0
  7.         OPEN BIT P3.6
  8.         SPEAK BIT P3.7
  9.         PASSBUF EQU 40H
  10.         KEYNUMBER EQU 41H       ;存放識別后的按鍵號
  11.         ORG 0000H
  12.         AJMP MAIN
  13.         ORG 0003H
  14.         JMP KEY_INT
  15.         ORG 000BH
  16.         AJMP INTT0
  17.         ORG 001BH
  18.         AJMP INTT1
  19.         ORG 0030H
  20. ;========== 主程序開始 ==============
  21. MAIN:   MOV 30H,#07H          ;輸入密碼為7位  最高只可設15位
  22.         MOV 42H,#200         ;設定報警的時間,42H單元里的數*50MS
  23.         MOV 43H,#250          ;設定開門時間     14的倍數(實際上液晶顯示器執行指令占用了時間,開門時間會比14*250MS大)
  24.         ;44H號單元存放輸入錯誤的次數
  25.         ;45H為定時器0中斷次數
  26.         ;46H為定時器1中斷次數
  27.         MOV 47H,#250          ;輸入密碼時間設定,50MS倍數
  28.         MOV SP,#60H
  29.         CLR OPEN
  30.         CLR SPEAK              ;初始化輸出設備
  31.         CLR ENTER              ;標志位初始化
  32.         
  33.         MOV TMOD,#11H          ;定時器工作方式2
  34.         MOV TH0,#3CH           ;初值50MS
  35.         MOV TL0,#0BH
  36.         MOV TH1,#3CH           
  37.         MOV TL1,#0BH
  38.         SETB EA
  39.         SETB ET0
  40.         SETB ET1
  41.         
  42.         MOV TCON,#00000000B     ;電平觸發
  43. START:  MOV R0,30H
  44.         MOV R1,#31H
  45. SS1:        MOV @R1,#00H
  46.         INC R1
  47.         DJNZ R0,SS1            ;將輸入密碼緩沖單元清零
  48.         MOV P1,#0FH            ;初始化按鍵口
  49.         MOV R1,#31H             ;從31號單元開始存放按建輸入的密碼         
  50.         CLR 20H                 ;報警標志清零
  51.         CLR 21H                 ;密碼超時標志
  52.         MOV 46H,#00H           ;超時后對定時器中斷次數清零,便于下一輪重新計時
  53. INIT:   ACALL SELLCD            ;設定液晶工作方式
  54.         ACALL LINE1             ;在第一行顯示
  55.         MOV DPTR,#MES_P         ;顯示請輸入密碼
  56.         ACALL DISPLAY
  57.         setb EX0               ;開中斷,允許鍵盤輸入
  58. KEYIN:  JB  21H,ERR             ;超時轉到錯誤程序
  59.         JNB ENTER,KEYIN         ;等待ENTER按下
  60.         CLR ENTER
  61.         clr EX0                ;密碼輸入完后鎖定鍵盤
  62. ;當使用邊沿觸發時用上面的指令為什么禁止不了中斷???
  63. ;========== 密碼判斷程序 ============
  64. COMP:            
  65.         MOV DPTR,#PASS
  66.         MOV R4,30H             ;密碼的長度
  67.         MOV A,#0
  68.         MOV R1,#31H            
  69. LOOP:   MOV R5,A
  70.         MOVC A,@A+DPTR
  71.         MOV PASSBUF,A          ;取出系統設定的密碼
  72.         MOV A,@R1              ;從31號單元開始取出輸入的密碼
  73.         CJNE A,PASSBUF,ERR     ;比較
  74.         MOV A,R5
  75.         INC A
  76.         INC R1                 ;取下一位
  77.         DJNZ R4,LOOP

  78. ;正確
  79. MATCH:  MOV A,#01H
  80.         ACALL ENABLE           ;清屏,光標復位
  81.         ACALL LINE1            ;從第一行開始顯示
  82.         MOV DPTR,#MES_C
  83.         ACALL DISPLAY          ;顯示"請進"
  84.         ACALL LINE2
  85.         MOV DPTR,#TAB_1
  86.         ACALL DISPLAY
  87.         SETB OPEN              ;開門
  88.         MOV 44H,#00H           ;輸入錯誤次數清零
  89.         MOV R6,43H               
  90.         ACALL DELAY
  91.         CLR OPEN               ;復位
  92.         JMP START            
  93. ;錯誤
  94. ERR:    ACALL BACK
  95.         MOV R6,#03H
  96.         ACALL DELAY
  97.         ACALL BACK           ;輸錯提示音,鳴兩下
  98.         MOV A,#01H
  99.         ACALL ENABLE
  100.         ACALL LINE1
  101.         MOV DPTR,#MES_E
  102.         ACALL DISPLAY       ;顯示錯誤
  103.         MOV R6,#40H
  104.         ACALL DELAY         
  105.         INC  44H
  106.         MOV A,44H
  107.         CJNE A,#03H,EE0
  108. EE0:    JC  ERROUT        ;輸錯不到三次返回
  109.         MOV 44H,#00H        ;清零
  110.         ACALL WRANING       ;報警
  111. ERROUT: JMP START

  112. ;=========== 按鍵中斷服務程序 ==========
  113. KEY_INT:push acc
  114.         push psw
  115.         clr ex0
  116.         acall delay10ms     ;延時消抖
  117.         SETB TR1            ;啟動定時器
  118.         ACALL SMKEY         ;按鍵識別
  119.         MOV A,KEYNUMBER     ;返回按鍵號
  120.         ACALL BACK          ;按鍵發聲
  121.         MOV R3,A
  122.         CJNE R3,#0BH,K1     ;ENTER是否按下
  123.         SETB ENTER
  124.         clr tr1             ;按下確認后關畢定時器
  125.         mov 46h,#00h        ;對中斷次數清零
  126.         AJMP KEY_RTN
  127. K1:     ADD A,#30H          ;將按鍵號轉換為ASCⅡ碼
  128.         MOV @R1,A           ;將輸入的密碼存入緩沖單元
  129.         INC R1              ;修改地址
  130.         
  131.         ACALL WRDATA        ;輸入一位顯示一個"*"
  132.         
  133. KEY_RTN:pop psw
  134.         pop acc
  135.         setb ex0
  136.         RETI


  137. ;=========== 按鍵識別程序 ==========
  138. SMKEY:   
  139.          MOV A,P1
  140.          ANL A,#0FH
  141. WKEY:    MOV B,A               ;反轉法查詢  
  142.          MOV P1,#0F0H
  143.          NOP
  144.          MOV A,P1
  145.          ANL A,#0F0H
  146.          ORL A,B
  147.          MOV P1,#0FH         ;還原P1口初態
  148.          CJNE A,#0EEH,WKEY1
  149.          MOV KEYNUMBER,#00H      
  150.          AJMP RETURN
  151. WKEY1:   CJNE A,#0EDH,WKEY2
  152.          MOV KEYNUMBER,#01H
  153.          AJMP RETURN
  154. WKEY2:   CJNE A,#0EBH,WKEY3
  155.          MOV KEYNUMBER,#02H
  156.          AJMP RETURN
  157. WKEY3:   CJNE A,#0E7H,WKEY4
  158.          MOV KEYNUMBER,#03H
  159.          AJMP RETURN
  160. WKEY4:   CJNE A,#0DEH,WKEY5
  161.          MOV KEYNUMBER,#04H
  162.          AJMP RETURN
  163. WKEY5:   CJNE A,#0DDH,WKEY6
  164.          MOV KEYNUMBER,#05H
  165.          AJMP RETURN
  166. WKEY6:   CJNE A,#0DBH,WKEY7
  167.          MOV KEYNUMBER,#06H
  168.          AJMP RETURN
  169. WKEY7:   CJNE A,#0D7H,WKEY8
  170.          MOV KEYNUMBER,#07H
  171.          AJMP RETURN
  172. WKEY8:   CJNE A,#0BEH,WKEY9
  173.          MOV KEYNUMBER,#08H
  174.          AJMP RETURN
  175. WKEY9:   CJNE A,#0BdH,WKEY10
  176.          MOV KEYNUMBER,#09H
  177.          AJMP RETURN
  178. WKEY10:  CJNE A,#0BbH,WKEY11
  179.          MOV KEYNUMBER,#0AH
  180.          AJMP RETURN
  181. WKEY11:  CJNE A,#0B7H,RETURN
  182.          MOV KEYNUMBER,#0BH       ;判斷哪個鍵按下,返回相應按鍵號碼
  183. RETURN:  MOV P1,#0FH
  184.          NOP
  185.          NOP
  186.          MOV A,P1
  187.          CPL A
  188.          ANL A,#0FH
  189.          JNZ RETURN              ;等待按鍵松開
  190.          RET



  191. ;========== 液晶工作方式設置 ============
  192. SELLCD: MOV A,#01H          ;清屏,光標復位   
  193.         ACALL ENABLE
  194.         MOV A,#38H          ;設置顯示模式,8位兩行,5*7點陣
  195.         ACALL ENABLE
  196.         MOV A,#0DH          ;顯示器開,允許內爍
  197.         ACALL ENABLE      
  198.         MOV A,#06H          ;文字不動,光標右移
  199.         ACALL ENABLE
  200.         RET

  201. ;========== 液晶執行指令 ============
  202. ENABLE: CLR RS
  203.         CLR RW              ;RS,RW同為低電平時寫入指令
  204.         MOV P0,A
  205.         CLR E               ;E由高變低時執行指令
  206.         ACALL WAIT
  207.         SETB E
  208.         RET

  209. ;========== WAIT ============
  210. ;判斷液晶是否忙的子程序
  211. WAIT:   MOV P0,#0FFH
  212.         CLR RS
  213.         SETB RW             ;RW為高,RS為低時可讀忙信號
  214.         CLR E
  215.         NOP
  216.         SETB E
  217.         JB P0.7,WAIT
  218.         RET


  219.         
  220. ;========== 顯示的起始地址 ============
  221. ;在第一行
  222. LINE1:  MOV A,#80H
  223.         ACALL ENABLE
  224.         RET
  225. ;在第二行
  226. LINE2:  MOV A,#0C0H
  227.         ACALL ENABLE
  228.         RET


  229. ;=========== 顯示程序 ============
  230. DISPLAY:MOV R7,#00H
  231. NEXT:   MOV A,R7
  232.         MOVC A,@A+DPTR
  233.         CJNE A,#10H,DSP
  234.         RET
  235. DSP:    ACALL WRDATA
  236.         INC R7
  237.         AJMP NEXT

  238. ;========== 將A里面的數據寫入液晶 ============
  239. WRDATA: SETB RS
  240.         CLR RW
  241.         MOV P0,A
  242.         CLR E
  243.         ACALL WAIT
  244.         SETB E
  245.         RET

  246. ;=========== 報警程序 ============
  247. WRANING: SETB TR0
  248.          ACALL BACK
  249.          MOV R4,#00H
  250.          ACALL D2
  251.          JNB 20H, WRANING
  252.          RET
  253. ;=========== 發聲程序 ============
  254. BACK:    MOV R0,#100
  255. KK1:     CPL  SPEAK
  256.          LCALL DELAY2MS
  257.          DJNZ  R0,KK1             ;不斷取反P2.0使其產生一定頻率的方波推動揚聲器
  258.          RET                      ;延時的長短可以改變輸出的頻率

  259. ;=========== INTT0 ============
  260. ;報警時間設定
  261. INTT0:   PUSH ACC
  262.          PUSH PSW                  
  263.          MOV TH0,#3CH           
  264.          MOV TL0,#0BH
  265.          INC 45H
  266. ……………………

  267. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
電子密碼鎖.rar (121.75 KB, 下載次數: 52)


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

使用道具 舉報

沙發
ID:1029758 發表于 2022-5-27 09:01 | 只看該作者
請問原本設定好的密碼是什么呢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人福利在线 | 黑人巨大精品 | 日本黄色免费视频 | 国产综合精品一区二区三区 | 五月激情婷婷六月 | 美日韩视频 | 草久久| 亚洲视频在线播放 | 国产一区二区中文字幕 | 亚洲免费视频在线观看 | 亚洲精品久久久久中文字幕二区 | 国产精品久久久久久久岛一牛影视 | 天天干免费视频 | 久久成人人人人精品欧 | 国产成人精品999在线观看 | 亚洲精品日韩在线观看 | 欧美日韩在线一区二区三区 | 伊人精品久久久久77777 | 亚洲美女一区 | 日韩欧美一区二区三区免费观看 | 久久亚洲精品国产精品紫薇 | 日韩黄色小视频 | 国产一区二区欧美 | 免费黄色大片 | 91国产在线视频在线 | 81精品国产乱码久久久久久 | 亚洲国产成人精品女人久久久 | 91社区在线观看播放 | 一区二区三区四区免费视频 | 久久久精品一区 | 在线观看第一页 | 成人av高清在线观看 | 国产精品色 | 亚洲精品久久久久久久久久久 | 亚洲 一区| 欧美精品黄 | 夜夜av| 欧美三级在线 | 国产欧美在线 | 秋霞电影院午夜伦 | 日韩视频精品 |