打印

键盘扫描

[复制链接]
2551|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘永恒|  楼主 | 2007-6-5 10:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
刘永恒|  楼主 | 2007-6-5 11:58 | 只看该作者

谢谢!!!

使用特权

评论回复
板凳
刘永恒|  楼主 | 2007-6-5 12:00 | 只看该作者

怎么??

各位!!!
怎么没人回复呢!!!
大虾潜水了???


使用特权

评论回复
地板
conwh| | 2007-6-5 12:05 | 只看该作者

虾一般都是晚上活动,白天都是鱼

先把键值存起来,具体的定义是你自己说了算。

使用特权

评论回复
5
孤独泪| | 2007-6-5 12:20 | 只看该作者

自己努力写写吧,如果要做电子对你有好处。

使用特权

评论回复
6
zhaoyu2005| | 2007-6-5 13:51 | 只看该作者

现在怎么都是上来就要程序的,别人没事给你写程序?

自己干吗吃的?又是毕业设计或老师布置的任务吧,好好做,再练些其他的,毕业了找工作就不用焦头烂额了

使用特权

评论回复
7
blitzero| | 2007-6-5 14:15 | 只看该作者

有流程还要程序

还那么直接

使用特权

评论回复
8
gyt| | 2007-6-5 17:05 | 只看该作者

学生?

又是毕业设计吧:)

使用特权

评论回复
9
yxcool08| | 2007-6-5 23:19 | 只看该作者

看书把

不知道你用什么设计,51的好像每本都要讲吧?

使用特权

评论回复
10
edanzg| | 2007-6-6 00:44 | 只看该作者

这是www.c51.cn上面的参考程序,非常经典,


连我这样的外行都能看懂一二,看来我也要加入你们的行列玩单片机了。

;**********************************************************************
;成功一号实验程序--4×4键盘按键显示对应键值程序-不用循环方式 12MHZ晶振
;--键盘与LED显示 如不拔出LED的各位跳线,LED可以反映当前按键由P1口的矩阵关系
;版权所有,转载请注明作者及本站网址 www.c51.cn
;作者:尘封往事   2006年2月28日
;**********************************************************************

;伪定义        
        KEYBUF    EQU    30H     ;键值暂存单元,查表时用
;*************************************
;*                                   *
;*      主程序和中断程序入口         *
;*                                   *
;*************************************
  ORG     0000H       ;程序执行开始地址
  AJMP    MAIN                ;跳至MAIN执行
;*************************************
;*                                   *
;*        主  程  序             *
;*                                   *
;*************************************
                ORG     0040H
MAIN:           MOV     P1,#0FFH
                CLR     P2.0
                LCALL   KEYSCAN         ;主体程序。调用查键子程序
  LJMP MAIN    ;转MAIN循环
  NOP     ;软件陷阱
  NOP
  NOP
  LJMP MAIN    
;*************************************
;*                                   *
;* 键盘工作子程序(4 * 4 阵列)      *
;* 出口为各键工作程序入口 P1口      *
;*************************************
KEYSCAN:        
     MOV P1,#0FFH;清P1口,初始化键低电平有效
     CLR P1.4;清P1.4口
     MOV A,P1;读P1口状态
     ANL A,#0FH;清高4位,保留低四位低电平有效
     XRL A,#0FH;异或相同则为0不同结果为1,为0则表示无键被按下(这一行)
     JZ NOKEY1;为0则转下一行键值处理
     LCALL DL10MS;有键按下则延时10ms再测一次抗干扰
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY1;是干扰则转下一行键值处理程序
     MOV A,P1
     ANL A,#0FH;保留低四?
KB1:
     CJNE A,#0EH,KB2;如果值为#0E则为P1.4与P1.0组合的键
     MOV KEYBUF,#0;赋键值
     LJMP KEYWORK;转键处理
KB2: CJNE A,#0DH,KB3;如果值为#0D则为P1.4与P1.1组合的键
     MOV KEYBUF,#1
     LJMP KEYWORK
KB3: CJNE A,#0BH,KB4;如果值为#0B则为P1.4与P1.2组合的
     MOV KEYBUF,#2
     LJMP KEYWORK
