⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mms.lst

📁 Proteus设计的51单片机电子密码锁.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
A51 MACRO ASSEMBLER  MMS                                                                  06/23/2007 22:08:45 PAGE     1


MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN mms.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE mms.asm SET(SMALL) DEBUG EP

LOC  OBJ            LINE     SOURCE

                       1     ;===================================================
                       2     ;名    称:电子密码锁
                       3     ;作    者:小发
                       4     ;日    期:2007年06月13日
                       5     ;修改日期:2007年06月18日
                       6     ;说    明:首先显示器提示输入密码,密码在12.5S内输入有效,
                       7     ;         输入次三次错误报警10S,输入正确开门,7秒后返回初态
                       8     ;         以上参数均可在主程序里设定,修改系统密码在程序的结尾
                       9     ;===================================================
                      10     
  00A7                11             RS BIT P2.7 
  00A6                12             RW BIT P2.6
  00A5                13             E BIT P2.5
  0010                14             ENTER BIT 22H.0
  00B6                15             OPEN BIT P3.6
  00B7                16             SPEAK BIT P3.7
  0040                17             PASSBUF EQU 40H
  0041                18             KEYNUMBER EQU 41H       ;存放识别后的按键号
0000                  19             ORG 0000H
0000 0130             20             AJMP MAIN
0003                  21             ORG 0003H
0003 01E3             22             JMP KEY_INT
000B                  23             ORG 000BH
000B 21F3             24             AJMP INTT0
001B                  25             ORG 001BH
001B 4110             26             AJMP INTT1
0030                  27             ORG 0030H
                      28     ;========== 主程序开始 ==============
0030 753007           29     MAIN:   MOV 30H,#07H          ;输入密码为7位  最高只可设15位
0033 7542C8           30             MOV 42H,#200         ;设定报警的时间,42H单元里的数*50MS
0036 7543FA           31             MOV 43H,#250          ;设定开门时间     14的倍数(实际上液晶显示器执行指令占用了时间
                             ,开门时间会比14*250MS大)
                      32             ;44H号单元存放输入错误的次数
                      33             ;45H为定时器0中断次数
                      34             ;46H为定时器1中断次数
0039 7547FA           35             MOV 47H,#250          ;输入密码时间设定,50MS倍数
003C 758160           36             MOV SP,#60H
003F C2B6             37             CLR OPEN
0041 C2B7             38             CLR SPEAK              ;初始化输出设备
0043 C210             39             CLR ENTER              ;标志位初始化
                      40             
0045 758911           41             MOV TMOD,#11H          ;定时器工作方式2
0048 758C3C           42             MOV TH0,#3CH           ;初值50MS
004B 758A0B           43             MOV TL0,#0BH 
004E 758D3C           44             MOV TH1,#3CH           
0051 758B0B           45             MOV TL1,#0BH 
0054 D2AF             46             SETB EA
0056 D2A9             47             SETB ET0
0058 D2AB             48             SETB ET1
                      49             
005A 758800           50             MOV TCON,#00000000B     ;电平触发
005D A830             51     START:  MOV R0,30H
005F 7931             52             MOV R1,#31H
0061 7700             53     SS1:    MOV @R1,#00H
0063 09               54             INC R1
0064 D8FB             55             DJNZ R0,SS1            ;将输入密码缓冲单元清零
0066 75900F           56             MOV P1,#0FH            ;初始化按键口
0069 7931             57             MOV R1,#31H             ;从31号单元开始存放按建输入的密码          
A51 MACRO ASSEMBLER  MMS                                                                  06/23/2007 22:08:45 PAGE     2

006B C220             58             CLR 20H                 ;报警标志清零
006D C221             59             CLR 21H                 ;密码超时标志
006F 754600           60             MOV 46H,#00H           ;超时后对定时器中断次数清零,便于下一轮重新计时
0072 318B             61     INIT:   ACALL SELLCD            ;设定液晶工作方式
0074 31B9             62             ACALL LINE1             ;在第一行显示
0076 90024B           63             MOV DPTR,#MES_P         ;显示请输入密码
0079 31C3             64             ACALL DISPLAY
007B D2A8             65             setb EX0               ;开中断,允许键盘输入
007D 20213C           66     KEYIN:  JB  21H,ERR             ;超时转到错误程序
0080 3010FA           67             JNB ENTER,KEYIN         ;等待ENTER按下
0083 C210             68             CLR ENTER
0085 C2A8             69             clr EX0                ;密码输入完后锁定键盘
                      70     ;当使用边沿触发时用上面的指令为什么禁止不了中断???
                      71     ;========== 密码判断程序 ============
