基于单片机的密码锁汇编程序

来源:互联网 发布:淘宝微信链接转换 编辑:程序博客网 时间:2024/04/30 17:44

 程序流程图

*******************************************************

;以下8个字节存放8位数码管的段码

LED_BIT_1  EQU     30H

LED_BIT_2  EQU     31H

LED_BIT_3  EQU     32H

LED_BIT_4  EQU     33H

LED_BIT_5  EQU     34H

LED_BIT_6  EQU     35H

LED_BIT_7  EQU     36H

LED_BIT_8  EQU     37H

;以下6个字节存放初始密码

WORD_1     EQU     38H

WORD_2     EQU     39H

WORD_3     EQU     3AH

WORD_4     EQU     3BH

WORD_5     EQU     3CH

WORD_6     EQU     3DH

;以下6个字节存放用户输入的6位密码

KEY_1      EQU     3EH

KEY_2      EQU     3FH

KEY_3      EQU     40H

KEY_4      EQU     41H

KEY_5      EQU     42H

KEY_6      EQU     43H

;******************************************************

CNT_A      EQU     44H

CNT_B      EQU     45H

KEY_CNT        EQU     46H     ;已输出的密码位数

LINE       EQU     47H     ;按键行号

ROW         EQU     48H     ;按键列号

VAL         EQU     49H     ;键值

;******************************************************

;以下为初始化程序,包括数据存储空间初始化,设置初始密码

        ORG     00H

        SJMP   START

        ORG     0BH

        LJMP   INT_T0

START: MOV     CNT_A,#00H     ;程序初始化

        MOV     CNT_B,#00H

        MOV     KEY_CNT,#00H

        MOV     LINE,#00H

        MOV     ROW,#00H

        MOV     VAL,#00H

        SETB   P1.0

        MOV     LED_BIT_1,#00H    ;段码存储区清0

        MOV     LED_BIT_2,#00H

        MOV     LED_BIT_3,#00H

        MOV     LED_BIT_4,#00H

        MOV     LED_BIT_5,#00H

        MOV     LED_BIT_6,#00H

        MOV     LED_BIT_7,#79H

        MOV     LED_BIT_8,#73H

 

        MOV     KEY_1,#00H     ;输入密码存储区清0

        MOV     KEY_2,#00H

        MOV     KEY_3,#00H

        MOV     KEY_4,#00H

        MOV     KEY_5,#00H

        MOV     KEY_6,#00H

 

        MOV     WORD_1,#6      ;设置初始密码为"123456"

        MOV     WORD_2,#5

        MOV     WORD_3,#4

        MOV     WORD_4,#3

        MOV     WORD_5,#2

        MOV     WORD_6,#1

 

        MOV     TMOD,#01H

        MOV     TH0,#(65536-700)/256

        MOV     TL0,#(65536-700)/256

        MOV     IE,#82H

 

A0:     LCALL  DISP

;***********************************************************

;以下为键盘扫描程序,计算键值并存入VAL

LSCAN: MOV     P3,#0F0H       ;扫描行码

    L1: JNB     P3.0,L2

        LCALL  DLY_S

        JNB     P3.0,L2

        MOV     LINE,#00H

        LJMP   RSCAN

    L2: JNB     P3.1,L3

        LCALL  DLY_S

        JNB     P3.1,L3

        MOV     LINE,#01H

        LJMP   RSCAN

    L3: JNB     P3.2,L4

        LCALL  DLY_S

        JNB     P3.2,L4

        MOV     LINE,#02H

        LJMP   RSCAN

    L4: JNB     P3.3,A0

        LCALL  DLY_S

        JNB     P3.3,A0

        MOV     LINE,#03H

 

RSCAN: MOV     P3,#0FH            ;扫描列码

    C1: JNB     P3.4,C2

        MOV     ROW,#00H

        LJMP   CALCU

    C2: JNB     P3.5,C3

        MOV     ROW,#01H

        LJMP   CALCU

    C3: JNB     P3.6,C1

        MOV     ROW,#02H

 

CALCU: MOV     A,LINE         ;计算键值

        MOV     B,#03H

        MUL     AB

        ADD     A,ROW

        MOV     VAL,A


 

        CLR     P1.0

        LCALL  DLY_L

        LJMP   FINI

 

    J5: LCALL  ALARM_2

        LJMP   START

 

    J4: LCALL  ALARM_1

        LJMP   START

 

DLY_S: MOV     R6,#10

D1:     MOV     R7,#250

        DJNZ   R7,$

        DJNZ   R6,D1

        RET

 

DLY_L: MOV     R5,#100

D2:     MOV     R6,#100

D3:     MOV     R7,#248

        DJNZ   R7,$

        DJNZ   R6,D3

        DJNZ   R5,D2

        RET

FINI:  NOP

        END

原创粉丝点击