risparmio tastiera premuto help

V

vaghn73

Guest
Questo codice funziona benissimo_Ogni volta che si preme un tasto, il suo equivalente binario si riflette a PORTB.Ma Im un problema su come i in grado di memorizzare ogni valore che viene premuto sul registro determinati (ad esempio premere ). l'utente può salvare come cifre quante ne vuole, ma terminerà * se viene premuto.qualcuno può aiutarmi in merito a questo problema? questo è il code.i originale 'm con PIC16F877 e compilatore C ad alta tecnologia.thankss.

/ *
* HARDWARE:
* - PORTB <3:0> -> 4 LED
* - PORTD <3:0 righe> -> tastiera
* - PORTD <6:4 colonna> -> tastiera
* /

# include <pic.h>
# include <htc.h>

# ifndef _XTAL_FREQ
# define _XTAL_FREQ 4000000
# endif/ / __CONFIG (HS & WDTDIS & LVPDIS);
__CONFIG (XT & WDTDIS & LVPDIS & Unprotect);

unsigned char scanned_key = 0x00;
unsigned char decoded_key = 0x00;

void init_LED (void)
(
PORTB = 0xF0;
TRISB = 0xF0;

)

void init_KEYPAD (void)
(
TRISD = 0x70; / / PORTD <6:4> input, COLONNE
TRISD = ~ 0x0F; / / PORTD <3:0> output, ROWS
PORTD = 0b00001111; / / PORTD <3:0> inizialmente elevato
)

unsigned decode_key char (val unsigned char)
(
unsigned char chiave;

switch (val)
(
0x60 caso: / / 0
key = 0x01;
break;
0x50 caso: / / 1
key = 0x02;
break;
0x30 caso: / / 2
key = 0x03;
break;
0x61 caso: / / 3
key = 0x04;
break;
0x51 caso: / / 4
key = 0x05;
break;
0x31 caso: / / 5
key = 0x06;
break;
0x62 caso: / / 6
key = 0x07;
break;
0x52 caso: / / 7
key = 0x08;
break;
0x32 caso: / / 8
key = 0x09;
break;
0x63 caso: / / 9
key = 0x0A;
break;
0x53 caso: / / 10
key = 0x0B;
break;
0x33 caso: / / 11
key = 0x0C;
break;
default:
decoded_key key =;
break;
)

return key;

)

void display_key (tasto unsigned char)
(
PORTB = chiave;
)

unsigned scan_keypad char ()
(
unsigned char val_1 = 0x00;
unsigned char val_2 = 0x00;
unsigned char count1;for (count1 = 0; count1 <4; count1 )
(
PORTD = ~ (0x01 <<count1); / / scansione riga
__delay_ms (35);
val_1 PORTD & = 0x70; / / colonna leggere, RD <6:4>
/ / while clearing RD <7> &
/ / RD <3:0>
if (val_1! = 0x70) / / se una colonna viene premuto
(
val_2 = (val_1 | count1); / / colonna (high-nibble) e count (low-nibble)
return val_2; / / valore di ritorno
)
)

return 0xFF; / / restituisce alcun valore
)

void main ()
(
init_LED (); / / inizializza PORTB <3:0>, 4 LED collegato
init_KEYPAD (); / / inizializza PORTD
/ / PORTD <3:0> come output
/ / PORTD <6:4> come input

while (1)
(
scanned_key = scan_keypad ();
decode_key = decoded_key (scanned_key);

display_key (decoded_key);
)
)/ *
1 0x60
2 0x50
3 0x30
4 0x61
5 0x51
6 0x31
7 0x62
8 0x52
9 0x32
asterisco 0x64
0 0x54
hash 0x34
* /

 
Salve

Convertire i dati su B porta a ASCII o BCD e salvarlo in un array di memoria RAM indicizzate da un contatore

unsigned char Array [50];
unsigned char index = 0;

Array [index ] = Port_B_Data
...

All the best

Bobi
Lo specialista microcontrollore
 
i hav provato suggerimento ur.ma i cant stil avere l'output che voglio.
Credo che la causa del while (1) condizione.Come posso salvare il tasto premuto? pls help me con la code.plsss ...

 
Quote:

bobcat1: --unsigned char Array [50];

unsigned char index = 0;
 
Ho provato questo.ma ancora it doesnt work ..pls help me check this one.thanks ..void code_enter (void)
(

while (PORTB! = 12)
(

scanned_key = scan_keypad ();
decode_key = decoded_key (scanned_key);
display_key (decoded_key);

if (PORTB! = 0)
(
Codice1 = decoded_key;
i ;
/ / __delay_ms (150);
/ / PORTB = 0;
return;
)
void main ()
(
i = 0;
code_enter ();
)

 

Welcome to EDABoard.com

Sponsor

Back
Top