单片机课程设计之电子密码完成程序 | 太极博弈原理官方站|紫欽天|融通百科为我所用|生活全智慧|生活智慧之书

正在阅读:

单片机课程设计之电子密码完成程序

956

         电子密码功能说明:

1.显示”0000”,初始密码为:9999;

2.密码’9999’,显示变为:”0000”;

3.当按”#”键时显示器被清为:”0000”;

4.如果要更改密码,,先输入4位新密码再按”*”,即可完成设置;

5.如果输入密码正确,”D”,显示器显示”1111”,否则显示”2222”;

6.如果要显示旧密码,按住”C”键即可显示旧密码,松开后显示”0000”

              7.设置密码时,设置值放在61H----64H , 显示存储器缓冲区为

41 H---44 H

              ORG             0000H

       LJMP            MAIN

       ORG             0050H

MAIN:

       MOV            SP,#50H

MOV        R7,#10H            ;因为密码放在第16个字节后,故加偏移;16作为起始地址

       MOV            R6,#4                          ;4位密码

       MOV            R1,#35H                            ;密码首地址送R1

MAIN1:

       MOV            A,R7                           ;取偏移量16

       MOV            DPTR,#TAB               ;查表

       MOVC         A,@A+DPTR

       MOV            @R1,A

       DEC             R1                               ;取下一个数据

       INC              R7                                      ;偏移地址加1

       DJNZ            R6,MAIN1                 ;4位查完了吗?

MAIN1A:

       MOV            A,#0                                  ;清显示缓冲器

       MOV            40H,A

       MOV            41H,A

       MOV            42H,A

       MOV            43H,A

       MOV            44H,A

 

MAIN2:

       MOV            R3,#0F7H                   ;送按键扫描码

       MOV            R1,#00H                            ;设置0行扫描值

MAIN3:

       MOV            A,R3

       MOV            P1,A                           ;扫描按键

       MOV            A,P1

       MOV            R4,A

       SETB            C

       MOV            R5,#04H                            ;按键扫描次数

MAIN4:

       RLC              A                        

       JNC              KEYIN                              ;如果C=0,表示有键按下

       INC              R1                                      ;无键按下,扫描指针加1

       DJNZ            R5,MAIN4                 ;按键扫描了4次吗?

       LCALL         DISPLAY                                 ;,显示其值

       MOV            A,R3                           ;

       SETB            C

       RRC             A                                ;扫描下一行

       MOV            R3,A

       JC          MAIN3                      

       JMP              MAIN2

KEYIN:

       MOV            A,R1                           ;按键是"C"?

       XRL              A,#0BH

       JZ          NEXT3                              ;是则显示密码

       MOV            A,R1                           ;

       XRL              A,#0CH                      ;按键是"C"?

       JZ          NEXT4                              ;是则比较密码

       LCALL         DELAY1

       MOV            R7,#10

NEXT1:

       MOV            R6,#248

       DJNZ            R6,$

       DJNZ            R7,NEXT1

NEXT2:

       MOV            A,P1                           ;读按键

       XRL              A,R4                           ;按键松开了吗?

       JZ          NEXT2                              ;没有,NEXT2

       MOV            A,R1                           ;,,取键号

       MOV            DPTR,#TAB               ;查表

       MOVC         A,@A+DPTR

       MOV            R7,A

       XRL              A,#0AH                      ;按键是"*"?

       JZ          SETPASS                          ;,设置密码

       MOV            A,R7

       XRL              A,#0BH                      ;按键是"#"?

       JZ          MAIN1A                                  ;,0

       ;MOV           A,R7

       ;XRL             A,#0ch

       ;JZ         MAIN2

       ;MOV           A,R7

       ;XRL             A,#0DH

       ;JZ         MAIN2

       MOV            A,R7                           ;键值放在41 H

       XCH             A,41H                         ;先前的按键前移1

       XCH             A,42H

       XCH             A,43H

       XCH             A,44H

       XCH             A,45H

       LCALL         DISPLAY                   ;显示按键

       LJMP            MAIN2                       ;返回

NEXT3:

       LJMP            DISPLAY2

NEXT4:

       LJMP            COMP                        ;比较密码

 

SETPASS:

       MOV            R2,#04H                            ;设置4位密码

       MOV            R0,#41H                            ;按键显示码

       MOV            R1,#32H                            ;存放密码

