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

📄 集成开发板s52程序.txt

📁 华为新员工技术培训教材--主要是通信技术方面.包括ATM技术,SDH光技术,程控交换技术,数据通信技术,无线通信技术,接入网技术等.
💻 TXT
字号:
	HC0	EQU	4AH
	HC1	EQU	4BH
	HC2	EQU	4CH

	CODE1	EQU	50H
	CODE2	EQU	51H
	CODE3	EQU	52H
	CODE4	EQU	53H

        SHOW1   EQU     55H
        SHOW2   EQU     56H
        SHOW3   EQU     57H
        SHOW4   EQU     58H

	INPUT1	EQU	60H
	INPUT2	EQU	61H
	INPUT3	EQU	62H
	INPUT4	EQU	63H
	TIMES	EQU	64H


	ORG	00H               ;复位入口
	AJMP	INIT


        ORG     0BH
        AJMP    T0INT             ;T0中断入口


	ORG	30H               
INIT:	MOV	CODE1,#00H
	MOV	CODE2,#00H
	MOV	CODE3,#00H
	MOV	CODE4,#00H
	MOV	INPUT1,#00H
	MOV	INPUT2,#00H
	MOV	INPUT3,#00H
	MOV	INPUT4,#00H         
	MOV	SHOW1,#16
	MOV	SHOW2,#17
	MOV	SHOW3,#17
	MOV	SHOW4,#17         ;以上为初始化


START1:	MOV	A,#00H            ;位密码存储器A初始化

	MOV	P0,#28H             
	MOV	P2,#87H           ;数码管四位显示0000
        LCALL	DELAY2S           ;延时2秒
        MOV     P2,#0FFH          ;四位数码管断开
        MOV     P0,#0FFH          ;四位数码管熄灭


	LCALL	KEY               ;调用键盘扫描程序输入第1位密码            
        MOV     SHOW1,A           ;第1位密码存入SHOW1
        MOV     SHOW2,#16         ;SHOW2存入下划线对应的序号
	
        LCALL	KEY               ;调用键盘扫描程序输入第2位密码           
        MOV     SHOW2,A           ;第2位密码存入SHOW2
        MOV     SHOW3,#16         ;SHOW3存入下划线对应的序号

        LCALL	KEY               ;调用键盘扫描程序输入第3位密码          
        MOV     SHOW3,A           ;第3位密码存入SHOW3
        MOV     SHOW4,#16         ;SHOW4存入下划线对应的序号

        LCALL	KEY               ;调用键盘扫描程序输入第4位密码            
        MOV     SHOW4,A           ;第4位密码存入SHOW4
        
        LCALL   RDISP             ;调用延时显示子程序


        MOV	R1,#SHOW1 
        MOV	CODE1,@R1
        INC     R1	
        MOV	CODE2,@R1
        INC     R1	
        MOV	CODE3,@R1
        INC     R1	
        MOV	CODE4,@R1         ;4位密码存入CODE区

        CLR	P2.7              ;灯2.7亮,表示上锁       


ENTER:	CLR	P2.7              ;灯2.7亮,表示上锁
        MOV	TIMES,#03H        ;设定开锁次数为3次
START2:	MOV	A,#00H            ;位密码存储器A初始化
        MOV	SHOW1,#16
	MOV	SHOW2,#17
	MOV	SHOW3,#17
	MOV	SHOW4,#17         ;SHOW存储区初始化


	LCALL	KEY               ;调用键盘扫描程序输入第1位开锁密码            
        MOV     SHOW1,A           ;第1位开锁密码存入SHOW1
        MOV     SHOW2,#16         ;SHOW2存入下划线对应的序号
	
        LCALL	KEY               ;调用键盘扫描程序输入第2位开锁密码           
        MOV     SHOW2,A           ;第2位开锁密码存入SHOW2
        MOV     SHOW3,#16         ;SHOW3存入下划线对应的序号

        LCALL	KEY               ;调用键盘扫描程序输入第3位开锁密码          
        MOV     SHOW3,A           ;第3位开锁密码存入SHOW3
        MOV     SHOW4,#16         ;SHOW4存入下划线对应的序号

        LCALL	KEY               ;调用键盘扫描程序输入第4位开锁密码            
        MOV     SHOW4,A           ;第4位开锁密码存入SHOW4

        LCALL   RDISP             ;调用延时显示子程序

        MOV	R1,#SHOW1 
        MOV	INPUT1,@R1
        INC     R1	
        MOV	INPUT2,@R1
        INC     R1	
        MOV	INPUT3,@R1
        INC     R1	
        MOV	INPUT4,@R1        ;4位开锁密码存入INPUT区


