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

📄 密码锁.asm

📁 lyd-sy-5100单片机开发板的示例程序 分为C语言版本和ASM汇编版本。其他牌子的板子也可以使用其C语言版本。
💻 ASM
字号:
;********************************************************************************
;*  标题:北京启东微芯LJD-SY-5100单片机实验系统1602液晶屏演示程序                 *
;*  文件: LCD1602.asm                                                            *
;*  日期:  2005-6-1                                                              *
;*  版本:  1.0                                                                   *
;*  作者:启东微芯                                                                 
;*  网站: http://www.LJD-2008.COM                                               *
;********************************************************************************
;*  描述:                                                                        *
;*         正确输入密码继电器将吸合错误将报警 并要求重新输入 。                  *
;*                                                                               *
;*                                                                               *
;*                                                                               *
;*                                                                               *
;********************************************************************************
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                   *
;********************************************************************************

; 端口定义
RS	EQU	P2.1
RW	EQU	P2.2
EP	EQU	P2.0


;**********************************
;CH451测试程序查表轮显0--F
;**********************************
LOAD        BIT      P1.2
DIN         BIT      P1.0
DCLK        BIT      P1.1
DOUT        BIT      P3.3
;**********************************
DATA_F      DATA     034H
DATA_KEY    DATA     035H
TIMER       DATA     030H
TIMER1      DATA     031H
TIMER2      DATA     032H
TIMER3      DATA     033H
BUFF1       EQU      36H
BUFF2       EQU      48H
BUFF        EQU      50H
;***********************************
            ORG      0000H
 	    JMP      START
            ORG      0013H            
            LJMP     CH451_INT1
	    ORG      0080H

START:       MOV      SP,#60H
	    
;***********************************
             mov     p1,#60h          ;禁止其它芯片
             CLR     DIN              ;初始化CH451
	     SETB    DCLK
	     SETB    DIN
	     SETB    LOAD
	     SETB    DOUT
             NOP
             MOV     B,#04H         ;设置CH451
	     MOV     A,#03H         ;关看门狗开显示键盘
             nop
      	     LCALL   WRITE
	     NOP
	
START1:      
             CLR     IT1                ;置外部信号为低电平触发    
	     CLR     IE1                ;清中断标志
             SETB    PX1           
	     SETB    EX1                ;允许键盘中断
	     SETB    EA                 ;开总中断   
             MOV      R5,#00H
TT0:	     MOV R0,#03H
TT1:         MOV BUFF2,#3CH              ;密码存放存储单元首址
             DEC BUFF2
             LCALL	LCD_INIT	  ; 初始化LCD
	     MOV	A,#15
	     LCALL	DELAY_MS	  ;调延时

  	     LCALL DISPLAY1
	     DEC R0
             CJNE R0,#01,TT1
            
	     LCALL READ_NUM
             MOV  DPTR,#TAB_LJD
             MOV A ,#0FFH
             LCALL  DELAY_MS              ; 在第二行显示字符*	
	     MOV A,#41H		          ;
             LCALL  SET_LCD_POS	          ; 设置第二行第一个字符位置
	    
	     CJNE A,#99H,$                
	     MOV BUFF,#00H                 ;清除标志
             JMP TT0



;------------------------------------------------------------------------------
READ_NUM:    MOV R2,#10                     ;读出密码并存入从36h开始的存储单元
             MOV R0,#BUFF1
             MOV DPTR,#TAB1 
 LOOP:       CLR A
             MOVC A,@A+DPTR
	    
             MOV @R0,A
             INC DPTR
             INC R0
             DJNZ R2,LOOP
	     RET
             
TAB:
             DB      03FH           ;0
	     DB      006H           ;1
	     DB      05BH           ;2
             DB      04FH           ;3
	     DB      066H           ;4
	     DB      06DH           ;5
             DB      07DH           ;6
	     DB      07H            ;7
	     DB      07FH           ;8
             DB      06FH           ;9
	     DB      77H            ;A
	     DB      07CH           ;B
             DB      039H           ;C
	     DB      5EH            ;D
	     DB      079H           ;E
	     DB      071H           ;F

TAB1:        DB      006H           ;1
	     DB      05BH           ;2
             DB      04FH           ;3
	     DB      066H           ;4
	     DB      06DH           ;5
             DB      07DH           ;6   

 
;****************键盘处理*****************************
CH451_INT1: LCALL   INTER         
	     
K1:                                                              
	    MOV     R3,DATA_KEY
            CJNE    R3,#40H,K2
	    JMP     LED_0
K2:
            MOV     R3,DATA_KEY
            CJNE    R3,#41H,K3
	    JMP     LED_1
K3:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#42H,K4
	    JMP     LED_2
K4:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#43H,K5
	    JMP     LED_3
K5:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#48H,K6
	    JMP     LED_4
K6:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#49H,K7
	    JMP     LED_5
K7:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#4AH,K8
	    JMP     LED_6
K8:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#4BH,K9
	    JMP     LED_7
K9:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#50H,K10
	    JMP     LED_8
K10:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#51H,K11
	    JMP     LED_9
K11:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#52H,K12
	    JMP     LED_A
K12:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#53H,K13
	    JMP     LED_B
K13:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#58H,K14
	    JMP     LED_C
K14:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#59H,K15
	    JMP     LED_D
K15:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#5AH,K16
	    JMP     LED_E
K16:
	    MOV     R3,DATA_KEY
	    CJNE    R3,#5BH,K17
	    JMP     LED_F
K17:	    
            POP   ACC
	    POP   PSW
	    CLR   IE1             
	    RETI 
            NOP
            LJMP     START
LED_A:      
          
	    JMP     DELAY1
