Teclado

R

Rizwanishaq

Guest
Alguém pode me ajudar conexão do teclado para o 8051 e dar o programa

 
selecione uma linha e, então, verificar todas as colunas.
Selecione outra linha e outra.
Verificação completa dizer a cada 100ms.
Se pressionado, seleção duas vezes após 10ms.

 
Se você quiser evitar o teclado e ler algo simplesmente pela porta, então use 74HC922/74923.Eu usei isso com AVR.Ver
http://booksbybibin.14.forumer.com/viewtopic.php?t=11

Bibin John
www.bibinjohn.tk

 
Este código lê 4x4 teclado ..
Se você não precisa de serial / saída paralela - remove seções relevantes ..

Atenciosamente,
IanP
Código:

NOPAGING $

$ MOD252;------------------------------------------------- -------------------------------------------------- ------------------

; Código: almofada 4x4 matriz chave

; Entradas: hex teclado via port1

; Saídas: o valor ASCII da tecla pressionada é enviada através da porta serial e também o equivalente hexadecimal é ouput através de P3.5 a P3.2

;------------------------------------------------- -------------------------------------------------- -----------------Row0 EQU P1.0

ROW1 EQU P1.1

ROW2 EQU P1.2

Row3 EQU P1.3CLMN0 EQU P1.7

CLMN1 EQU P1.6

CLMN2 EQU P1.5

CLMN3 EQU P1.4DIGIT DATA 30h; armazenamento temporário de tecla pressionada ..

ALERTA EQU P3.7; .. vai baixa quando pressionada qualquer tecla do
ORG 0000hLJMP Ks_MainORG 0030h;_________________________________________________________________

;---------- PORTA SERIAL INICIALIZAÇÃO COMEÇA AQUI -----------------

;_________________________________________________________________S9k_Main: MOV TMOD, # 20h; timer_0 em Mode2 (recarga automática 8bit) ..

MOV TH1, # 0fdh; conjunto de transmissão para 9600 ..

MOV SCON, # 50h; serial mode1 (8bit transmissão de dados varialble) ..

SETB TR1; iniciar timer_0 ..

RET;-------------- SERIAL TRANSMITIR SUBROUTINE -------------------------Tx_Main: MOV SBUF, A

Tx_Loop: JNB TI, Tx_Loop

CLR TI

RET;-------------- SERIAL RECEBER SUBROUTINE --------------------------
Rx_Main: CLR A

Rx_Loop: JNB RI, Rx_Loop

MOV A, SBUF

CLR RI

RET;---------------------- 20ms atraso ------------------------- --------Delay_20ms:; PUSH R0

; PUSH R1

MOV R0, # 36

Delay_20ms_Loop1: MOV R1, # 255

Delay_20ms_Loop2: DJNZ R1, Delay_20ms_Loop2

DJNZ R0, Delay_20ms_Loop1

; POP R1

; POP R0

RET;------------------------ subrotina mostrar ----------------------- ---------Disp_Message: PUSH ACCDisp_M_Loop1: MOV A, # 00h; acumulador reset ..

MOVC A, @ A DPTR

CJNE A, # 00h, Disp_M_Loop2POP ACC

RETDisp_M_Loop2: MOV SBUF, A

LCALL Tx_Main

INC DPTR

LJMP Disp_M_Loop1Disp_Pressed: Key DB 'pressionada é:', 00h;---------------- ascii embalado para conversão hexadecimal ------------------Ascii2hex: PUSH ACCMOV A, DIGIT

SUBB A, # 30h

MOV B, A

ANL A, # 10h

CJNE A, # 00h, Ascii2hex_Loop2

MOV B, AAscii2hex_Loop1: MOV dígito,

POP ACC

RETAscii2hex_Loop2: MOV A, DIGIT

SUBB A, # 37h

SJMP Ascii2hex_Loop1;------------------ pressionado o botão enviar via p3 ----------------------Send4x4_Parallel: PUSH ACC

MOV A, DIGITA RRC

MOV P3.5, C; LSB ..

A RRC