0087                  72     COMP:            
0087 900244           73             MOV DPTR,#PASS
008A AC30             74             MOV R4,30H             ;密码的长度
008C 7400             75             MOV A,#0
008E 7931             76             MOV R1,#31H            
0090 FD               77     LOOP:   MOV R5,A
0091 93               78             MOVC A,@A+DPTR
0092 F540             79             MOV PASSBUF,A          ;取出系统设定的密码
0094 E7               80             MOV A,@R1              ;从31号单元开始取出输入的密码
0095 B54024           81             CJNE A,PASSBUF,ERR     ;比较
0098 ED               82             MOV A,R5
0099 04               83             INC A
009A 09               84             INC R1                 ;取下一位
009B DCF3             85             DJNZ R4,LOOP
                      86     
                      87     ;正确
009D 7401             88     MATCH:  MOV A,#01H
009F 319C             89             ACALL ENABLE           ;清屏,光标复位
00A1 31B9             90             ACALL LINE1            ;从第一行开始显示
00A3 900255           91             MOV DPTR,#MES_C
00A6 31C3             92             ACALL DISPLAY          ;显示"请进"
00A8 31BE             93             ACALL LINE2
00AA 900268           94             MOV DPTR,#TAB_1
00AD 31C3             95             ACALL DISPLAY
00AF D2B6             96             SETB OPEN              ;开门
00B1 754400           97             MOV 44H,#00H           ;输入错误次数清零
00B4 AE43             98             MOV R6,43H                
00B6 5127             99             ACALL DELAY
00B8 C2B6            100             CLR OPEN               ;复位
00BA 80A1            101             JMP START            
                     102     ;错误
00BC 31E9            103     ERR:    ACALL BACK
00BE 7E03            104             MOV R6,#03H
00C0 5127            105             ACALL DELAY
00C2 31E9            106             ACALL BACK           ;输错提示音,鸣两下
00C4 7401            107             MOV A,#01H
00C6 319C            108             ACALL ENABLE
00C8 31B9            109             ACALL LINE1
00CA 900261          110             MOV DPTR,#MES_E
00CD 31C3            111             ACALL DISPLAY       ;显示错误
00CF 7E40            112             MOV R6,#40H
00D1 5127            113             ACALL DELAY         
00D3 0544            114             INC  44H
00D5 E544            115             MOV A,44H
00D7 B40300          116             CJNE A,#03H,EE0
00DA 4005            117     EE0:    JC  ERROUT        ;输错不到三次返回
00DC 754400          118             MOV 44H,#00H        ;清零
00DF 31DD            119             ACALL WRANING       ;报警
00E1 015D            120     ERROUT: JMP START
                     121     
                     122     ;=========== 按键中断服务程序 ==========
00E3 C0E0            123     KEY_INT:push acc
A51 MACRO ASSEMBLER  MMS                                                                  06/23/2007 22:08:45 PAGE     3

00E5 C0D0            124             push psw
00E7 C2A8            125             clr ex0
00E9 513B            126             acall delay10ms     ;延时消抖
00EB D28E            127             SETB TR1            ;启动定时器
00ED 310D            128             ACALL SMKEY         ;按键识别
00EF E541            129             MOV A,KEYNUMBER     ;返回按键号
00F1 31E9            130             ACALL BACK          ;按键发声
00F3 FB              131             MOV R3,A
00F4 BB0B09          132             CJNE R3,#0BH,K1     ;ENTER是否按下
00F7 D210            133             SETB ENTER
00F9 C28E            134             clr tr1             ;按下确认后关毕定时器
00FB 754600          135             mov 46h,#00h        ;对中断次数清零
00FE 2106            136             AJMP KEY_RTN
0100 2430            137     K1:     ADD A,#30H          ;将按键号转换为ASCⅡ码
0102 F7              138             MOV @R1,A           ;将输入的密码存入缓冲单元
0103 09              139             INC R1              ;修改地址
                     140             
