keyboard matriks dan bagaimana untuk memecahkan kode selanjutnya?

T

tersenyum

Guest
di sini adalah matriks keyboard yang saya temukan, bisa Anda ceritakan ide untuk mengkodekan sinyal output (Pio) dan sinyal yang dikodekan melalui mikrokontroler dapat muncul pada 4 angka-7segment layar LCD.
Thanks!
Maaf, tapi Anda harus login untuk melihat lampiran

 
Hi, tersenyum
di sini adalah kode ASM saya menulis dalam Batronix Pro Keyboard studio untuk memecahkan kode matriks 89C51 interface dengan UC.Mudah-mudahan bermanfaat untuk U
Kode:

INCLUDE 89c51.mcORG 0000H

UTAMA:

MOV A, # 00h

MOV TMOD, # 01H

MOV P2, # 00h

LOOP: MOV R6, A

ACALL READ_KEY

JNC SKIP

MOV A, R6

SKIP: ACALL OUTLED

JMP LOOP

;************************************************* ***************

; KeyBoard matriks 4x4: nilai awal P1 = 11.111.110

; 1 1 1 1

; P1.4 P1.5 P1.6 P1.7

; -----------------------------

, 1 P1.3 | f1 f2 f3 f4

, 1 P1.2 | f5 f6 f7 f8

, 1 P1.1 | F9 F10 F11 F12

; 0 P1.0 | F13 F14 F15 F16GETKEY:

PUSH 02H; R2 BANK1

PUSH 06H; R6 BANK1

PUSH 07H; R7 BANK1

MOV A, # 0FEH

MOV R6, # 4; kontrol 4 baris

TEST:

MOV P1, A; nilai awal PO 111.111.110

MOV R7, A

MOV A, P1; mendapatkan nilai setelah buttuon mendorong dari P1

ANL A, # 0F0H; jelas BIT 4 rendah (baris PO-> P3)

CJNE A, # 0F0H, HINT_KEY; biasanya jika tombol tidak mendorong, jelas rendah 4 bit => A = 0F0H

MOV A, R7

RL A

DJNZ R6, TEST

CLR C; C = 0 alarm tidak ada tombol ditekan

LJMP EXIT

HINT_KEY:

MOV R7, A

MOV A, # 4

CLR C

Desember R6

MOV A, R6

ADD A, R6

ADD A, R6

ADD A, R6

; R6x4

MOV R6, A

MOV A, R7

CLR C

SWAP A; swap untuk menguji 4 bit tinggi (mendeteksi kolom)

MOV R2, # 4; alternatif tes 4 kolom (tes 4 bit tinggi)

KEMBALI:

RRC A; swap untuk menemukan lokasi bit yang nilainya = 0

JNC DONE; Jika C = 0 menemukan lokasi bit, nilai yang adalah 0

INC R6

; jika u tidak menemukan bit 0, periksa kolom lain dan meningkatkan localtion (R6) 1

; dalam satu kolom, dari 2 lokal tombol berbeda berturut-turut adalah 4

DJNZ R2, AGAIN

DONE:

MOV A, R6; Nilai R6 adalah dari lokal tombol mendorong (ex: tombol F16 kemudian didorong R6 = 15)

SETB C; C = 1 terdapat tombol mendorong

; C = 0 tidak ada tombol ditekanEXIT: NOP

POP 07H; Tra lai gia tri cua R7 truoc ham Getkey

POP 06H; R6

POP 02H; R2

; CAC gia tra lai cho tri R7, R6, R2 ngan nam trong xep boi da Giu Luu POP

RET;************************************************* ***************

READ_KEY:

PUSH 03H; POB Dung Luu Trong CUA R3 Ngan XEP SAU DE DO Dung LAI

NHOK: MOV R3, # 50

BACK:; melindungi tombol gemetar

ACALL GETKEY

JNC NHOK

DJNZ R3, BACK

PUSH ACC

BACK2:

MOV R3, # 50

BACK3:

ACALL GETKEY

JC BACK2

DJNZ R3, BACK3

POP ACC

POP 03H

RET

;********************************************OUTLED:

MOV DPTR, # BANGLED

MOVC A, @ A DPTR

MOV P3, A

RET

BANGLED:

; Yang oder tombol 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

; A = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15DB 09H, 0BDH, 13H, 91H, 0A5H, 0C1H, 41H, 9DH, 01H, 81H, 09H, 0BDH, 13H, 91H, 0A5H, 0C1HEND

 
satu untuk PIC di CCS ...
PORTB [7 .. 4] kolom
PORTA [3 .. 0] garis

Kode:# menggunakan fast_io (A)

# menggunakan fast_io (B)const char dakeys [4] [4] = ((7, 8, 9 ,'/'},

(4, 5, 6 ,'*'},

(1, 2, 3 ,'-'},

( 'c', 0 ,'=',' '}};

char Read_Keyb ()

(Int h = 0xE0;

int i, j, k;for (i = 0; i <4; i )

(

output_b (h);

delay_ms (1);

k = input_a ();

if ((k & 0xf)! = 0xf)

(

for (j = 0; j <4; i )

(if (bit_test (k, 0) == 0) return dakeys [j] ;

k = k>> 1;)

)

h = (h <<1) | 0x10;

)

kembali 0xff;

)

 
tersenyum

Adalah lebih baik jika Anda akan tahu prinsip decoding balik matriks switch, dengan cara ini Anda dapat perangkat program Anda sendiri.

Its like "mengajar Anda untuk menangkap ikan bukan memberi satu."

dengan cara ini, bahkan dalam aplikasi apapun Anda akan tahu bagaimana melakukannya pada Anda sendiri.

blastronics

pm saya dan saya akan glady untuk memberitahu Anda bagaimana.<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top