KB4: CJNE A,#07H,KB5;如果值为#07则为P1.4与P1.3组合的
     MOV KEYBUF,#3
     LJMP KEYWORK
KB5: NOP


NOKEY1:
     MOV P1,#0FFH
     CLR P1.5
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY2
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY2
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB6
     MOV KEYBUF,#4
     LJMP KEYWORK
KB6: CJNE A,#0DH,KB7
     MOV KEYBUF,#5
     LJMP KEYWORK
KB7: CJNE A,#0BH,KB8
     MOV KEYBUF,#6
     LJMP KEYWORK
KB8: CJNE A,#07H,KB9
     MOV KEYBUF,#7
     LJMP KEYWORK
KB9: NOP


NOKEY2:
     MOV P1,#0FFH
     CLR P1.6
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY3
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY3
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB10
     MOV KEYBUF,#8
     LJMP KEYWORK
KB10: CJNE A,#0DH,KB11
     MOV KEYBUF,#9
     LJMP KEYWORK
KB11: CJNE A,#0BH,KB12
     MOV KEYBUF,#10
     LJMP KEYWORK
KB12: CJNE A,#07H,KB13
     MOV KEYBUF,#11
     LJMP KEYWORK

KB13: NOP


NOKEY3:
     MOV P1,#0FFH
     CLR P1.7
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY4
     LCALL DL10MS
     MOV A,P1
     ANL A,#0FH
     XRL A,#0FH
     JZ NOKEY4
     MOV A,P1
     ANL A,#0FH
     CJNE A,#0EH,KB14
     MOV KEYBUF,#12
     LJMP KEYWORK
KB14: CJNE A,#0DH,KB15
     MOV KEYBUF,#13
     LJMP KEYWORK
KB15: CJNE A,#0BH,KB16
     MOV KEYBUF,#14
     LJMP KEYWORK
KB16: CJNE A,#07H,KB17
     MOV KEYBUF,#15
     LJMP KEYWORK
KB17: NOP

NOKEY4:
     LJMP MAIN

KEYWORK:
      MOV A,KEYBUF;得到键值
      MOV  DPTR,#TABLE
      MOVC A,@A+DPTR;查行键值送ACC
      MOV P0,A;

     
WAITFREE:
     MOV A,P1;以下程序等待键释放
     MOV KEYBUF,#00H
     ANL A,#0FH
     XRL A,#0FH
     JNZ WAITFREE
     RET
;
;*************************************
;*                                   *
;*          延时513 us              *
;*                                   *
;*************************************
;
;513微秒延时程序
DELAY:          MOV     R2,#0FEH
DELAY1:         DJNZ    R2,DELAY1
  RET
;
;
;
;*************************************
;*                                   *
;*             延时10ms             *
;*                                   *
;*************************************
;
;10毫秒延时程序
DL10MS:         MOV     R3,#14H
DL10MS1:        LCALL   DELAY
                DJNZ    R3,DL10MS1
          RET
;
TABLE:                                  ;七段显示器数据定义
     DB  0C0H, 0F9H, 0A4H, 0B0H, 99H ; 01234
     DB  92H,  82H,  0F8H, 80H,  90H    ; 56789
     DB  88H,  83H,  0C6H,  0A1H, 86H ; ABCDE
     DB  8EH           ; F
     END              ;程序结束

使用特权

评论回复
11
edanzg| | 2007-6-6 00:51 | 只看该作者

上面提到了软件陷阱,

不知道软件陷阱是不是这么下面这么描述的?请高手指点一二。
指令冗余软件陷阱
指令冗余:当CPU受到干扰后,程序跑飞,往往将操作数当作指令来执行,
这时我们一般在关键的地方插入单字节指令(NOP)或将有效单字节指令
重复书写,以保护其后的指令与操作数不被拆散。
指令冗余使跑飞的程序正常下来需要符合两个条件:1.跑飞的程序指针必须指向
程序区,当程序指针指向没有使用的EPROM空间时,指令冗余不起作用;2.必须
能够执行到冗余指令,如果在执行到冗余指令前程序进入死循环,指令冗余也不
起作用。对第二种情况可使用看门狗;对第一种情况就可使用软件陷阱。软件陷
阱就是将程序强行引导到一个指定的地址,一般由三条指令组成:
NOP
NOP
LJMP XXXX(指定地址)
将这三条指令放到未使用的中断向量处、为使用的程序存储区等等, 

