4x4 toetsenbord onderbreken?

Z

ZS1BFE

Guest
Hi all,
Ik gebruik Pic16f877 met 4x4keypad.I
can't get interrupt te work.I lees de toets OK, maar dan kan niet voorkomen dat de code uit het scannen van dezelfde toets nogmaals, terwijl de sleutel is pressed.I probeerde te houden door een IF-statement, maar dan hoeft hij slechts een keer gescand wanneer het programma wordt uitgevoerd bij het opstarten ??????
Ik gebruik CCS C.
Hier is een deel van de code die ik wrote.In het einde Ik zal toevoegen aan LCD display toets items.
Voor alles wat ik nu nodig hebben is voor het scannen van de sleutels in var "first_key, enz." De sleutels worden opgenomen via 74C922 en B4-poort wordt gebruikt voor het onderbreken van de trigger uitgang beschikbaar op de 74C922.
Gegevens in op B0 - B3.

# zekeringen NOLVP
set_tris_d (0x00);
set_tris_c (0x00);
set_tris_b (0xff);
int read_key = 0;
int key = 5;
int rij = 1;
int kol = 0;
int b = 0;
int first_key = 4;
int second_key = 5;
int third_key = 6;
int CNT = 1;
int bit = 0;
# int_RB
RB_isr () (
delay_ms (160);
read_key = input_b () & 0b00001111;
if (read_key == 0b00000001)
key = 0;
if (read_key == 0b00001100)
toegangstoets = 1;
if (read_key == 0b00001101)
toegangstoets = 2;
if (read_key == 0b00001110)
key = 3;
if (read_key == 0b00001000)
toegangstoets = 4;
if (read_key == 0b00001001)
toegangstoets = 5;
if (read_key == 0b00001010)
toegangstoets = 6;
if (read_key == 0b00000100)
toegangstoets = 7;
if (read_key == 0b00000101)
key = 8;
if (read_key == 0b00000110)
toegangstoets = 9;
if (read_key == 0b00000000) / / *
key = 10;
if (read_key == 0b00000010) / / #
toegangstoets = 11;
if (read_key == 0b0000) / / A
key = 12;
if (read_key == 0b00001011) / / B
toegangstoets = 13;
if (read_key == 0b00000111) / / C
key = 14;
if (read_key == 0b00000011) / / D
key = 15;
bit = 1;
CNT ;
if (CNT> 3)
CNT = 1;
)
void main () (
port_b_pullups (TRUE);
setup_adc_ports (NO_ANALOGS);
setup_adc (ADC_CLOCK_DIV_2);
setup_spi (FALSE);
setup_psp (PSP_DISABLED);
setup_counters (RTCC_INTERNAL, RTCC_DIV_2);
setup_ccp1 (CCP_OFF);
setup_ccp2 (CCP_OFF);
enable_interrupts (INT_RB);
enable_interrupts (mondiaal);

while (1)
(
if (ingang (pin_b4) == 1)
bit = 0;
output_d (key);
delay_ms (200);
if (CNT == 1)
first_key toets = 48;
if (CNT == 2)
second_key toets = 48;
if (CNT == 3)
third_key toets = 48;
)
)

Ik hoop dat dit duidelijk is.
THX
ZS1BFE

 
Hoi,
Alles wat ik moet weten is:

Heb ik nodig om het onderbreken nadat deze is gerepareerd.??

Het lijkt erop dat hij wist zelf, maar dan niet altijd de code in het int.?

Please advise.
THX
ZS1BFE

 

Welcome to EDABoard.com

Sponsor

Back
Top