SETPASS1:

       MOV            A,@R0

       XCH             A,@R1                       ;显示码与密码交换

       INC              R0                                      ;指向下一位数据

       INC              R1

       DJNZ            R2,SETPASS1                   ;4位交换完了吗?

       LCALL         DELAY1

SETPASS2:

       LJMP            MAIN1A                           ;返回    

DISPLAY:

       MOV     A,#0FH                             ;清第1个显示器

       ADD      A,#40H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,41H                                ;显示当前按键值            

       ADD      A,#40H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,#0FH                             ;清第2个显示器

       ADD      A,#10H

       MOV     P0,A

       MOV     A,42H                                ;显示第2个按键值

       ADD      A,#10H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,#0FH                             ;清第3个显示器

       ADD      A,#20H

       MOV     P0,A

       MOV     A,43H                                ;显示第3个按键值

       ADD      A,#20H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,#0FH                             ;清第4个显示器

       ADD      A,#30H

       MOV     P0,A

       MOV     A,44H                                ;显示第4个按键值

       ADD      A,#30H

       MOV     P0,A

       LCALL  DELAY1

       RET

DISPLAY2:

       MOV     A,#0FH                             ;清第1个显示器

       ADD      A,#40H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,35H                         ;显示当前按键值            

       ADD      A,#40H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,#0FH                      ;清第2个显示器

       ADD      A,#10H

       MOV     P0,A

       MOV     A,34H                         ;显示第2个按键值

       ADD      A,#10H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,#0FH                      ;清第3个显示器

       ADD      A,#20H

       MOV     P0,A

       MOV     A,33H                         ;显示第3个按键值

       ADD      A,#20H

       MOV     P0,A

       LCALL  DELAY1

       MOV     A,#0FH                      ;清第4个显示器

       ADD      A,#30H

       MOV     P0,A

       MOV     A,32H                         ;显示第4个按键值

       ADD      A,#30H

       MOV     P0,A

       LCALL  DELAY1

       MOV            A,P1

       XRL              A,R4

       JZ          DISPLAY2                 ;按键松开了吗?没有继续显示

       LCALL         DELAY1                     ;,0 

       LJMP            MAIN1A

 

COMP:

       MOV            R1,#44H

       MOV            R0,#35H

       MOV            R2,#04H                     ;比较4位密码

NT1:

       MOV            A,@R1

       XRL              A,@R0

       JNZ              NT3                                   ;对应数据与密码相等吗?不相等,NT3  

       DEC             R1                        ;相等,指向下一位数据

       DEC             R0

       DJNZ            R2,NT1               ;比较完了吗?

       MOV            A,#01H                ;密码正确,显示"FFFF"

       MOV            41H,A

       MOV            42H,A

       MOV            43H,A

       MOV            44H,A

 

       LCALL         DISPLAY

       LJMP            MAIN2

NT3:

       MOV            A,#02H                ;密码正确,显示"FFFF"

       MOV            41H,A

       MOV            42H,A

       MOV            43H,A

       MOV            44H,A

       LJMP            MAIN2                ; ;密码不正确,显示"0000"

 

DELAY1MS:

       PUSH    06H

       PUSH    07H

       MOV            R7,#0FFH

       MOV            R6,#0FFH

DELAY10:

       DJNZ            R6,$

       DJNZ            R7,DELAY1

       POP              07H

       POP              06H

       RET

DELAY1:

       PUSH    06H

       PUSH    07H

       MOV            R7,#10H

       MOV            R6,#200

DELAY1A:

       DJNZ            R6,$

       DJNZ            R7,DELAY1A

       POP              07H

       POP              06H

       RET

 

TAB1:

       DB 77H,24H,5DH,6DH

       DB 2EH,6BH,7BH,25H

       DB 7FH,6FH,80H,80H

       DB 80H,80H,80H,80H

TAB:

       DB 01H,02H,03H,0CH

       DB 04H,05H,06H,0DH

       DB 07H,08H,09H,0EH

       DB 0AH,00H,0BH,0FH

       DB 09H,09H,09H,09H

TAB0:                                ;此表与按键对应

       DB 0DH,0EH,00H,0FH

       DB 0CH,07H,08H,09H

       DB 0BH,04H,05H,06H

       DB 0AH,01H,02H,03H

       DB 09H,09H,09H,09H

       END

抱歉,这篇文章关闭了评论功能。

关闭