LED_B:
            
   	   
	    JMP     DELAY1
            
LED_C:
           
	    JMP     DELAY1
 
LED_D:     MOV R1,#3CH
           MOV R0,#36H
           MOV R4,#06H
C1:        MOV A,@R1
           XRL A,@R0               ;比较键盘输入的密码是否与设定密码相同
           JNZ C3
           INC R0
           INC R1
           DJNZ R4,C1
           LCALL DISPLAY4
	   CLR P3.6                 
	   
	   RETI
C3:        MOV R3,#6
           

EORR:      CLR P3.7                    ;密码错误鸣音报警
           MOV A,#0128
           LCALL DELAY_MS 
	   SETB P3.7
	   MOV A,#128
	   LCALL DELAY_MS
	   DJNZ R3,EORR
           LCALL DISPLAY3
	   MOV BUFF,#99H
           MOV A,BUFF
	   RETI
           


LED_E:
	   
   	   
	    JMP     DELAY1
            
LED_F:
	    
   	   
	    JMP     DELAY1
           
LED_0:
	    INC DPTR 
   	    MOV     @R1,#03FH
            LCALL DISPLAY2
	    RETI
           
LED_1:
	    
   	    MOV     @R1,#06H 
            LCALL DISPLAY2
            INC DPTR 
	    RETI
           
LED_2:
	    MOV     @R1,#05BH
            LCALL DISPLAY2
            INC DPTR 
	    RETI
            
LED_3:
   	    MOV     @R1,#04FH
            LCALL DISPLAY2
            INC DPTR 
	    RETI

            
LED_4:
	    MOV     @R1,#066H 
            LCALL DISPLAY2
            INC DPTR 
	   RETI

LED_5:
	   
   	    MOV     @R1,#06DH
            LCALL DISPLAY2
	    INC DPTR 
	    RETI
           
LED_6:
	   
   	    MOV     @R1,#07DH
            LCALL DISPLAY2
            INC DPTR 
	    RETI
LED_7:
	    
   	    MOV     @R1,#007H
            LCALL DISPLAY2
	    INC DPTR 
	    RETI
LED_8:
	    MOV     @R1,#07FH
            LCALL DISPLAY2
	    INC DPTR 
	   RETI
LED_9:
	   
   	    MOV     @R1,#06FH
            LCALL DISPLAY2
	    INC DPTR 
	    RETI
DELAY1:
            CLR     IT1               ;置外部信号为低电平触发    
	    CLR     IE1               ;清中断标志
            SETB    PX1           
	    SETB    EX1               ;允许键盘中断
	    SETB    EA    
            LCALL    DELAY_1S
            ;LCALL    DELAY_1S
            ;LCALL    DELAY_1S
            ;LCALL   DELAY_1S
           
	    POP      B
	    POP      ACC
	    POP      PSW
	    RETI
	    
;**********************************
WRITE:
            PUSH     ACC
            CLR       EX0
	    CLR       LOAD
	    MOV       R7,#08H
WRITE_1:
            RRC       A
	    CLR       DCLK
	    MOV       DIN,C
	    SETB      DCLK
	    DJNZ      R7,WRITE_1
	    MOV       A,B
	    MOV       R7,#004H
WRITE_2:
            RRC       A
	    CLR       DCLK
	    MOV       DIN,C
	    SETB      DCLK
	    DJNZ      R7,WRITE_2
	    SETB      LOAD
	    SETB      EX1
	    POP       ACC
	    RET
;*********************************

INTER:	                
            PUSH  PSW              ;现场保护
            PUSH  ACC
	    CLR       EX1
            CLR   LOAD             ;命令开始
	    MOV   A,#0F7H          ;读键值命令,忽略12位命令的低8位,高4位用作结束标志
INTER_4:   
            SETB  C                ;在高位添0以检测位数据结束
	    RRC   A                ;低位在前,高位在后
	    CLR   DCLK
            MOV   DIN,C               ;送出一位数据
	    SETB  DCLK                ;产生时钟上升沿锁通知CH451输入位数据
	    CJNE  A,#0FFH,INTER_4     ;位数据未完继续,共4位,完成后为0FFH
  	    SETB  LOAD                ;产生加载上升沿通知CH451处理命令数据
	    MOV   A,#0FCH             ;该数据用以检测位数据结束
INTER_7:
            MOV   C,DOUT              ;读入一位数据
	    CLR   DCLK                    ;产生时钟下升沿通知CH451输出下一位
	    RLC   A                       ;数据移入ACC,高位在前,低位在后
	    SETB  DCLK
	    JC    INTER_7                  ;位数据未完继续,共7位,完成后才移出0
	    MOV   DATA_KEY,A               ;保存键值  
            INC   DATA_F
	    POP   ACC
	    POP   PSW
	    SETB  EX1
	    CLR   IE1              ;清中断标志,该指令需根据实际情况作修改
	    ;MOV BUFF2,#3CH
            INC BUFF2
	    MOV R1,BUFF2
	    RET                    

;**********************************
DELAY_1S:
             MOV      TIMER1,#1
TEST_DYA:    MOV      TIMER2,#255
TEST_DYA1:   MOV      TIMER3,#255
TEST_DYA2:   NOP
	     NOP
	     DJNZ     TIMER3,TEST_DYA2
             DJNZ     TIMER2,TEST_DYA1
	     DJNZ     TIMER1,TEST_DYA 
	     RET
;*************************************




DISPLAY1:                              
	   MOV	A,#03H
	   LCALL SET_LCD_POS		; 设置LCD光标到第一行的第5个字符
           MOV A ,#0FFH
           LCALL DELAY_MS
	   MOV	DPTR,#TAB_WORD	        ;      

⌨️ 快捷键说明

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