4x8 Keypad Pic16f628

P

picnoobie

Guest
Her
er MikroC kode for et 4x8 tastaturet, for dem, der ikke ønsker at bruge specialisere ic
gerne 74c922.Jeg stammer dette fra CCS forum fleksible tastatur (for mere info søge efter det på CCS forum).kan være interessant for nogle.
Jeg var nødt til at bruge 20Mhz krystal, mindre end, at det ikke virker kan det være fordi jeg bruger?

pic16f628 stedet for pic16f628 A?udgange ascii til seriel port, god hvis du har mere end 1 usart,
eller måske det kunne blive tilpasset andre output.

BTW: MCLR er deaktiveret, USART RX kunne også bruges.4x8 kræves 12 stifter.

Code:Eksterne void SERIAL_IRQ ();

Eksterne void irq_usart_init ();

Eksterne void putc (CHAR k);

Eksterne void bringer (char * ostr);

Eksterne void writeln (char * ostr);

//=============================/ / Keypad forbindelse:

# define row0 PORTA.F0

# define row1 PORTA.F1

# define row2 PORTA.F2

# define row3 PORTA.F5# define col0 PORTA.F3

# define col1 PORTA.F4# define col2 PORTB.F0

# define col3 PORTB.F3

# define col4 PORTB.F4

# define col5 PORTB.F5

# define col6 PORTB.F6

# define col7 PORTB.F7# define input (pin) (pin & = 0x01)

# define sæt (PIN) (pin = 1)

# define klar (PIN) (pin = 0)typedef usignerede kort BYTE;/ / Key Mapping

char const NØGLER [4] [8] =

(

( 'O', 'G', 'X','1 ','2','3 ','6','9 '),

( 'Jeg', 'M', 'Y','4 ','5','8 ','0','#'},

( 'J', 'T', 'Z','7','.', 0x1B, 0x08, 0x0D),

( 'K', 'S', 'A',' ','-','>','<', 0x00)

);

/ *

/ / Tastatur layout:

char const NØGLER [4] [8] =

(

( 'E', 'F', 'G', 'H','1 ','2','3 ',' A '),

( 'Jeg', 'J', 'K', 'L','6 ','5','4 ',' B '),

( 'M', 'N', 'O', 'P','7 ','8','9 ',' C '),

( 'Q',' ','-','.','*',' 0','#',' D')

);/ / Tastatur layout:

char const NØGLER [4] [4] =

(('1 ','2','3 ',' A '),

('4 ','5','6 ',' B '),

('7 ','8','9 ',' C '),

{'*',' 0','#',' D '));

* /void interrupt (void) (

SERIAL_IRQ ();) / / Transmit Interrupt ---# define KBD_DEBOUNCE_FACTOR 100 / / Sæt dette nummer til apx n/333 hvor

/ / N er det antal gange, du forventer

/ / At kalde kbd_getc hver andenusignerede kort int ALL_ROWS (void)

(

if (input (row0) & input (row1) & input (row2) & input (row3))

vender tilbage (0);

anden

afkast (1);

)
CHAR kbd_getc ()

(

/ / statisk BYTE kbd_call_count;

statisk usignerede kort int kbd_down;

statisk CHAR last_key;

statisk BYTE col;BYTE kchar;

BYTE rækken;kchar = '\ 0';/ / if ( kbd_call_count> KBD_DEBOUNCE_FACTOR)

if (INTCON.T0IF)

(

switch (col)

(

tilfælde 0:

klare (col0);

sæt (col1);

sæt (col2);

sæt (col3);

sæt (col4);

sæt (col5);

sæt (col6);

sæt (col7);break;eksempel 1:

sæt (col0);

klare (col1);

sæt (col2);

sæt (col3);

sæt (col4);

sæt (col5);

sæt (col6);

sæt (col7);

break;tilfælde 2:

sæt (col0);

sæt (col1);

klare (col2);

sæt (col3);

sæt (col4);

sæt (col5);

sæt (col6);

sæt (col7);

break;tilfælde 3:

sæt (col0);

sæt (col1);

sæt (col2);

klare (col3);

sæt (col4);

sæt (col5);

sæt (col6);

sæt (col7);

break;tilfælde 4:

sæt (col0);

sæt (col1);

sæt (col2);

sæt (col3);

klare (col4);

sæt (col5);

sæt (col6);

sæt (col7);

break;sag 5:

sæt (col0);

sæt (col1);

sæt (col2);

sæt (col3);

sæt (col4);

klare (col5);

sæt (col6);

sæt (col7);

break;tilfælde 6:

sæt (col0);

sæt (col1);

sæt (col2);

sæt (col3);

sæt (col4);

sæt (col5);

klare (col6);

sæt (col7);

break;Sag 7:

sæt (col0);

sæt (col1);

sæt (col2);

sæt (col3);

sæt (col4);

sæt (col5);

sæt (col6);

klare (col7);

break;

)if (kbd_down)

(

if (! ALL_ROWS ())

(

kbd_down = 0;

kchar = last_key;

last_key = '\ 0';

)

)

anden

(

if (ALL_ROWS ())

(

if (! input (row0))

række = 0;

ellers if (! input (row1))

Rækken = 1;

ellers if (! input (row2))

række = 2;

ellers if (! input (row3))

RoW = 3;last_key = NØGLER [række] [col];

kbd_down = 1;

)

anden

(

col;

if (kol == 8)

col = 0;

)

)

/ / kbd_call_count = 0;

INTCON.T0IF = 0;

)tilbagevenden (kchar);

)//================================================ =============================//================================================ =============================

void vigtigste ()

(

CHAR k;

usignerede int i;

CMCON = 0x07; / / deaktivere analog

TRISB = 0b00000010 / / alle output tx

TRISA = 0b01100111;
OPTION_REG = 0x03; / / Timer0 timer mode 1:16 prescale

TMR0 = 0;

/ / INTCON.T0IF = 0; / / klar timer0 afbryder flagirq_usart_init ();

Delay_ms (1);

writeln ( "\ r \ Start ...");mens (1)

(k = kbd_getc ();if (k! = 0)

putc (k);))
 

Welcome to EDABoard.com

Sponsor

Back
Top