使用特权

评论回复
12
conwh| | 2007-6-6 02:17 | 只看该作者

这也叫陷阱?

一般陷阱是指,在系统出现故障(指针飞跑)时,能够捕捉系统运行状态,并能够(指针)返回到故障断裂处。这最多是增加软件的冗余度,如果他这么考虑,以下的均采用此法才对。

使用特权

评论回复
13
刘永恒|  楼主 | 2007-6-8 10:13 | 只看该作者

谢谢!!

非常感谢上边的回复!!!!!
现在我想通过p1口键盘输入0——255的十进制数,之后在把它变成2进制数。再发到p0口,从而产生8位二进制码。。
请看下边的参考程序:::
有些错误,但不知在哪里。。请指点一二!!!!!!

ORG 0030H
MAIN: MOV A,#00H
          MOV 72H,A
          MOV 71H,A
          MOV 70H,A
          MOV R0,#70H
          MOV R3,#00H
          LCALL KEY
          MOV A,R7
          CJNE A,#0FFH,NEXT11
          LJMP KEY
NEXT11:CJNE A,#0AH,STORE
          LCALL FASR
          MOV P0,A
          LJMP MAIN
STORE:MOV @R0,A
          INC R0
          INC R3
          LJMP KEY
FASR: CJNE R3,#03H,NEXT1
           LCALL THREE
           RET
NEXT1:CJNE R3,#02H,NEXT2
           LCALL TWO
            RET
NEXT2: CJNE R3,#01H,KEY
           LCALL ONE
           RET
THREE: MOV B,#100
              MOV A,70H
              MUL AB
              MOV 73H,A
              MOV B,#10
              MOV A,71H
              MUL AB
              ADD A,73H
              ADD A,72H
              RET
TWO: MOV B,#10
          MOV A,71H
          MUL AB
          ADD A,72H
          RET
ONE: MOV A,70H
         RET
 KEY:           ACALL              KS
                   JNZ                  K1
                   ACALL              DELAY
                   ACALL              DELAY
                  MOV               R7,#0FFH
                    RET
    K1:          ACALL              DELAY
                   ACALL              DELAY
                   ACALL              KS
                   JNZ                  K2
                  MOV                  R7,#0FFH
    K2:          MOV                 R2 ,  #0EFH
                   MOV                 R4 ,  #00H
     K3:          MOV                 P1  ,  R2
                   MOV                  A ,P1
                   JB                    ACC.0 ,LONE
                   MOV                 A  ,#00H
                   AJMP               LK
  LONE:       JB                    ACC.1 ,LTWO
                   MOV                 A ,#04H
                   AJMP               LK
  LTWO:      JB                    ACC.2 ,LTHE
                  MOV                  A  ,#08H
                  AJMP                 LK
  LTHE:      JB                      ACC.3  ,NEXT
                 MOV                   A  ,#0CH
  LK:         ADD                    A  ,R4
        MOV          R7 ,A
   
 QR:    ACALL   KS
     JNZ     QR
     ACALL   DELAY
     ACALL   KS
     JNZ    QR
    MOV R7,#0FFH
    RET
NEXT:      INC                      R4           
                MOV                   A  , R2
                JNB                   ACC.7 , KEY
                RL                      A
                MOV                   R2 ,  A
                AJMP                   K3
   KS:        MOV                  P1, #0FH
                MOV                   A ,P1
                CPL                     A
                 ANL                   A ,#0FH
                RET
 DELAY:       MOV               R2 ,#10H
DELAY1:      MOV               R3 ,#0FAH
                 DJNZ              R3 ,$
                 DJNZ              R2 ,DELAY1
                 RET
        END

使用特权

评论回复
14
851125| | 2007-6-8 17:12 | 只看该作者

一定要延时一下啊

使用特权

评论回复
15
hxa_online| | 2007-6-8 17:14 | 只看该作者

看我的贴字

使用特权

评论回复
16
liqimcu| | 2007-6-8 17:56 | 只看该作者

顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