COMPARE:MOV	R2,#04H           ;4位密码进行比较
	MOV	R0,#CODE1
	MOV	R1,#INPUT1

AGAIN:	CLR	C                 ;以下为4位密码比较过程
	MOV	A,@R0
	SUBB	A,@R1             ;带Cy相减
	CJNE	A,#00H,WRONG      ;判断一位密码是否相同
	INC	R1
	INC	R0
	DJNZ	R2,AGAIN          ;判断是否4位密码都已比较
	SETB	P2.7              ;灯2.7灭,表示开锁
	LCALL   DELAY10S          ;延时10秒
        AJMP	ENTER

WRONG:	DJNZ	TIMES,NEXT1       ;判断是否是第3次输入开锁密码错误
	LCALL   ALARM10S
	AJMP	ENTER

NEXT1:	LCALL   ALARM2S
	AJMP	START2


KEY:                              ;键盘扫描子程序,最终扫描结果存入A  
        LCALL   KS                ;调用按键检测子程序
        JNZ     K1                ;有键按下继续
        LCALL   DELAY2            ;无键按下调用延时去抖动子程序
        AJMP    KEY               ;返回,继续检测有无按键按下
K1:     LCALL   DELAY2
        LCALL   DELAY2            ;有键按下继续延时去抖动
        LCALL   KS                ;再次调用检测按键子程序
        JNZ     K2                ;确认有键按下进行下一步
        AJMP    KEY               ;无键按下返回继续检测

K2:     MOV     R3,#0EFH          ;将扫描值送入R3暂存
        MOV     R4,#00H           ;将第1列的列值00H送入R4暂存,R4用于存放列值

K3:	MOV     P1,R3             ;将R3的值送入P1口

L6:	JB      P1.0,L1           ;P1.0等于1跳转到L1
        MOV     A,#00H            ;将第1行的行值00H送入A
        AJMP    LK                ;跳转到键值处理程序

L1:	JB      P1.1,L2           ;P1.1等于1跳转到L2
        MOV     A,#04H            ;将第2行的行值04H送入A
        AJMP    LK                ;跳转到键值处理程序

L2:     JB      P1.2,L3           ;P1.2等于1跳转到L3
        MOV     A,#08H            ;将第3行的行值08H送入A
        AJMP    LK                ;跳转到键值处理程序

L3:	JB      P1.3,NEXT         ;P1.3等于1跳转到NEXT处
        MOV     A,#0CH            ;将第4行的行值#0CH送入A

LK:	ADD     A,R4              ;行值与列值相加后的键值送入A
        MOV     R5,A              ;将A中的值送入R5暂存

K4:     LCALL   DELAY2            ;调用延时去抖动子程序
        LCALL   KS                ;调用按键检测子程序
        JNZ     K4                ;按键没有松开继续返回检测
        MOV     A,R5              ;将R5的值送入A
        RET

NEXT:   INC     R4                ;将列值加一
        MOV     A,R3              ;将R3的值送入A
        JNB     ACC.7,KEY         ;扫描完成跳至KEY处进行下一回合的扫描
        RL      A                 ;扫描未完成将A中的值左环移一位进行下一列的扫描
        MOV     R3,A              ;将A的值送入R3暂存
        AJMP    K3                ;跳转到K3继续

KS:     LCALL   DISPLAY           ;调用显示子程序
        MOV     P1,#0FH           ;将P1口高四位置0,低四位置1
        MOV     A,P1              ;读P1口
        XRL     A,#0FH            ;判断是否有键按下
        RET                    


DELAY2:                           ;15ms延时去抖动子程序(30*250*2=15ms)
        MOV     HC0,#30
