石家庄论坛's Archiver

RFID-device 发表于 2008-7-10 21:47

用单片机实现简易感应键盘

感应键盘的原理[img]http://www.mediaplayer.eetchina.com/STATIC/ARTICLE_IMAGES/200804/MPCOL_2008APR21_DISMP_TA_20_4.gif[/img]

CYPRESS公司的实现:
参考CYPRESS公司AN2394.PDF,(见下图)
STC单片机I/O结构参见STC12C5408AD.PDF
都明白了吧
开始编程序
[img]file:///D:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot-2.jpg[/img]
[img]file:///D:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg[/img][img]file:///D:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot-1.jpg[/img]

[[i] 本帖最后由 RFID-device 于 2008-7-10 21:56 编辑 [/i]]

RFID-device 发表于 2008-7-10 21:48

抱歉,几个月前的程序,找不到了,明天吧

RFID-device 发表于 2008-7-11 20:49

ORG 000H
               AJMP MAIN
               ORG 000BH;T0
               LJMP  jianzhi
                    ORG 0040H
MAIN:          MOV   R0,#0FFH
               CLR   A
CLRMEM:        MOV   @R0,A
               DJNZ  R0,CLRMEM
               MOV   SP,70H
        MOV   P1,#0FFH
        MOV   P2,#0FFH
        MOV   P3,#0FFH
;------------------------------
CVV2:   MOV   WDT_CONTR,#3CH     
        ACALL COMINT
        CLR ES
        MOV 50H,#2FH
   MOV 51H,#2FH
   MOV 53H,#2FH
   mov 2bh,#00h
        MOV 56H,#10H
   SETB TR0
   SETB 20H.0
        SETB 20H.1
   MOV P1M0,#0FFH
   MOV P1M1,#0H
   MOV P2M0,#0FFH
   MOV P2M1,#0H
      
ACALL KSCS
;---------------------------------
RUN:         MOV 50H,#2FH
            mov a,#2bh
           CJNE A,#0A0H,KSCS3
           MOV 2BH,#00H
            ACALL KSCS
           AJMP RUN
;----------------------------------
KSCS3:             MOV   WDT_CONTR,#3CH
             ACALL CS
MAINXX:      AJMP RUN
;===================================
COMINT:         ORL AUXR ,#60H
                MOV TH1,#0f3H
                MOV TL1,#0F3H
                     MOV TMOD,#21H
                     MOV SCON,#50H
                MOV IP,#02H
                MOV IE,#82H
                MOV TL0,#0c0H
                MOV TH0,#063H
                     SETB TR1
                CLR  TR0
                          SETB ES
                          RET
;===================================
com232:
MOV   SBUF,a
JNB   TI,$
CLR   TI
RET
;=====================================
JIANZHI:  
push acc
CLR TR0
mov P1M0,#00H;2一位推挽出,其他输入
mov P1M1,#0ffH;2                   
mov P2M0,#00H;2一位推挽出,其他输入
mov P2M1,#0ffH;2          
      INC 2BH      
JJJJJ:   MOV P1,#00H
         MOV P2,#00H
JNB 20H.1,JIAN1
         CLR 20H.1
         AJMP JIAN3
JIAN1:  JNB 20H.0,JIAN4    ;同步CS子程序
             AJMP JIAN3
;-------------------------
JIAN4:  MOV R0,#80H
        MOV R1,#30H
LOOP1:  
        CLR C;@R0-@R1
        MOV R2,#2H
LOOP:   
        MOV A,@R0
        SUBB A,@R1
        INC R0
        INC R1
        DJNZ R2,LOOP
        JC QAZ
        CJNE R1,#50H,LOOP1
        AJMP CLRKEY1
;--------------------------
QAZ:   CJNE R1,#50H,KEY_E
        MOV 50H,#08H
        AJMP KEY_JS
KEY_E:  CJNE R1,#4EH,KEY_D;n
        MOV 50H,#07H
        AJMP KEY_JS
KEY_D:  CJNE R1,#4CH,KEY_C;n
        MOV 50H,#00H
        AJMP KEY_JS
KEY_C:  CJNE R1,#4AH,KEY_B;n
        MOV 50H,#0DH
        AJMP KEY_JS
KEY_B:  CJNE R1,#48H,KEY_A;n
        MOV 50H,#0BH
        AJMP KEY_JS
KEY_A:  CJNE R1,#46H,KEY_9;n
        MOV 50H,#0EH
        AJMP KEY_JS
KEY_9:  CJNE R1,#44H,KEY_8;n
        MOV 50H,#0FH
        AJMP KEY_JS
KEY_8:  CJNE R1,#42H,KEY_7;n
        MOV 50H,#09H
        AJMP KEY_JS
;------------------------
KEY_7:  CJNE R1,#40H,KEY_71;n
        MOV 50H,#0CH
        AJMP KEY_JS
KEY_71:  CJNE R1,#3eH,KEY_6;
        MOV 50H,#06H
        AJMP KEY_JS