MOV P3.4, C

A RRC

MOV P3.3, C

A RRC

MOV P3.2, C; MSB ..POP ACC

RET;_________________________________________________________________

;------------------------- código principal ---------------------- --------

;_________________________________________________________________Ks_Main: MOV P1, # 0FFh; Faça portas de entrada ..

; MOV P3, # 00h; fazer portas de saída, nunca fazem este erro => 3,0 n 3,1 pinos são de série

SETB ALERTA

LCALL S9k_Main

Ks_Main1: MOV P1, # 0F0h; todas as colunas de alta n linhas de baixo ..

MOV A, P1

ANL A, # 11110000b; considerar apenas as colunas ..

CJNE A, # 11110000b, Ks_Main1; verificar inicialmente lançado para todas as chaves ..;------------------------------------------------- ------------------Ks_Loop1: LCALL Delay_20ms

MOV A, P1

ANL A, # 11110000b; varredura colunas ..

CJNE A, # 11110000b, Debounce, se pressionado, seleção .. debounce

SJMP Ks_Loop1, se não, manter a verificação de tecla pressionada ..;------------------------------------------------- ------------------Debounce: LCALL Delay_20ms

MOV A, P1

ANL A, # 11110000b

CJNE A, # 11110000b, Check_Row

SJMP Ks_Loop1;------------------------------------------------- -------------------Check_Row: MOV DPTR, # Disp_Pressed

LCALL Disp_MessageCLR row0

SETB ROW1

SETB ROW2

SETB row3MOV A, P1

ANL A, # 11111110b; linha de ensaio zero ..

CJNE A, # 11111110b, Row_0;------------------------------------------------- -------------------SETB row0

CLR ROW1

SETB ROW2

SETB row3MOV A, P1

ANL A, # 11111101b; uma linha de teste ..

CJNE A, # 11111101b, row_1;------------------------------------------------- --------------------

SETB row0

SETB ROW1

CLR ROW2

SETB row3MOV A, P1

ANL A, # 11111011b; linha de ensaio duas ..

CJNE A, # 11111011b, Row_2;------------------------------------------------- --------------------

SETB row0

SETB ROW1

SETB ROW2

CLR row3MOV A, P1

ANL A, # 11110111b; linha de teste em três ..

CJNE A, # 11110111b, Row_3;------------------------------------------------- ---------------------SJMP Ks_Loop1;------------------------------------------------- ---------------------Row_0: MOV DPTR, # Disp_Kcode0

SJMP Find_NumRow_1: MOV DPTR, # Disp_Kcode1

SJMP Find_NumRow_2: MOV DPTR, # Disp_Kcode2

SJMP Find_NumRow_3: MOV DPTR, # Disp_Kcode3

SJMP Find_Num;------------------------------------------------- ---------------------Find_Num: RLC A

JNC Found_Num; qual coluna é pressionada à terra ..

INC DPTR

SJMP Find_Num;------------------------------------------------- ---------------------Found_Num: CLR ALERT; notificar MC principal que a chave foi pressionada ..CLR A

MOVC A, @ A DPTR

MOV dígito,

LCALL Tx_Main; enviar pressionado o botão para a porta serial ..

LCALL Ascii2hex

LCALL Send4x4_ParallelSETB ALERT; trazer teclado módulo de estado de espera ..;------------------------------------------------- ----------------------LJMP Ks_Main1;------------------------------------------------- ----------------------

Disp_Kcode0: DB '0 ', '1', '2 ', '3'

Disp_Kcode1: DB '4 ', '5', '6 ', '7'

Disp_Kcode2: DB '8 ', '9', 'A', 'B'

Disp_Kcode3: C ', DB' D ',' E ',' F '

;------------------------------------------------- ----------------------FIM

 
oi tudo
qualquer um ajudar-me

para conectar o teclado AT PC para o AT89C51

 
Graças a, IanPEu tentá-lo e funcionando corretamente.

Bom trabalhoAtenciosamente

 

Welcome to EDABoard.com

Sponsor

Back
Top