L7:	MOV     HC1,#250
L8:	DJNZ    HC1,L8
        DJNZ    HC0,L7
        RET


RDISP:                            ;延时2秒显示子程序
        MOV	R7,#200           
DL3:    LCALL   DISPLAY           ;调用显示程序
	DJNZ	R7,DL3
        RET


DISPLAY:                          ;四位数码管显示子程序(并行逐位显示)
        MOV     DPTR,#NUMTAB         
        MOV	R1,#SHOW1         ;四位数码管依次显示SHOW存储区数据
         
        MOV	A,@R1         
        MOVC    A,@A+DPTR 	  ;查表转换成对应按键数字
        CLR     P2.3              ;选通第1位数码管
        MOV     P0,A 		  ;显示
        LCALL   DELAY             ;延时  
        MOV 	P0,#0FFH          ;数码管熄灭
	SETB	P2.3              ;断开第1位数码管
         
        INC     R1
        MOV	A,@R1         
        MOVC    A,@A+DPTR 	  ;查表转换成对应按键数字
        CLR     P2.4              ;选通第2位数码管
        MOV     P0,A 		  ;显示
        LCALL   DELAY             ;延时  
        MOV 	P0,#0FFH          ;数码管熄灭
	SETB	P2.4              ;断开第2位数码管

        INC     R1
        MOV	A,@R1         
        MOVC    A,@A+DPTR 	  ;查表转换成对应按键数字
        CLR     P2.5              ;选通第3位数码管
        MOV     P0,A 		  ;显示
        LCALL   DELAY             ;延时  
        MOV     P0,#0FFH          ;数码管熄灭
	SETB	P2.5              ;断开第3位数码管

        INC     R1 
        MOV	A,@R1         
        MOVC    A,@A+DPTR 	  ;查表转换成对应按键数字
        CLR     P2.6              ;选通第4位数码管
        MOV     P0,A 		  ;显示
        LCALL   DELAY             ;延时  
        MOV 	P0,#0FFH          ;数码管熄灭
	SETB	P2.6              ;断开第4位数码管 
        RET                
NUMTAB: DB 28H,34H,28H,0F7H,0A9H,60H   ;0(D)  1(#)  2(0)  3(*)  4(C)  5(9)
        DB 20H,7AH,20H,21H,61H,74H     ;6(8)  7(7)  8(B)  9(6)  10(5) 11(4)
        DB 30H,62H,0A2H,7EH,0EFH,0FFH  ;12(A) 13(3) 14(2) 15(1) 16(下划线) 17(熄灭) 


DELAY:                            ;DISPLAY子程序中的延时程序
        MOV     HC0,#5
DL1:	MOV     HC1,#250
DL2:	DJNZ    HC1,DL2
        DJNZ    HC0,DL1
        RET

ALARM2S:MOV     TH0,#0F0H           ;报警器报警2秒子程序
        MOV     TL0,#0CH
        MOV     TMOD,#00H
        SETB    TR0
        SETB    ET0
        SETB    EA
        LCALL   DELAY2S
        CLR     EA
        RET


ALARM10S:MOV    TH0,#0F0H          ;报警器报警10秒子程序
         MOV    TL0,#0CH
         MOV    TMOD,#00H
         SETB   TR0
         SETB   ET0
         SETB   EA
         LCALL  DELAY10S
         CLR    EA
         RET

T0INT:   CPL    P2.0               ;周期为1ms的方波
         MOV    TH0,#0F0H
         MOV    TL0,#0CH
         RETI

DELAY2S:MOV	HC0,#20           ;延时2秒子程序
DL4:	MOV	HC1,#200
DL5:	MOV     HC2,#250
DL6:	DJNZ	HC2,DL6
	DJNZ	HC1,DL5
	DJNZ	HC0,DL4
	RET

DELAY10S:MOV	HC0,#100          ;延时10秒子程序
DL7:	 MOV	HC1,#200
DL8:	 MOV	HC2,#250
DL9:	 DJNZ	HC2,DL9
	 DJNZ	HC1,DL8
	 DJNZ	HC0,DL7
	 RET
	 END

⌨️ 快捷键说明

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