KEY_6:  CJNE R1,#3CH,KEY_5;n
        MOV 50H,#0AH
        AJMP KEY_JS
KEY_5:  CJNE R1,#3AH,KEY_4;n
        MOV 50H,#03H
        AJMP KEY_JS
KEY_4:  CJNE R1,#38H,KEY_3;n
        MOV 50H,#02H
        AJMP KEY_JS
KEY_3:  CJNE R1,#36H,KEY_2;n
        MOV 50H,#01H
        AJMP KEY_JS
KEY_2:  CJNE R1,#34H,KEY_1;n
        MOV 50H,#05H
        AJMP KEY_JS
KEY_1:  CJNE R1,#32H,KEY_ERR;n
        MOV 50H,#04H
        AJMP KEY_JS
KEY_ERR:MOV 50H,#2FH
        AJMP CLRKEY1
;------------------------
KEY_JS:              
         MOV A,50H
         CJNE A,51H,CLRKEY1A_A;校验一次
         CJNE A,53H, KEY_JSA
         MOV A,56H
         CJNE A,#020H, KEY_JSB
KEY_JSB:JC CLRKEY1
         mov 56h,#10h ;当按同一键两次是,间隔56H-10次
KEY_JSA:      
         MOV 53H,51H
         clr p3.7
         ACALL FSDATA
         setb p3.7
        mov p1,#00h
        mov p2,#00h
               MOV 5AH,#08H
BBBC:          MOV 59H,#00H
BBBV:             MOV 58H,#00H
         MOV   WDT_CONTR,#3CH  
                        DJNZ 58H,$
         DJNZ 59H,BBBV
                    DJNZ 5AH,BBBC
                  SETB 20H.1
              AJMP CLRKEY1
;---------------------------
CLRKEY1A_A: MOV 51H,50H
          AJMP CLRKEY2
CLRKEY1:
         INC 56H
         ;MOV 53H,#2FH
         MOV 50H,#2FH
              ;MOV 51H,#2FH
         ;MOV 22H,#0H
;---------------------------
CLRKEY2: MOV R0,#30H
         CLR A
CLRKEY:  MOV @R0,A
         INC R0
         CJNE R0,#50H,CLRKEY
JIAN3:   CPL 20H.0
  mov P1M0,#0FFH;2 为输入
           mov P1M1,#0FFH;2
mov P2M0,#0FFH;2 为输入
           mov P2M1,#0FFH;2

         MOV TL0,#0c0H;ef
         MOV TH0,#63H;50MS
         SETB TR0
         pop acc
         RETI
;====================================
CS:   CPL P3.2
      JnB KEY4,CS1
         CPL P3.3  
           ANL P1M0,#0FEH
           ORL P1M1,#01H  ;对应端口强力输出
           clr KEY4
           NOP
      MOV DPL,30H;2
           MOV DPH,31H
           INC DPTR
           MOV 30H,DPL
           MOV 31H,DPH
      ORL P1M0,#0FFH;只输入利用施密特特性
           ORL P1M1,#0FFH
                AJMP CSJIESHU
CS1:  JB KEY5,CS2   
      ANL P1M0,#0FDH
           ORL P1M1,#02H
      CLR KEY5
      NOP
           SETB KEY5
      MOV DPL,32H
                MOV DPH,33H
                INC DPTR
                MOV 32H,DPL
                MOV 33H,DPH
      ORL P1M0,#0FFH
           ORL P1M1,#0FFH
      AJMP CSJIESHU
CS2:  JB KEY1,CS3
      ANL P1M0,#0FBH
      ORL P1M1,#04H
      CLR KEY1
      NOP
      SETB KEY1
      MOV DPL,34H
                MOV DPH,35H
                INC DPTR
                MOV 34H,DPL
                MOV 35H,DPH
      ORL P1M0,#0FFH
           ORL P1M1,#0FFH
      AJMP CSJIESHU
CS3:  JB KEY2,CS4
      ANL P1M0,#0F7H
           ORL P1M1,#08H
      CLR KEY2
      NOP
           SETB KEY2
      MOV DPL,36H
                MOV DPH,37H
                INC DPTR
                MOV 36H,DPL
           MOV 37H,DPH
      ORL P1M0,#0FFH
           ORL P1M1,#0FFH
      AJMP CSJIESHU
CS4:  JB KEY3,CS5  
      ANL P1M0,#0EFH
           ORL P1M1,#010H
      CLR KEY3
      NOP
           SETB KEY3
      MOV DPL,38H
                MOV DPH,39H
                INC DPTR
                MOV 38H,DPL
                MOV 39H,DPH
      ORL P1M0,#0FFH
           ORL P1M1,#0FFH
      AJMP CSJIESHU
CS5:  JB KEYCLR,CS6
      ANL P1M0,#0DFH
           ORL P1M1,#020H
      CLR KEYCLR
      NOP
           SETB KEYCLR
      MOV DPL,3AH
                MOV DPH,3BH
                INC DPTR
                MOV 3AH,DPL
                MOV 3BH,DPH
      ORL P1M0,#0FFH
           ORL P1M1,#0FFH
      AJMP CSJIESHU
CS6:  JB KEY6,CS7
      ANL P1M0,#0BFH
           ORL P1M1,#040H
      CLR KEY6
      NOP
           SETB KEY6
      MOV DPL,3CH
                MOV DPH,3DH
                INC DPTR
                MOV 3CH,DPL
                MOV 3DH,DPH
      ORL P1M0,#0FFH
          ORL P1M1,#0FFH
     AJMP CSJIESHU
CS7:  JB KEYC,CS8
      ANL P1M0,#07EH
                ORL P1M1,#080H
      CLR KEYC
      NOP
                SETB KEYC
      MOV DPL,3EH
                MOV DPH,3FH
                INC DPTR
                MOV 3EH,DPL
                MOV 3FH,DPH
      ORL P1M0,#0FFH
                ORL P1M1,#0FFH
      AJMP CSJIESHU
;-------------------------
CS8:  JB KEY9,CS9
   ANL P2M0,#0FEH
        ORL P2M1,#01H
   CLR KEY9
     NOP
        SETB KEY9
   MOV DPL,40H
        MOV DPH,41H
        INC DPTR
        MOV 40H,DPL
        MOV 41H,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS9: JB KEYENT,CS10
   ANL P2M0,#0FDH
        ORL P2M1,#02H
   CLR KEYENT
   NOP
        SETB KEYENT
   MOV DPL,42H
        MOV DPH,43H
        INC DPTR
        MOV 42H,DPL
        MOV 43H,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS10: JB KEYSET,CS11
   ANL P2M0,#0FBH
        ORL P2M1,#04H
   CLR KEYSET
    NOP
        SETB KEYSET
   MOV DPL,44H
        MOV DPH,45H
        INC DPTR
        MOV 44H,DPL
        MOV 45H,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS11:JB KEYB,CS12
   ANL P2M0,#0F7H
        ORL P2M1,#08H
   CLR KEYB
   NOP
        SETB KEYB
   MOV DPL,46H
        MOV DPH,47H
        INC DPTR
        MOV 46H,DPL
        MOV 47H,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS12: JB KEYD,CS13
   ANL P2M0,#0EFH
        ORL P2M1,#010H
   CLR KEYD
   NOP
        SETB KEYD
   MOV DPL,48H
        MOV DPH,49H
        INC DPTR
        MOV 48H,DPL
        MOV 49H,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS13:JB KEY0,CS14
   ANL P2M0,#0DFH
        ORL P2M1,#020H
   CLR KEY0
   NOP
        SETB KEY0
   MOV DPL,4AH
        MOV DPH,4BH
        INC DPTR
        MOV 4AH,DPL
        MOV 4BH,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS14:JB KEY7,CS15
   ANL P2M0,#0BFH
        ORL P2M1,#040H
   CLR KEY7
   NOP
        SETB KEY7
   MOV DPL,4CH
        MOV DPH,4DH
        INC DPTR
        MOV 4CH,DPL
        MOV 4DH,DPH
   ORL P2M0,#0FFH
        ORL P2M1,#0FFH
   AJMP CSJIESHU
CS15: JB KEY8,CSJIESHU
      ANL P2M0,#07FH
           ORL P2M1,#080H
      CLR KEY8
      NOP
      SETB KEY8
      MOV DPL,4EH
           MOV DPH,4FH
           INC DPTR
           MOV 4EH,DPL
           MOV 4FH,DPH
      ORL P2M0,#0FFH
           ORL P2M1,#0FFH
CSJIESHU:      RET
;==================================
LINGMINDU:
              RET
;===============================
FSDATA:  
FSOUT:  mov r1,#0h
        MOV R0,#0H
ccvv:        MOV   WDT_CONTR,#3CH
        DJNZ R0,$
        djnz r1,ccvv
SETB P3.7
RET
dell:       mov r0,#00h
dell2:     mov r1,#00h
dell1:      mov r2,#00h
           djnz r2,$
           djnz r1,dell1
           djnz r0,dell2
                          RET
KSCS: ;JNB 20H.0,$
KSCS1:MOV   WDT_CONTR,#3CH       
       ACALL CS
                 JB 20H.0,KSCS1
       ;SETB 20H.1
;-------------------------------
        MOV R2,#20H
        MOV R1,#80H
        MOV R0,#30H
ZHUANCUNDATA: MOV A,@R0
          MOV @R1,A
               INC R0
               INC R1
               DJNZ R2,ZHUANCUNDATA
;--------------------------------
          MOV R2,#10H
          MOV R1,#80H
ZHUANCUNDATA1:  MOV A,@R1
          ADDC A,#03H  ;
               MOV @R1,A
               INC R1
               INC R1
               DJNZ R2,ZHUANCUNDATA1
                         RET
               END

RFID-device 发表于 2008-7-11 20:51

本键盘只是个人的一个实验,没做实际工程使用,因此不保证本方法的正确性
实际中,不能克服潮湿和电磁干扰

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.