原创 51单片机密码锁

2009-1-2 13:05 3439 10 11 分类: MCU/ 嵌入式

 还是原来学汇编的时候的程序了


今天整理看到了


送给有用的人


code_seg segment code
data_seg segment data
stack_seg segment idata
spk bit p1.3
rseg data_seg
frq:ds 1
tmp:ds 1
rseg stack_seg
stack:ds 20
cseg at 00000h
ljmp main
cseg at 0003h
ljmp zd
rseg code_seg
  jmp main
PORTA  EQU    8FFFH   ;8255A口地址
PORTB  EQU    9FFFH   ;8255B口地址
PORTC  EQU    0AFFFH   ;8255C口地址
CADDR   EQU    0BFFFH   ;8255控制字地址
main:  MOV     A,#88H   ;方式0
  MOV     DPTR,#CADDR
  MOVX    @DPTR,A 
  CLR P1.2
mov r0,#50h      ;初始密码首地址
mov r1,#08h
  szmm: mov @r0,#00h ;设置密码  
   inc r0
   djnz r1,szmm         
     mov r2,#03h ;设置输入密码的次数
   K:mov ie,#81h   ;中断方式设置
     mov tcon,#01h
  k1:mov a,p1
    clr p1.2     ;判断开关位置
     mov r1,a
     anl a,#03h
     jz dmm
     dec a
     jz xianshi
      dec a
     jz xianshi
     dec a
     jz dmm
  dmm: mov r3,#08h    ;读密码 八位
       mov r6,#80h      ;闪动位控制
    mov r0,#60h    ;读入值的首地址
     ll:acall display
      acall KSI
   jz ll
   ACALL DISPLAY
       acall KEYI
    mov @r0,30h
   inc r0
       mov a,r6
    rr a
    mov r6,a
      djnz r3,ll
   pdmm:mov r1,#50h      ;判断密码
        mov r0,#60h
  mov r3,#08h
 cxpd:mov a,@r0
      mov r4,a
   mov a,@r1
   subb a,r4
       jnz baojin
     inc r0
  inc r1
  djnz r3,cxpd
    mov r0,#0ffh
 god: mov r1,#0fh  ;密码正确显示good
   good: acall display1   
  
    djnz r1,good
 djnz r0,god
    mov a,p1
 clr p1.2   ;判断是否改密码
     anl a,#03h
     jz gmm
     dec a
     jz xianshi
      dec a
     jz xianshi
     dec a
     jz dmm
    jmp k1
 baojin: mov ie,#00h   ;报警
     djnz r2,k3
     mov r7,#0ffh
     acall sg
     jmp k
  k3:mov r7,#0fh
     acall sg
      mov r5,#03h
     jmp k
xianshi:mov r0,#0fh    ;待机显示
   as: mov r6,#00h
   acall display
  djnz r0, as
  jmp k1
gmm:mov r3,#08h     ;改密码
     mov r6,#80h
    mov r0,#50h
     lty: acall display
         acall KSI
   jz lty
       acall KEYI
    MOV @R0,30H
   inc r0
       mov a,r6
    rr a
    mov r6,a
      djnz r3,lty
      jmp k1
  
  sg:nop      ;bao警子程序
    ls:mov r6,#0ffh
     lm:  mov r5,#0ffh
      djnz r5,$
        cpl p1.3
      djnz r6,lm
      djnz r7,ls
      mov p1,#0ffh
     ret


  zd: mov 30h,a     ;复位程序
  mov a,r6
     rl a
  mov r6,a
  mov a,30h
     inc r3
  acall d1ms
  acall d1ms
  acall d1ms
   acall d1ms
  acall d1ms
  acall d1ms
 mov tcon,#01h
reti


KEYI: MOV 30h,#00H
MOV R4,#00H
  
    ACALL DISPLAY
    ACALL KSI
    JNZ LK2
 
AJMP KEYI
LK2: MOV R1,#04H
MOV R2,#0FEH
    MOV R4,#00H
LK4:MOV DPTR,#PORTC
     MOV A,R2
     MOVX @DPTR,A
NOP
NOP
   MOVX A,@DPTR
JB ACC.4,LONE
MOV A,#00H
AJMP LKP
LONE:JB ACC.5,LTWO
     MOV A,#04H
AJMP LKP
LTWO:JB ACC.6,LTHR
    MOV A,#08H
    AJMP LKP
