DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 268|回复: 0
打印 上一主题 下一主题

单片机处理密码的简单方法

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:46:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    单片机处理密码的简单方法
以下是本人用单片机对键盘输入密码与处理的一些小看法。键盘是4*4=16键的小键盘,接在P2口,四行四列分别接P2
口的高位和低位。P1口接8个LED
保存输入的密码主要思想是“先进先出”。
主要程序段如下:
*****先进行初始化
mov 20h,#00h;存当前输入密码
mov 21h,#00h
mov 22h,#12;存原始密码
mov 23h,#34
........(使用20H,21H保存输入的两位密码,保存多位也是一样的道理)
mov 2ah,#00h;是否保存开始保存密码
;*************读键盘程序段*****************
READKEY:  PUSH B                     
          PUSH 1
          MOV P2,#0F0H
          MOV A,P2
          CJNE A,#0F0H,RK_HIT0
          LJMP RK_EXIT
RK_HIT0:   LCALL DELAY  ;延时消抖
          MOV P2,#0F0H
          MOV A,P2               
          CJNE A,#0F0H,RK_KIT1     
          LJMP RK_EXIT
RK_KIT1:  ORL A,#0FH
          MOV P2,A
          MOV A,P2
          MOV B,A                    
          MOV R1,#0FFH
          MOV DPtr,#KCODTAB
RK_NONE:  CLR A   ;判断按的是哪号键
          MOVC A,@A+DPtr
          INC DPtr
          INC R1
          CJNE A,B,RK_NONE ;将键号存R1中
SKEY:     MOV P2,#0F0H  ;判断是否释放了键
          NOP
          MOV A,P2
          CJNE A,#0F0H,SKEY
*****键操作功能
key15: cjne r1,#15,save_mm  
       mov 20h,#00H         ;开始输入密码之前先原来保存的密码清除
       mov 21h,#00H
       mov a,2ah            ;作用是按一下可以输入密码,如果再按一下则是取消输入
       cjne a,#00h,set15
       mov 2ah,#0ffh
       ajmp rk_exit
set15: mov 2ah,#00h
       ajmp rk_exit
save_mm: mov a,2ah       ;密码是否保存
        cjne a,#0ffh,key1   ;如果值为00H则不是要输入密码,转向正常的功能键
        mov 21h,20h  ;先将20H里的数据存入21H
        mov 20h,r1  ; 把刚输入的密码放入20H中
key14: cjne r1,#14,key1    ;比较密码是否正确   
        mov a,2ah
       cjne a,#0ffh,rk_exit
        mov 2ah,#00h   ;将2ah清零,不再允许输入密码了(即没有按开始键k15将不允许输入密码)
       ;开始比较密码是否正确了,比较之后将20H,21H清零,源密码存放在22H中      
       mov a,20h
       cjne a,22h,error
       mov a,21h
      cjne a,23h,error
       ;密码对了,执行相应的操作
       setb p1.0    ;密码对了,一号灯亮
       ;...................
        ajmp rk_exit
error: ;密码错了,执行相应的操作
        setb p1.2  ;密码错了,三号灯亮
        ;...................
         ajmp rk_exit
key1:  ;其它功能键
key2:  ;*******
rk_exit: ret  ;按键判断完成,退出读键盘程序
;*****************以下为延时程序段**********************
DELAY:    MOV R6,#20
DELAY1:   MOV R7,#50
          DJNZ R7,$           ;2US X 50 = 100 US, 12MHZ
          DJNZ R6,DELAY1
          RET
         
;**********存放键值的表格****************
KCODTAB:  DB 11100111B,11101011B,11101101B,11101110B
          DB 11010111B,11011011B,11011101B,11011110B
          DB 10110111B,10111011B,10111101B,10111110B
          DB 01110111B,01111011B,01111101B,01111110B

         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-15 18:35 , 耗时 0.089241 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表