电子密码功能说明:
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
- 作者:ziqintian | 发布:2013年10月29日
- 分类:IT类别
- 标签:单片机,课程设计,电子密码,完成程序
- 转载文章请注明:单片机课程设计之电子密码完成程序 | 太极博弈原理官方站|紫欽天|融通百科为我所用|生活全智慧|生活智慧之书
文章是怎么写出来的?
好吧,我承认我想多了
大师受教了,缘来如此。。。
...也许网络安全产业以后会是
此法确实可靠吗?
hello!,I like y
I was suggested
Thanks , I've j