LTHR:JB ACC.7,NEXT
MOV A,#0CH
LKP:
ADD A,R4
  PUSH ACC
LK3:ACALL DISPLAY
ACALL KSI
JNZ LK3
POP ACC
MOV 30H,A
ret
NEXT:INC R4
     MOV A,R2
     JNB ACC.3,KND
     RL A
     MOV R2,A
     DJNZ R1,LK4
KND:ret
KSI:MOV DPTR,#PORTC
 MOV A,#00H
 MOVX @DPTR,A
 NOP
 NOP
 MOVX A,@DPTR
 CPL A
 ANL A,#0F0H
 RET
  
          
 



display:mov r5,#02h       ;显示
lool:mov r4,#0FFh
dplop: mov a,#0ffh ;取个位数
MOV A,#7fh;查个位数的7段代
MOV DPTR,#PORTA            
MOVX  @DPTR,A ;送出个位的7段代码
MOV DPTR,#PORTB 
 MOV A,r6 
 MOVX @DPTR ,A;开个位显示
acall d1ms ;显示162微秒


djnz r4,dplop ;循环执行250次
djnz r5,lool
mov r5,#02h
poop:mov r4,#0FFh
   ppdd:  mov a,#07fh ;取个位数
;查个位数的7段代
MOV DPTR,#PORTA            
MOVX  @DPTR,A ;送出个位的7段代码
MOV DPTR,#PORTB 
 MOV A,#00h 
 MOVX @DPTR ,A;开个位显示
acall d1ms ;显示162微秒
MOV DPTR,#PORTB
 MOV A,#0FFH 
 MOVX @DPTR ,A;关闭个位显示,防止鬼影
djnz r4,ppdd ;循环执行250次
djnz r5,poop
ret
 display1: mov r5,#08h
           mov r4,#7fh
 ww:mov a,r5
    dec a
 mov dptr,#sttab
MOVC A,@A+DPTR ;查个位数的7段代
MOV DPTR,#PORTA            
MOVX  @DPTR,A ;取个位数
;查个位数的7段代
MOV DPTR,#PORTB 
 MOV A,r4 
 MOVX @DPTR ,A;开个位显示
acall d1ms ;显示162微秒
MOV DPTR,#PORTB
 MOV A,#0ffH 
 MOVX @DPTR ,A;关闭个位显示,防止鬼影
 mov a,r4
 rr a
 mov r4,a
 djnz r5,ww
 ret
;2+2X80=162微秒,延时按12MHZ计算
D1MS: MOV R7,#150
DJNZ R7,$
ret
sttab: db  3dh,5ch,5ch,3fh,40h,40h,40h,40h
end

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户201819 2009-3-23 10:50

我的毕业设计是做密码锁,有无仿真电路图给我研究研究?谢谢
相关推荐阅读
用户146634 2009-05-07 11:43
信号采集放大电路
左端口输入5V电压,右端口输出到ADC模数转换我用面包板搭建的电路,但电容都没加现在问题是输出是负值,应该是正值才对电源正负12V,用有12伏和5伏输出的稳压源连得 ...
用户146634 2009-04-26 07:30
实用电路分析
老板给个电路图让分析其中的MAX485位置是个什么东西,此电路有三个接口,其中上方左侧为交流输入,分析已经经过了变压器,电压等级在50V左右,上方右侧分析为信号入,下方为信号出,希望对电路有研究的可以...
用户146634 2009-03-22 11:37
PLC学习第一步—硬件组态
目的:生成一个新项目,完成系统硬件配置文件并将其下载,完成系统配置步骤:1、  双击SIMATIC Manager图标,打开STEP7 主画面2、  点击FILE \ NEW,按照图例输入文件名称(T...
用户146634 2009-01-08 22:03
wire 和reg 的区别
今天一直在看语法看程序再看语法再看程序,调试心里有时还挺激动的,呵呵学新东西的感觉下面把遇到的reg类型和wire类型的区别记下来,方便将来看程序里从来没有指定过wire类型的变量,对组合逻辑输出变量...
用户146634 2008-12-23 15:21
单片机串口通信问题
因为做毕设,所以一直看单片机,我的题目是单片机串口通信的问题,通过一条232线在通过MAX232转换电平成TTL电平,然后接到单片机RXD端,采用中断方式,串口工作在方式1,波特率9600,用定时器1...
我要评论
1
10
关闭 站长推荐上一条 /3 下一条