0104 31D0            141             ACALL WRDATA        ;输入一位显示一个"*"
                     142             
0106 D0D0            143     KEY_RTN:pop psw
0108 D0E0            144             pop acc
010A D2A8            145             setb ex0
010C 32              146             RETI
                     147     
                     148     
                     149     ;=========== 按键识别程序 ==========
010D                 150     SMKEY:   
010D E590            151              MOV A,P1
010F 540F            152              ANL A,#0FH
0111 F5F0            153     WKEY:    MOV B,A               ;反转法查询  
0113 7590F0          154              MOV P1,#0F0H
0116 00              155              NOP
0117 E590            156              MOV A,P1
0119 54F0            157              ANL A,#0F0H
011B 45F0            158              ORL A,B
011D 75900F          159              MOV P1,#0FH         ;还原P1口初态
0120 B4EE05          160              CJNE A,#0EEH,WKEY1
0123 754100          161              MOV KEYNUMBER,#00H       
0126 217E            162              AJMP RETURN
0128 B4ED05          163     WKEY1:   CJNE A,#0EDH,WKEY2
012B 754101          164              MOV KEYNUMBER,#01H
012E 217E            165              AJMP RETURN
0130 B4EB05          166     WKEY2:   CJNE A,#0EBH,WKEY3
0133 754102          167              MOV KEYNUMBER,#02H
0136 217E            168              AJMP RETURN
0138 B4E705          169     WKEY3:   CJNE A,#0E7H,WKEY4
013B 754103          170              MOV KEYNUMBER,#03H
013E 217E            171              AJMP RETURN
0140 B4DE05          172     WKEY4:   CJNE A,#0DEH,WKEY5
0143 754104          173              MOV KEYNUMBER,#04H
0146 217E            174              AJMP RETURN
0148 B4DD05          175     WKEY5:   CJNE A,#0DDH,WKEY6
014B 754105          176              MOV KEYNUMBER,#05H
014E 217E            177              AJMP RETURN
0150 B4DB05          178     WKEY6:   CJNE A,#0DBH,WKEY7
0153 754106          179              MOV KEYNUMBER,#06H
0156 217E            180              AJMP RETURN
0158 B4D705          181     WKEY7:   CJNE A,#0D7H,WKEY8
015B 754107          182              MOV KEYNUMBER,#07H
015E 217E            183              AJMP RETURN
0160 B4BE05          184     WKEY8:   CJNE A,#0BEH,WKEY9
0163 754108          185              MOV KEYNUMBER,#08H
0166 217E            186              AJMP RETURN
0168 B4BD05          187     WKEY9:   CJNE A,#0BdH,WKEY10
016B 754109          188              MOV KEYNUMBER,#09H
016E 217E            189              AJMP RETURN
A51 MACRO ASSEMBLER  MMS                                                                  06/23/2007 22:08:45 PAGE     4

0170 B4BB05          190     WKEY10:  CJNE A,#0BbH,WKEY11
0173 75410A          191              MOV KEYNUMBER,#0AH
0176 217E            192              AJMP RETURN
0178 B4B703          193     WKEY11:  CJNE A,#0B7H,RETURN
017B 75410B          194              MOV KEYNUMBER,#0BH       ;判断哪个键按下,返回相应按键号码
017E 75900F          195     RETURN:  MOV P1,#0FH
0181 00              196              NOP
0182 00              197              NOP 
0183 E590            198              MOV A,P1
0185 F4              199              CPL A
0186 540F            200              ANL A,#0FH
0188 70F4            201              JNZ RETURN              ;等待按键松开
018A 22              202              RET
                     203     
                     204     
                     205     
                     206     ;========== 液晶工作方式设置 ============
018B 7401            207     SELLCD: MOV A,#01H          ;清屏,光标复位    
018D 319C            208             ACALL ENABLE
018F 7438            209             MOV A,#38H          ;设置显示模式,8位两行,5*7点阵
0191 319C            210             ACALL ENABLE
0193 740D            211             MOV A,#0DH          ;显示器开,允许内烁
0195 319C            212             ACALL ENABLE      
0197 7406            213             MOV A,#06H          ;文字不动,光标右移
0199 319C            214             ACALL ENABLE
019B 22              215             RET
                     216     
                     217     ;========== 液晶执行指令 ============

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -