用单片机实现简易感应键盘
感应键盘的原理[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]] 抱歉,几个月前的程序,找不到了,明天吧 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 本键盘只是个人的一个实验,没做实际工程使用,因此不保证本方法的正确性
实际中,不能克服潮湿和电磁干扰
页:
[1]